diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..b6913d749 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +**/.git +**/.gitignore +**/.DS_Store +**/*.pyc +**/__pycache__ + +# Autogenerated by Rodan +**rodan.log +**database.log +**celery.log diff --git a/.flake8 b/.flake8 index 3a6ca6ed6..12bcb7da7 100644 --- a/.flake8 +++ b/.flake8 @@ -1,8 +1,8 @@ [flake8] max-line-length = 100 -exclude = env, ./rodan/migrations/, ./helper_scripts, ./rodan/jobs/pixel_wrapper, ./rodan/jobs/text_alignment, ./rodan/jobs/jSymbolic-Rodan, ./rodan/jobs/gamera_rodan, ./rodan/jobs/neon-wrapper, ./rodan/jobs/vis-rodan, ./rodan/jobs/interactive_classifier, ./rodan/jobs/MEI_encoding, ./rodan/jobs/heuristic-pitch-finding, ./rodan/jobs/diagonal-neume-slicing, ./rodan/jobs/pil-rodan, ./rodan/jobs/Calvo-classifier, ./rodan/jobs/hpc-fast-trainer, ./rodan/jobs/JSOMR2MEI +exclude = env, ./rodan-main/migrations/, ./helper_scripts, ./rodan-main/jobs/pixel_wrapper, ./rodan-main/jobs/text_alignment, ./rodan-main/jobs/gamera_rodan, ./rodan-main/jobs/neon_wrapper, ./rodan-main/jobs/interactive_classifier, ./rodan-main/jobs/MEI_encoding, ./rodan-main/jobs/heuristic_pitch_finding, ./rodan-main/jobs/diagonal_neume_slicing, ./rodan-main/jobs/pil_rodan, ./rodan-main/jobs/Calvo_classifier, ./rodan-main/jobs/hpc_fast_trainer, ./docs, ./src per-file-ignores = - ./rodan/models/__init__.py:E501, F401 - ./rodan/__init__.py:W605, F401 - ./rodan/settings.py:E265 \ No newline at end of file + ./rodan-main/models/__init__.py:E501, F401 + ./rodan-main/__init__.py:W605, F401 + ./rodan-main/settings.py:E265 diff --git a/.gitignore b/.gitignore index 2aeffc4f2..d527f8d32 100644 --- a/.gitignore +++ b/.gitignore @@ -10,26 +10,10 @@ rodan.log rodan_env .DS_Store rodan/static/Rodan -rodan/jobs/diva_wrapper/ -rodan/jobs/gamera_rodan/ -rodan/jobs/vis-rodan/ -rodan/jobs/interactive_classifier -rodan/jobs/Interactive-Classifier -rodan/jobs/jSymbolic-Rodan/ -rodan/jobs/pil-rodan/ -rodan/jobs/Calvo-classifier/ -rodan/jobs/diagonal-neume-slicing/ -rodan/jobs/heuristic-pitch-finding/ -rodan/jobs/JSOMR2MEI/ -rodan/jobs/pixel_wrapper/ -rodan/jobs/neon-wrapper/ -rodan/jobs/MEI_encoding -rodan/jobs/text_alignment -rodan/jobs/hpc-fast-trainer -rodan/jobs/biollante-rodan -rodan/jobs/MEI_resizing - -/.DS_Store +rodan-main/code/jobs/diva_wrapper/ +rodan-main/code//jobs/vis_rodan/ +rodan-main/code/jobs/neon_wrapper/ +rodan-main/code/jobs/pixel_wrapper/ # ignore emacs autosave file *~ @@ -48,3 +32,15 @@ rodan/static/ *.log env/ +docs/_build +docs/* +*.egg-info/ +.mypy_cache/ + +# Ignore .vscode + +.vscode/ + +# Ignore python virtual environments. + +.env/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7e18f5803..000000000 --- a/.travis.yml +++ /dev/null @@ -1,62 +0,0 @@ -if: "(branch = master AND type IN (pull_request, cron)) OR (branch = develop)" -language: python -virtualenv: - system_site_packages: true -cache: pip -services: -- redis-server -addons: - postgresql: '9.5' - apt: - packages: - - postgresql-plpython-9.5 -matrix: - include: - - os: linux - sudo: required - python: 2.7 -before_install: -- sudo apt-get update -qy -- sudo /etc/init.d/postgresql restart -- sudo pip install redis -- sudo redis-server /etc/redis/redis.conf --port 6379 -- export REDIS_HOST=localhost -- export REDIS_PORT=6379 -- export REDIS_DB=0 -- export RABBITMQ_URL=amqp://guest_user:guest_pass@localhost:5672// -- export RABBITMQ_DEFAULT_USER=guest_user -- export RABBITMQ_DEFAULT_PASS=guest_pass -- export DJANGO_DEBUG_MODE=True -- export DJANGO_SECRET_KEY=local -- export DJANGO_ALLOWED_HOSTS=* -- export DJANGO_MEDIA_ROOT=./data/ -- export CELERY_JOB_QUEUE=None -- export POSTGRES_HOST=localhost -- export POSTGRES_PORT=5432 -- export POSTGRES_DB=rodan -- export POSTGRES_USER=rodan -- export POSTGRES_PASSWORD=rodan -install: -- pip install -r requirements.txt -- pip install flake8 -- sudo chmod -R 755 /home/travis/virtualenv/python2.7_with_system_site_packages/local/lib/python2.7/site-packages/pybagit -- cd ./rodan/jobs && git clone https://github.com/DDMAL/pil-rodan.git && cd ../.. -- sed -i "s/\/code\/Rodan/./g" rodan/settings.py -before_script: -- psql -c "CREATE DATABASE rodan;" -U postgres -- psql -c "CREATE USER rodan WITH PASSWORD 'rodan';" -U postgres -- psql -c "ALTER USER rodan WITH SUPERUSER;" -U postgres -- psql -c "CREATE LANGUAGE plpython2u;" -U postgres -- psql -c "GRANT ALL PRIVILEGES ON DATABASE "rodan" TO rodan;" -U postgres -- python manage.py makemigrations rodan -- python manage.py migrate -script: -- flake8 -# - python -W error manage.py test -# - python -W once manage.py test -- python manage.py test -notifications: - email: false - slack: - rooms: - secure: HDF/98yAM+vTFndMuwkHfnUfWfdcU5E0Wjkccn9jrJg2FiaW+SxoT7Gb/PBoWmYWke0BIEERop0khfEOlsa/n3d7N0eZcZ6IrJa2PDnyP6C9QK/wiagl2uC3NZeCVHuz7aXI2iRYcSjQt7iXlSfQqczhov4qhfhDwNZoddotWNU= diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..31abcc274 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM debian +# For more information about why this is here, check the build hooks. +RUN printenv \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..c1623d373 --- /dev/null +++ b/Makefile @@ -0,0 +1,249 @@ +# TODO: Some of these should be converted into Ansible Playbooks when there's time. + +# Chose a makefile because its easier to read over a bunch of if statements inside a bash script. +# We are taking advantage of .PHONY that is available in makefiles to create this simple looking +# list of command shortcuts + +# Portable replacement for `sed` or `gsed` +# See https://unix.stackexchange.com/questions/92895/how-can-i-achieve-portability-with-sed-i-in-place-editing +REPLACE := perl -i -pe + +RODAN_PATH := ./rodan-main/code/rodan +JOBS_PATH := $(RODAN_PATH)/jobs + +# Individual Commands + +build: + @echo "[-] Rebuilding Docker Images for Rodan..." + # Build py2-celery, because it's needed for Rodan and Celery images + # @docker-compose -f build.yml build --no-cache py2-celery # Sometimes it's better to use the + # no-cache option if something unexplicably broke with the py2-celery image (a cached build step perhaps) + @docker-compose -f build.yml build --no-cache py2-celery + # Build rodan and rodan-client because they are needed for nginx + @docker-compose -f build.yml build --no-cache --parallel rodan rodan-client + # DockerHub is not intuitive. You won't be able to build from the source root folder in both build contextes. + # When you build locally, the COPY command is relative to the dockerfile. When you build on DockerHub, its relative to the source root. + # For this reason we replace the name to build locally because we build more often on DockerHub than on local. + @$(REPLACE) "s/COPY .\/postgres\/maintenance/COPY .\/maintenance/g" ./postgres/Dockerfile || $(REPLACE) "s/COPY .\/postgres\/maintenance/COPY .\/maintenance/g" ./postgres/Dockerfile + @docker-compose -f build.yml build --no-cache --parallel nginx py3-celery gpu-celery postgres hpc-rabbitmq + # Revert back the change to the COPY command so it will work on Docker Hub. + @$(REPLACE) "s/COPY .\/maintenance/COPY .\/postgres\/maintenance/g" ./postgres/Dockerfile || $(REPLACE) "s/COPY .\/maintenance/COPY .\/postgres\/maintenance/g" ./postgres/Dockerfile + @echo "[+] Done." + +backup_db: + @docker exec `docker ps -f name=rodan_postgres -q` backup + +restore_db: + @docker exec `docker ps -f name=rodan_postgres -q` restore + +# Keep in mind, you may need to deal with the postgres/maintenance/backup or backups files depending on setup + +run: remote_jobs + # Run local version for dev + # Hello, 2022 hires! + @docker-compose up + +build_arm: + @docker build -f ./nginx/Dockerfile.arm --no-cache --tag nginx-local nginx + +run_arm: + # Run build_arm first if you don't have the NGINX container. + # Launch ARM instance + @docker-compose -f arm-compose.yml up + +run_client: + # Run Rodan-Client for dev (needs local dev up and running) + @docker run -p 8080:9002 -v `pwd`/rodan-client/code:/code ddmal/rodan-client:nightly bash + +deploy_staging: + # Can also be used to update a configuration (point to a different image.) + @echo "[-] Deploying Docker Swarm for: Rodan Staging" + @docker stack deploy --prune --with-registry-auth -c staging.yml rodan + @echo "[+] Done." + +deploy_production: + # Can also be used to update a configuration (point to a different image.) + @echo "[-] Deploying Docker Swarm for: Rodan Production" + @docker stack deploy --with-registry-auth -c production.yml rodan + @echo "[+] Done." + +copy_docker_tag: + # tag=v1.5.0rc0 make copy_docker_tag + @docker image tag $(docker images ddmal/rodan:nightly -q) ddmal/rodan:$(tag) + @docker image tag $(docker images ddmal/rodan-python2-celery:nightly -q) ddmal/rodan-python2-celery:$(tag) + @docker image tag $(docker images ddmal/rodan-python3-celery:nightly -q) ddmal/rodan-python3-celery:$(tag) + @docker image tag $(docker images ddmal/rodan-gpu-celery:nightly -q) ddmal/rodan-gpu-celery:$(tag) + +pull_docker_tag: + # tag=v1.5.0rc0 make pull_docker_tag + @docker pull ddmal/rodan:$(tag) + @docker pull ddmal/rodan-python2-celery:$(tag) + @docker pull ddmal/rodan-python3-celery:$(tag) + @docker pull ddmal/rodan-gpu-celery:$(tag) + +push_docker_tag: + # tag=v1.5.0rc0 make push_docker_tag + @docker push ddmal/rodan:$(tag) + @docker push ddmal/rodan-python2-celery:$(tag) + @docker push ddmal/rodan-python3-celery:$(tag) + @docker push ddmal/rodan-gpu-celery:$(tag) + +update: + # tag1=v1.5.0rc0 tag2=v1.3.1 make update + # This will update the nightly images forcefully + @echo "[-] Updating Docker Swarm images..." + # @docker-compose pull + + # DB First + @docker service update \ + --force \ + --update-order start-first \ + --update-delay 30s \ + --image ddmal/postgres-plpython:$(tag2) \ + rodan_postgres + + # You need to be logged in to docker for this one. + @docker service update \ + --force \ + --with-registry-auth \ + --update-order start-first \ + --update-delay 10m \ + --image ddmal/rodan:$(tag1) \ + rodan_rodan-main + + # These images might need time to update. + @docker service update \ + --force \ + --with-registry-auth \ + --update-order start-first \ + --stop-grace-period 9h \ + --update-delay 10m \ + --image ddmal/rodan:$(tag1) \ + rodan_celery + # These are public images + @docker service update \ + --force \ + --update-order start-first \ + --stop-grace-period 9h \ + --update-delay 30s \ + --image ddmal/rodan-python2-celery:$(tag1) \ + rodan_py2-celery + @docker service update \ + --force \ + --update-order start-first \ + --stop-grace-period 9h \ + --update-delay 30s \ + --image ddmal/rodan-python3-celery:$(tag1) \ + rodan_py3-celery + @docker service update \ + --force \ + --update-order start-first \ + --stop-grace-period 9h \ + --update-delay 30s \ + --image ddmal/rodan-gpu-celery:$(tag1) \ + rodan_gpu-celery + + # # TODO: Need to make rabbitmq durable and permanent + # # before we can make rolling updates for rabbitmq/hpc-rabbitmq. + # @docker service update \ + # --force \ + # --update-order start-first \ + # --update-delay 30s \ + # --image ddmal/hpc-rabbitmq:$(tag2) \ + # rodan_hpc-rabbitmq + @docker service update \ + --force \ + --update-order start-first \ + --update-delay 30s \ + --image ddmal/nginx:$(tag2) \ + rodan_nginx + + @echo "[+] Done." + +scale: + @docker service scale rodan_nginx=$(num) + @docker service scale rodan_rodan=$(num) + @docker service scale rodan_celery=$(num) + @docker service scale rodan_py2-celery=$(num) + @docker service scale rodan_py3-celery=$(num) + # @docker service scale rodan_gpu-celery=$(num) + @docker service scale rodan_redis=$(num) + # @docker service scale rodan_postgres=$(num) + @docker service scale rodan_rabbitmq=$(num) + @docker service scale rodan_hpc-rabbitmq=$(num) + +health: + @docker inspect --format "{{json .State.Health }}" $(log) | jq + +renew_certbot: + @docker exec `docker ps -f name=rodan_nginx -q` certbot renew --no-random-sleep-on-renew + @docker exec `docker ps -f name=rodan_nginx -q` nginx -s reload + +stop: + # This is the same command to stop docker swarm or docker-compose + @echo "[-] Stopping all running docker containers and services..." + @docker service rm `docker service ls -q` >>/dev/null 2>&1 || echo "[+] No Services Running" + @docker stop `docker ps -aq` >>/dev/null 2>&1 || echo "[+] No Containers Running" + @echo "[+] Done." + +clean: + # Erase all docker data, this can be dangerous + @echo "[-] Removing all docker containers..." + @docker system prune -fa >>/dev/null 2>&1 + @echo "[+] Done." + +clean_git: + @echo "[-] Cleaning git..." + @git reset --hard + @git pull + @echo "[+] Done." + + +clean_swarm: + # Not usually needed, but this will restart the swarm + @echo "[-] Exiting from Docker Swarm and recreating new Swarm Manager..." + @docker stack rm rodan || echo "[-] No stack to remove" + @docker swarm leave --force || echo "[-] Not a swarm manager" + @docker swarm init + @echo "[+] Done." + +debug_swarm: + @echo "[+] Creating a live service in the same network." + @docker service create --name statefulservice --network rodan_default --entrypoint="bash -c 'tail -f /dev/null'" --env-file=./scripts/staging.env ddmal/rodan:nightly bash + @docker exec -it `docker ps -f name=statefulservice -q` bash + +push: + @echo "[-] Pushing images to Docker Hub..." + @docker-compose push + @echo "[+] Done." + +pull: + @echo "[-] Pulling docker images from Docker Hub..." + @docker-compose pull + @echo "[+] Done." + +$(JOBS_PATH)/neon_wrapper/Neon/package.json: + @cd $(JOBS_PATH); \ + git clone --recurse-submodules -b develop https://github.com/DDMAL/neon_wrapper.git + +$(JOBS_PATH)/neon_wrapper/static/editor.html: $(JOBS_PATH)/neon_wrapper/Neon/package.json + @cd $(JOBS_PATH)/neon_wrapper; \ + yarn install && \ + yarn build + +$(JOBS_PATH)/pixel_wrapper/package.json: + @cd $(JOBS_PATH); git clone --recurse-submodules -b develop https://github.com/DDMAL/pixel_wrapper.git + +remote_jobs: $(JOBS_PATH)/neon_wrapper/static/editor.html $(JOBS_PATH)/pixel_wrapper/package.json + @cd $(RODAN_PATH); $(REPLACE) "s/#py2 //g" ./settings.py + @cd $(RODAN_PATH); $(REPLACE) "s/#py3 //g" ./settings.py + @cd $(RODAN_PATH); $(REPLACE) "s/#gpu //g" ./settings.py + +# Command Groups +reset: stop clean pull run +clean_reset: stop clean build run +upload: clean_reset push +deploy: clean_git pull run_swarm +reset_swarm: stop clean_git clean_swarm clean pull deploy_staging +update_swarm: clean_git update +staging: stop clean pull deploy_staging diff --git a/arm-compose.yml b/arm-compose.yml new file mode 100644 index 000000000..05dc1bf3c --- /dev/null +++ b/arm-compose.yml @@ -0,0 +1,133 @@ +version: "3.4" +services: + nginx: + image: "nginx-local:latest" + command: /run/start + depends_on: + - rodan-main + ports: + - "80:80" + - "443:443" + - "9002:9002" + volumes: + - "resources:/rodan/data" + + rodan-main: + image: "ddmal/rodan-main:nightly" + healthcheck: + test: ["CMD-SHELL", "/usr/bin/curl -H 'User-Agent: docker-healthcheck' http://localhost:8000/api/?format=json || exit 1"] + interval: "10s" + timeout: "5s" + retries: 2 + start_period: "2m" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: None + depends_on: + - postgres + - rabbitmq + - redis + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + + iipsrv: + image: "ddmal/iipsrv:nightly" + volumes: + - "resources:/rodan/data" + + + celery: + image: "ddmal/rodan-main:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: celery + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@celery"] + interval: "30s" + timeout: "3s" + start_period: "1m" + retries: 3 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + py2-celery: + image: "ddmal/rodan-python2-celery:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: Python2 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + - celery + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + py3-celery: + image: "ddmal/rodan-python3-celery:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: Python3 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + - celery + env_file: + - ./scripts/local.env + - ./hpc-rabbitmq/scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + + redis: + image: "redis:alpine" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + depends_on: + - postgres + + postgres: + image: "ddmal/postgres-plpython:nightly" + healthcheck: + test: ["CMD-SHELL", "pg_isready", "-U", "postgres"] + interval: 10s + timeout: 5s + retries: 5 + env_file: + - ./scripts/local.env + + rabbitmq: + image: "rabbitmq:alpine" + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: "30s" + timeout: "3s" + retries: 3 + depends_on: + - redis + env_file: + - ./scripts/local.env + +volumes: + resources: diff --git a/build.yml b/build.yml new file mode 100644 index 000000000..d7bb0f7f2 --- /dev/null +++ b/build.yml @@ -0,0 +1,64 @@ +version: "3.2" +services: + + nginx: + build: + context: ./nginx + dockerfile: Dockerfile + image: "ddmal/nginx:nightly" + + iipsrv: + build: + context: ./iipsrv + dockerfile: Dockerfile + image: "ddmal/iipsrv:nightly" + + rodan: + build: + context: . + dockerfile: Dockerfile + args: + BRANCHES: develop + image: "ddmal/rodan:nightly" + + py2-celery: + build: + context: . + dockerfile: ./python2-celery/Dockerfile + args: + BRANCHES: develop + image: "ddmal/rodan-python2-celery:nightly" + + py3-celery: + build: + context: . + dockerfile: ./python3-celery/Dockerfile + args: + BRANCHES: develop + image: "ddmal/rodan-python3-celery:nightly" + + gpu-celery: + build: + context: . + dockerfile: ./gpu-celery/Dockerfile + args: + BRANCHES: develop + image: "ddmal/rodan-gpu-celery:nightly" + + postgres: + build: + context: ./postgres + dockerfile: Dockerfile + image: "ddmal/postgres-plpython:nightly" + + rodan-client: + build: + context: ./rodan-client + dockerfile: Dockerfile + image: "ddmal/rodan-client:nightly" + + hpc-rabbitmq: + build: + context: ./hpc-rabbitmq + dockerfile: Dockerfile + image: "ddmal/hpc-rabbitmq:nightly" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..cea2082c1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,165 @@ +version: "3.4" +services: + nginx: + image: "ddmal/nginx:nightly" + command: /run/start + depends_on: + - celery + - postgres + - rabbitmq + - redis + - rodan-main + ports: + - "80:80" + - "443:443" + - "9002:9002" + volumes: + - "resources:/rodan/data" + + rodan-main: + image: "ddmal/rodan-main:nightly" + healthcheck: + test: ["CMD-SHELL", "/usr/bin/curl -H 'User-Agent: docker-healthcheck' http://localhost:8000/api/?format=json || exit 1"] + interval: "10s" + timeout: "5s" + retries: 2 + start_period: "2m" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: None + depends_on: + - postgres + - rabbitmq + - redis + - iipsrv + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + iipsrv: + image: "ddmal/iipsrv:nightly" + volumes: + - "resources:/rodan/data" + + celery: + image: "ddmal/rodan-main:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: celery + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@celery"] + interval: "30s" + timeout: "3s" + start_period: "1m" + retries: 3 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + py2-celery: + image: "ddmal/rodan-python2-celery:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: Python2 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + - celery + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + py3-celery: + image: "ddmal/rodan-python3-celery:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: Python3 + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + - celery + env_file: + - ./scripts/local.env + - ./hpc-rabbitmq/scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + gpu-celery: + image: "ddmal/rodan-gpu-celery:nightly" + command: bash -c "tail -f /dev/null" + environment: + CELERY_JOB_QUEUE: GPU + depends_on: + - postgres + - rodan-main + - rabbitmq + - redis + - celery + env_file: + - ./scripts/local.env + volumes: + - "resources:/rodan/data" + - "./rodan-main/code:/code/Rodan" + + redis: + image: "redis:alpine" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + depends_on: + - postgres + + postgres: + image: "ddmal/postgres-plpython:nightly" + healthcheck: + test: ["CMD-SHELL", "pg_isready", "-U", "postgres"] + interval: 10s + timeout: 5s + retries: 5 + env_file: + - ./scripts/local.env + + rabbitmq: + image: "rabbitmq:alpine" + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: "30s" + timeout: "3s" + retries: 3 + depends_on: + - redis + env_file: + - ./scripts/local.env + + hpc-rabbitmq: + image: "ddmal/hpc-rabbitmq:nightly" + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: "30s" + timeout: "3s" + retries: 3 + env_file: + - ./hpc-rabbitmq/scripts/local.env + ports: + - "5672:5672" + +volumes: + resources: diff --git a/gpu-celery/Dockerfile b/gpu-celery/Dockerfile new file mode 100644 index 000000000..891b19143 --- /dev/null +++ b/gpu-celery/Dockerfile @@ -0,0 +1,191 @@ +# Copyright 2019 The TensorFlow Authors. All Rights Reserved. +# +# 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. +# ============================================================================ +# +# THIS IS A GENERATED DOCKERFILE. +# +# This file was assembled from multiple pieces, whose use is documented +# throughout. Please refer to the TensorFlow dockerfiles documentation +# for more information. + +ARG UBUNTU_VERSION=18.04 +ARG CUDA=11.2 +FROM nvidia/cuda${ARCH:+-$ARCH}:${CUDA}.1-base-ubuntu${UBUNTU_VERSION} as base +# ARCH and CUDA are specified again because the FROM directive resets ARGs +# (but their default value is retained if set previously) +ARG ARCH +ARG CUDA +ARG CUDNN=8.1.0.77-1 +ARG CUDNN_MAJOR_VERSION=8 +ARG LIB_DIR_PREFIX=x86_64 +ARG LIBNVINFER=7.2.2-1 +ARG LIBNVINFER_MAJOR_VERSION=7 + +# The following two arguments are rodan-specific +ARG BRANCHES +ARG VERSION + +# Needed for string substitution +SHELL ["/bin/bash", "-c"] +# Pick up some TF dependencies +RUN apt update + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cuda-command-line-tools-${CUDA/./-} \ + libcublas-${CUDA/./-} \ + cuda-nvrtc-${CUDA/./-} \ + libcufft-${CUDA/./-} \ + libcurand-${CUDA/./-} \ + libcusolver-${CUDA/./-} \ + libcusparse-${CUDA/./-} \ + curl \ + libcudnn8=${CUDNN}+cuda${CUDA} \ + libfreetype6-dev \ + libhdf5-serial-dev \ + libzmq3-dev \ + pkg-config \ + software-properties-common \ + unzip \ + wget +# added wget + +# Install TensorRT if not building for PowerPC +# NOTE: libnvinfer uses cuda11.1 versions +# RUN [[ "${ARCH}" = "ppc64le" ]] || { apt-get update && \ +# apt-get install -y --no-install-recommends libnvinfer${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda11.1 \ +# libnvinfer-plugin${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda11.1 \ +# && apt-get clean \ +# && rm -rf /var/lib/apt/lists/*; } + +# For CUDA profiling, TensorFlow requires CUPTI. +ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH + +# Link the libcuda stub to the location where tensorflow is searching for it and reconfigure +# dynamic linker run-time bindings +RUN ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/stubs/libcuda.so.1 \ + && echo "/usr/local/cuda/lib64/stubs" > /etc/ld.so.conf.d/z-cuda-stubs.conf \ + && ldconfig + +# See http://bugs.python.org/issue19846 +ENV LANG C.UTF-8 + +# This section differs from the default tensorflow2.5.1 Dockerfile, because we specifically add python 3.7; +ARG PYTHON=python3.7 +ARG TF_PACKAGE=tensorflow +ARG TF_PACKAGE_VERSION=2.5.1 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.7 \ + python3-pip \ + && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* \ + && wget https://bootstrap.pypa.io/get-pip.py \ + && ${PYTHON} get-pip.py \ + && ln -sf /usr/bin/${PYTHON} /usr/local/bin/python3 \ + && ln -sf /usr/local/bin/pip /usr/local/bin/pip3 \ + && pip3 --no-cache-dir install --upgrade pip setuptools==57.0.0 \ + # Some TF tools expect a "python" binary + && ln -s $(which python3) /usr/local/bin/python \ + && python3 -m pip install --no-cache-dir ${TF_PACKAGE}${TF_PACKAGE_VERSION:+==${TF_PACKAGE_VERSION}} + +# RUN ln -s $(which python3) /usr/local/bin/python + +# Options: +# tensorflow +# tensorflow-gpu +# tf-nightly +# tf-nightly-gpu +# Set --build-arg TF_PACKAGE_VERSION=1.11.0rc0 to install a specific version. +# Installs the latest version by default. + +# COPY bashrc /etc/bash.bashrc +# RUN chmod a+rwx /etc/bash.bashrc + +# This ends the material obtained from TensorFlow's dockerfile. the remainder is rodan-docker-specific setup. + +# FROM base +RUN set -e \ + && apt-get update \ + && DEBIAN_FRONTEND="noninteractive" apt-get install -yqq \ + git \ + # Python lxml dependencies + python3.7-dev \ + python3-opencv \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + lib32ncurses5-dev \ + # Psycopg2 dependencies + libpq-dev \ + # For resource identification + libmagic-dev \ + unzip \ + # Remove when done + vim + +RUN rm -rf /var/lib/apt/lists/* + +# Bandaid fix for the cannot import name '_registerMatType' from 'cv2.cv2' issue +RUN pip uninstall opencv-python-headless && pip install opencv-python-headless==4.1.2.30 + +# Install GPU Rodan Jobs +COPY ./scripts/install_gpu_rodan_jobs /opt/ +# Install Rodan +COPY ./scripts/install_rodan /run/ +# Runs on both Rodan service, and Rodan-Celery +COPY ./scripts/entrypoint /opt/ +COPY ./scripts/start-celery /run/ +COPY ./scripts/wait-for-app /run/ + +# Copying rodan core from build context into container +# Rodan folder MUST be uppercase, otherwise many unittests fail. +COPY ./rodan-main/code /code/Rodan + +# necessary for scikit-image > 0.17, or else it will try to make a cache directory +# in a place where the www-data user does not have permissions to do so +ENV SKIMAGE_DATADIR "/tmp/.skimage_cache" + + +RUN set -x \ + # Create Folders + && mkdir -p /code/jobs \ + # Install GPU Jobs + && chmod +x /opt/install_gpu_rodan_jobs \ + && chown www-data /opt/install_gpu_rodan_jobs \ + && /opt/install_gpu_rodan_jobs \ + # Install Rodan + && sed -i "s/pip /pip3 /g" /run/install_rodan \ + && sed -i "s/lxml/#lxml/g" /code/Rodan/requirements.txt \ + # && sed -i "s/pybagit==1.5.0/-e git:\/\/github.com\/deepio\/pybagit.git@a27c9e0fc3bdf99dab8bd327f3ce9ea884abd6b4#egg=pybagit/g" /code/Rodan/requirements.txt \ + # Add Entrypoints + && sed -i 's/\r//' /opt/entrypoint \ + && chmod +x /opt/entrypoint \ + && chown www-data /opt/entrypoint \ + # Install Rodan + && chmod +x /run/install_rodan \ + && chown www-data /run/install_rodan \ + && /run/install_rodan \ + # Add Celery script + && chmod +x /run/start-celery \ + && chown www-data /run/start-celery \ + # Change the concurency for gpu jobs because Calvo is very expensive + && sed -i "s/=10/=1/g" /run/start-celery \ + # Script to wait for postgres and redis to be running before attempting to connect to them. + && chmod +x /run/wait-for-app \ + && chown www-data /run/wait-for-app \ + && chown -R www-data /code/Rodan /code/jobs + +ENTRYPOINT ["/opt/entrypoint"] \ No newline at end of file diff --git a/gpu-celery/config/promtail.yaml b/gpu-celery/config/promtail.yaml new file mode 100644 index 000000000..6fd7300ed --- /dev/null +++ b/gpu-celery/config/promtail.yaml @@ -0,0 +1,19 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://192.168.17.170:3100/loki/api/v1/push + +scrape_configs: +- job_name: rodan_celery + static_configs: + - targets: + - localhost + labels: + job: varlogs + host: SERVER_HOST + __path__: /code/Rodan/*.log \ No newline at end of file diff --git a/hooks/build b/hooks/build new file mode 100755 index 000000000..37b69b56b --- /dev/null +++ b/hooks/build @@ -0,0 +1,149 @@ +#!/bin/bash +# hooks/build +# https://docs.docker.com/docker-cloud/builds/advanced/ +set -o errexit + +# This "useless" image is build to prevent dockerhub from overwriting +# the nightly image with it's obligatory minimum of a build rule. If we want a build +# trigger with a HTTPS POST request, we must have at least 1 build rule. +docker build \ + --tag ddmal/rodan:placeholder \ + . + +RODAN_TAG=`cd rodan-main/code && git describe --tags --always` +RODAN_CLIENT_TAG=`cd rodan-client/code && git describe --tags --always` +RODAN_DOCKER_TAG=`git describe --tags --always` + +############################################################################### +# Stage 1 +# Build and push Python2-Celery image + +echo "[+] Building Python2-Celery" + +# Too many times did docker cache mess up a build. No more cache. +docker build \ + --no-cache \ + --build-arg BRANCHES="develop" \ + --build-arg VERSION=${RODAN_TAG} \ + --tag ddmal/rodan-python2-celery:nightly \ + --tag ddmal/rodan-python2-celery:${RODAN_TAG} \ + --file ./python2-celery/Dockerfile \ + . + +echo "[+] Pushing Python2-Celery" +docker push ddmal/rodan-python2-celery:nightly + +echo "[+] Python2-Celery needs to be made and pushed before Rodan/Celery because the Rodan image uses the Python2 image as its base." + +if [ -z `echo ${RODAN_TAG} | awk -F'-' '{print $3}'` ]; then + echo "[+] New tagged image for Python2-Celery: ${RODAN_TAG}" + docker push ddmal/rodan-python2-celery:${RODAN_TAG} +fi + + +############################################################################### +# Stage 2 +# Build and push Rodan and Rodan-Client + +echo "[+] Building Rodan & Celery Core" + +# Don't remove --no-cache +docker build \ + --no-cache \ + --build-arg BRANCHES="develop" \ + --build-arg VERSION=${RODAN_TAG} \ + --tag ddmal/rodan-main:nightly \ + --tag ddmal/rodan-main:${RODAN_TAG} \ + --file ./rodan-main/Dockerfile \ + . + +echo "[+] Building iipsrv" + +docker build \ + --no-cache \ + --tag ddmal/iipsrv:nightly \ + ./iipsrv + +echo "[+] Building Rodan-Client" + +docker build \ + --no-cache \ + --build-arg BRANCHES="develop" \ + --build-arg VERSION=${RODAN_CLIENT_TAG} \ + --tag ddmal/rodan-client:nightly \ + --tag ddmal/rodan-client:${RODAN_CLIENT_TAG} \ + ./rodan-client + +echo "[+] Pushing Rodan & Celery Core" + +if [ -z `echo ${RODAN_TAG} | awk -F'-' '{print $3}'` ]; then + echo "[+] New tagged image for Rodan/Celery: ${RODAN_TAG}" + docker push ddmal/rodan-main:${RODAN_TAG} +fi + +docker push ddmal/rodan-main:nightly + +echo "[+] Pushing Rodan-Client" + +if [ -z `echo ${RODAN_CLIENT_TAG} | awk -F'-' '{print $3}'` ]; then + echo "[+] New tagged image for rodan-client: ${RODAN_CLIENT_TAG}" + docker push ddmal/rodan-client:${RODAN_CLIENT_TAG} +fi + +docker push ddmal/rodan-client:nightly + +############################################################################### +# Stage 3 +# Build the rest + +echo "[+] Building Python3-Celery" + +docker build \ + --no-cache \ + --build-arg BRANCHES="develop" \ + --build-arg VERSION=${RODAN_TAG} \ + --tag ddmal/rodan-python3-celery:nightly \ + --tag ddmal/rodan-python3-celery:${RODAN_TAG} \ + --file ./python3-celery/Dockerfile \ + . + +echo "[+] Building GPU-Celery" + +docker build \ + --no-cache \ + --build-arg BRANCHES="develop" \ + --build-arg VERSION=${RODAN_TAG} \ + --tag ddmal/rodan-gpu-celery:nightly \ + --tag ddmal/rodan-gpu-celery:${RODAN_TAG} \ + --file ./gpu-celery/Dockerfile \ + . + +echo "[+] Building Postgres" + +docker build \ + --no-cache \ + --build-arg VERSION=${RODAN_DOCKER_TAG} \ + --tag ddmal/postgres-plpython:nightly \ + --tag ddmal/postgres-plpython:${RODAN_DOCKER_TAG} \ + --file ./postgres/Dockerfile \ + . + +echo "[+] Building Nginx" + +docker build \ + --no-cache \ + --build-arg VERSION=${RODAN_DOCKER_TAG} \ + --tag ddmal/nginx:nightly \ + --tag ddmal/nginx:${RODAN_DOCKER_TAG} \ + ./nginx + +echo "[+] Building HPC-RabbitMQ" + +docker build \ + --no-cache \ + --build-arg VERSION=${RODAN_DOCKER_TAG} \ + --tag ddmal/hpc-rabbitmq:nightly \ + --tag ddmal/hpc-rabbitmq:${RODAN_DOCKER_TAG} \ + ./hpc-rabbitmq + +echo "[+] Finished" diff --git a/hooks/post_checkout b/hooks/post_checkout new file mode 100644 index 000000000..e83b801ec --- /dev/null +++ b/hooks/post_checkout @@ -0,0 +1,12 @@ +#!/bin/bash +# hooks/post_checkout +# https://docs.docker.com/docker-cloud/builds/advanced/ + +# echo "[-] Changing branch" +# git checkout develop +# # git reset --hard HEAD +# # git clean -xffd +# # git pull origin develop + +# echo "[-] Fetching tags" +# # git fetch --tags --quiet origin \ No newline at end of file diff --git a/hooks/push b/hooks/push new file mode 100644 index 000000000..8f279e516 --- /dev/null +++ b/hooks/push @@ -0,0 +1,47 @@ +#!/bin/bash +# hooks/post_push +# https://docs.docker.com/docker-cloud/builds/advanced/ + +RODAN_TAG=`cd rodan-main/code && git describe --tags --always` +RODAN_CLIENT_TAG=`cd rodan-client/code && git describe --tags --always` +RODAN_DOCKER_TAG=`git describe --tags --always` + +echo "[+] Pushing Python3-Celery" + +if [ -z `echo ${RODAN_TAG} | awk -F'-' '{print $3}'` ]; then + docker push ddmal/rodan-python3-celery:${RODAN_TAG} +fi + +docker push ddmal/rodan-python3-celery:nightly + +echo "[+] Pushing GPU-Celery" + +if [ -z `echo ${RODAN_TAG} | awk -F'-' '{print $3}'` ]; then + docker push ddmal/rodan-gpu-celery:${RODAN_TAG} +fi + +docker push ddmal/rodan-gpu-celery:nightly + +echo "[+] Pushing Postgres" + +if [ -z `echo ${RODAN_DOCKER_TAG} | awk -F'-' '{print $3}'` ]; then + docker push ddmal/postgres-plpython:${RODAN_DOCKER_TAG} +fi + +docker push ddmal/postgres-plpython:nightly + +echo "[+] Pushing Nginx" + +if [ -z `echo ${RODAN_DOCKER_TAG} | awk -F'-' '{print $3}'` ]; then + docker push ddmal/nginx:${RODAN_DOCKER_TAG} +fi + +docker push ddmal/nginx:nightly + +echo "[+] Pushing HPC-RabbitMQ" + +if [ -z `echo ${RODAN_DOCKER_TAG} | awk -F'-' '{print $3}'` ]; then + docker push ddmal/hpc-rabbitmq:${RODAN_DOCKER_TAG} +fi + +docker push ddmal/hpc-rabbitmq:nightly diff --git a/hpc-rabbitmq/Dockerfile b/hpc-rabbitmq/Dockerfile new file mode 100644 index 000000000..63cc90827 --- /dev/null +++ b/hpc-rabbitmq/Dockerfile @@ -0,0 +1,8 @@ +FROM rabbitmq:alpine +ARG VERSION + +COPY ./config/rabbitmq.conf /etc/rabbitmq/ +COPY ./scripts/setup.sh /run/setup.sh +RUN chmod +x /run/setup.sh + +CMD ["/run/setup.sh"] diff --git a/hpc-rabbitmq/config/rabbitmq.conf b/hpc-rabbitmq/config/rabbitmq.conf new file mode 100644 index 000000000..99c8dc6fe --- /dev/null +++ b/hpc-rabbitmq/config/rabbitmq.conf @@ -0,0 +1,971 @@ +# ====================================== +# RabbitMQ broker section +# ====================================== + +## Related doc guide: https://rabbitmq.com/configure.html. See +## https://rabbitmq.com/documentation.html for documentation ToC. + +## Networking +## ==================== +## +## Related doc guide: https://rabbitmq.com/networking.html. +## +## By default, RabbitMQ will listen on all interfaces, using +## the standard (reserved) AMQP 0-9-1 and 1.0 port. +## +# listeners.tcp.default = 5672 + + +## To listen on a specific interface, provide an IP address with port. +## For example, to listen only on localhost for both IPv4 and IPv6: +## +# IPv4 +# listeners.tcp.local = 127.0.0.1:5672 +# IPv6 +# listeners.tcp.local_v6 = ::1:5672 + +## You can define multiple listeners using listener names +# listeners.tcp.other_port = 5673 +# listeners.tcp.other_ip = 10.10.10.10:5672 + + +## TLS listeners are configured in the same fashion as TCP listeners, +## including the option to control the choice of interface. +## +# listeners.ssl.default = 5671 + +## Number of Erlang processes that will accept connections for the TCP +## and TLS listeners. +## +# num_acceptors.tcp = 10 +# num_acceptors.ssl = 10 + + +## Maximum amount of time allowed for the AMQP 0-9-1 and AMQP 1.0 handshake +## (performed after socket connection and TLS handshake) to complete, in milliseconds. +## +# handshake_timeout = 10000 + +## Set to 'true' to perform reverse DNS lookups when accepting a +## connection. rabbitmqctl and management UI will then display hostnames +## instead of IP addresses. Default value is `false`. +## +# reverse_dns_lookups = false + +## +## Security, Access Control +## ============== +## + +## Related doc guide: https://rabbitmq.com/access-control.html. + +## The default "guest" user is only permitted to access the server +## via a loopback interface (e.g. localhost). +## {loopback_users, [<<"guest">>]}, +## +# loopback_users.guest = true + +## Uncomment the following line if you want to allow access to the +## guest user from anywhere on the network. +# loopback_users.guest = false + +## TLS configuration. +## +## Related doc guide: https://rabbitmq.com/ssl.html. +## +# ssl_options.verify = verify_peer +# ssl_options.fail_if_no_peer_cert = false +# ssl_options.cacertfile = /path/to/cacert.pem +# ssl_options.certfile = /path/to/cert.pem +# ssl_options.keyfile = /path/to/key.pem +# +# ssl_options.honor_cipher_order = true +# ssl_options.honor_ecc_order = true + +# ssl_options.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384 +# ssl_options.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384 +# ssl_options.ciphers.3 = ECDHE-ECDSA-AES256-SHA384 +# ssl_options.ciphers.4 = ECDHE-RSA-AES256-SHA384 +# ssl_options.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384 +# ssl_options.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384 +# ssl_options.ciphers.7 = ECDH-ECDSA-AES256-SHA384 +# ssl_options.ciphers.8 = ECDH-RSA-AES256-SHA384 +# ssl_options.ciphers.9 = DHE-RSA-AES256-GCM-SHA384 +# ssl_options.ciphers.10 = DHE-DSS-AES256-GCM-SHA384 +# ssl_options.ciphers.11 = DHE-RSA-AES256-SHA256 +# ssl_options.ciphers.12 = DHE-DSS-AES256-SHA256 +# ssl_options.ciphers.13 = ECDHE-ECDSA-AES128-GCM-SHA256 +# ssl_options.ciphers.14 = ECDHE-RSA-AES128-GCM-SHA256 +# ssl_options.ciphers.15 = ECDHE-ECDSA-AES128-SHA256 +# ssl_options.ciphers.16 = ECDHE-RSA-AES128-SHA256 +# ssl_options.ciphers.17 = ECDH-ECDSA-AES128-GCM-SHA256 +# ssl_options.ciphers.18 = ECDH-RSA-AES128-GCM-SHA256 +# ssl_options.ciphers.19 = ECDH-ECDSA-AES128-SHA256 +# ssl_options.ciphers.20 = ECDH-RSA-AES128-SHA256 +# ssl_options.ciphers.21 = DHE-RSA-AES128-GCM-SHA256 +# ssl_options.ciphers.22 = DHE-DSS-AES128-GCM-SHA256 +# ssl_options.ciphers.23 = DHE-RSA-AES128-SHA256 +# ssl_options.ciphers.24 = DHE-DSS-AES128-SHA256 +# ssl_options.ciphers.25 = ECDHE-ECDSA-AES256-SHA +# ssl_options.ciphers.26 = ECDHE-RSA-AES256-SHA +# ssl_options.ciphers.27 = DHE-RSA-AES256-SHA +# ssl_options.ciphers.28 = DHE-DSS-AES256-SHA +# ssl_options.ciphers.29 = ECDH-ECDSA-AES256-SHA +# ssl_options.ciphers.30 = ECDH-RSA-AES256-SHA +# ssl_options.ciphers.31 = ECDHE-ECDSA-AES128-SHA +# ssl_options.ciphers.32 = ECDHE-RSA-AES128-SHA +# ssl_options.ciphers.33 = DHE-RSA-AES128-SHA +# ssl_options.ciphers.34 = DHE-DSS-AES128-SHA +# ssl_options.ciphers.35 = ECDH-ECDSA-AES128-SHA +# ssl_options.ciphers.36 = ECDH-RSA-AES128-SHA + +## Select an authentication/authorisation backend to use. +## +## Alternative backends are provided by plugins, such as rabbitmq-auth-backend-ldap. +## +## NB: These settings require certain plugins to be enabled. +## +## Related doc guides: +## +## * https://rabbitmq.com/plugins.html +## * https://rabbitmq.com/access-control.html +## + +# auth_backends.1 = rabbit_auth_backend_internal + +## uses separate backends for authentication and authorisation, +## see below. +# auth_backends.1.authn = rabbit_auth_backend_ldap +# auth_backends.1.authz = rabbit_auth_backend_internal + +## The rabbitmq_auth_backend_ldap plugin allows the broker to +## perform authentication and authorisation by deferring to an +## external LDAP server. +## +## Relevant doc guides: +## +## * https://rabbitmq.com/ldap.html +## * https://rabbitmq.com/access-control.html +## +## uses LDAP for both authentication and authorisation +# auth_backends.1 = rabbit_auth_backend_ldap + +## uses HTTP service for both authentication and +## authorisation +# auth_backends.1 = rabbit_auth_backend_http + +## uses two backends in a chain: HTTP first, then internal +# auth_backends.1 = rabbit_auth_backend_http +# auth_backends.2 = rabbit_auth_backend_internal + +## Authentication +## The built-in mechanisms are 'PLAIN', +## 'AMQPLAIN', and 'EXTERNAL' Additional mechanisms can be added via +## plugins. +## +## Related doc guide: https://rabbitmq.com/authentication.html. +## +# auth_mechanisms.1 = PLAIN +# auth_mechanisms.2 = AMQPLAIN + +## The rabbitmq-auth-mechanism-ssl plugin makes it possible to +## authenticate a user based on the client's x509 (TLS) certificate. +## Related doc guide: https://rabbitmq.com/authentication.html. +## +## To use auth-mechanism-ssl, the EXTERNAL mechanism should +## be enabled: +## +# auth_mechanisms.1 = PLAIN +# auth_mechanisms.2 = AMQPLAIN +# auth_mechanisms.3 = EXTERNAL + +## To force x509 certificate-based authentication on all clients, +## exclude all other mechanisms (note: this will disable password-based +## authentication even for the management UI!): +## +# auth_mechanisms.1 = EXTERNAL + +## This pertains to both the rabbitmq-auth-mechanism-ssl plugin and +## STOMP ssl_cert_login configurations. See the RabbitMQ STOMP plugin +## configuration section later in this file and the README in +## https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl for further +## details. +## +## To use the TLS cert's CN instead of its DN as the username +## +# ssl_cert_login_from = common_name + +## TLS handshake timeout, in milliseconds. +## +# ssl_handshake_timeout = 5000 + + +## Password hashing implementation. Will only affect newly +## created users. To recalculate hash for an existing user +## it's necessary to update her password. +## +## To use SHA-512, set to rabbit_password_hashing_sha512. +## +# password_hashing_module = rabbit_password_hashing_sha256 + +## When importing definitions exported from versions earlier +## than 3.6.0, it is possible to go back to MD5 (only do this +## as a temporary measure!) by setting this to rabbit_password_hashing_md5. +## +# password_hashing_module = rabbit_password_hashing_md5 + +## +## Default User / VHost +## ==================== +## + +## On first start RabbitMQ will create a vhost and a user. These +## config items control what gets created. +## Relevant doc guide: https://rabbitmq.com/access-control.html +## +# default_vhost = / +# default_user = guest +# default_pass = guest + +# default_permissions.configure = .* +# default_permissions.read = .* +# default_permissions.write = .* + +## Tags for default user +## +## For more details about tags, see the documentation for the +## Management Plugin at https://rabbitmq.com/management.html. +## +# default_user_tags.administrator = true + +## Define other tags like this: +# default_user_tags.management = true +# default_user_tags.custom_tag = true + +## +## Additional network and protocol related configuration +## ===================================================== +## + +## Set the default AMQP 0-9-1 heartbeat interval (in seconds). +## Related doc guides: +## +## * https://rabbitmq.com/heartbeats.html +## * https://rabbitmq.com/networking.html +## +# heartbeat = 60 + +## Set the max permissible size of an AMQP frame (in bytes). +## +# frame_max = 131072 + +## Set the max frame size the server will accept before connection +## tuning occurs +## +# initial_frame_max = 4096 + +## Set the max permissible number of channels per connection. +## 0 means "no limit". +## +# channel_max = 128 + +## Customising TCP Listener (Socket) Configuration. +## +## Related doc guides: +## +## * https://rabbitmq.com/networking.html +## * https://www.erlang.org/doc/man/inet.html#setopts-2 +## + +# tcp_listen_options.backlog = 128 +# tcp_listen_options.nodelay = true +# tcp_listen_options.exit_on_close = false +# +# tcp_listen_options.keepalive = true +# tcp_listen_options.send_timeout = 15000 +# +# tcp_listen_options.buffer = 196608 +# tcp_listen_options.sndbuf = 196608 +# tcp_listen_options.recbuf = 196608 + +## +## Resource Limits & Flow Control +## ============================== +## +## Related doc guide: https://rabbitmq.com/memory.html. + +## Memory-based Flow Control threshold. +## +# vm_memory_high_watermark.relative = 0.4 + +## Alternatively, we can set a limit (in bytes) of RAM used by the node. +## +# vm_memory_high_watermark.absolute = 1073741824 + +## Or you can set absolute value using memory units (with RabbitMQ 3.6.0+). +## Absolute watermark will be ignored if relative is defined! +## +# vm_memory_high_watermark.absolute = 2GB +## +## Supported unit symbols: +## +## k, kiB: kibibytes (2^10 - 1,024 bytes) +## M, MiB: mebibytes (2^20 - 1,048,576 bytes) +## G, GiB: gibibytes (2^30 - 1,073,741,824 bytes) +## kB: kilobytes (10^3 - 1,000 bytes) +## MB: megabytes (10^6 - 1,000,000 bytes) +## GB: gigabytes (10^9 - 1,000,000,000 bytes) + + + +## Fraction of the high watermark limit at which queues start to +## page message out to disc in order to free up memory. +## For example, when vm_memory_high_watermark is set to 0.4 and this value is set to 0.5, +## paging can begin as early as when 20% of total available RAM is used by the node. +## +## Values greater than 1.0 can be dangerous and should be used carefully. +## +## One alternative to this is to use durable queues and publish messages +## as persistent (delivery mode = 2). With this combination queues will +## move messages to disk much more rapidly. +## +## Another alternative is to configure queues to page all messages (both +## persistent and transient) to disk as quickly +## as possible, see https://rabbitmq.com/lazy-queues.html. +## +# vm_memory_high_watermark_paging_ratio = 0.5 + +## Selects Erlang VM memory consumption calculation strategy. Can be `allocated`, `rss` or `legacy` (aliased as `erlang`), +## Introduced in 3.6.11. `rss` is the default as of 3.6.12. +## See https://github.com/rabbitmq/rabbitmq-server/issues/1223 and rabbitmq/rabbitmq-common#224 for background. +# vm_memory_calculation_strategy = rss + +## Interval (in milliseconds) at which we perform the check of the memory +## levels against the watermarks. +## +# memory_monitor_interval = 2500 + +## The total memory available can be calculated from the OS resources +## - default option - or provided as a configuration parameter. +# total_memory_available_override_value = 2GB + +## Set disk free limit (in bytes). Once free disk space reaches this +## lower bound, a disk alarm will be set - see the documentation +## listed above for more details. +## +## Absolute watermark will be ignored if relative is defined! +# disk_free_limit.absolute = 50000 + +## Or you can set it using memory units (same as in vm_memory_high_watermark) +## with RabbitMQ 3.6.0+. +# disk_free_limit.absolute = 500KB +# disk_free_limit.absolute = 50mb +# disk_free_limit.absolute = 5GB + +## Alternatively, we can set a limit relative to total available RAM. +## +## Values lower than 1.0 can be dangerous and should be used carefully. +# disk_free_limit.relative = 2.0 + +## +## Clustering +## ===================== +## +# cluster_partition_handling = ignore + +## pause_if_all_down strategy require additional configuration +# cluster_partition_handling = pause_if_all_down + +## Recover strategy. Can be either 'autoheal' or 'ignore' +# cluster_partition_handling.pause_if_all_down.recover = ignore + +## Node names to check +# cluster_partition_handling.pause_if_all_down.nodes.1 = rabbit@localhost +# cluster_partition_handling.pause_if_all_down.nodes.2 = hare@localhost + +## Mirror sync batch size, in messages. Increasing this will speed +## up syncing but total batch size in bytes must not exceed 2 GiB. +## Available in RabbitMQ 3.6.0 or later. +## +# mirroring_sync_batch_size = 4096 + +## Make clustering happen *automatically* at startup. Only applied +## to nodes that have just been reset or started for the first time. +## +## Relevant doc guide: https://rabbitmq.com//cluster-formation.html +## + +# cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config +# +# cluster_formation.classic_config.nodes.1 = rabbit1@hostname +# cluster_formation.classic_config.nodes.2 = rabbit2@hostname +# cluster_formation.classic_config.nodes.3 = rabbit3@hostname +# cluster_formation.classic_config.nodes.4 = rabbit4@hostname + +## DNS-based peer discovery. This backend will list A records +## of the configured hostname and perform reverse lookups for +## the addresses returned. + +# cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns +# cluster_formation.dns.hostname = discovery.eng.example.local + +## This node's type can be configured. If you are not sure +## what node type to use, always use 'disc'. +# cluster_formation.node_type = disc + +## Interval (in milliseconds) at which we send keepalive messages +## to other cluster members. Note that this is not the same thing +## as net_ticktime; missed keepalive messages will not cause nodes +## to be considered down. +## +# cluster_keepalive_interval = 10000 + +## +## Statistics Collection +## ===================== +## + +## Set (internal) statistics collection granularity. +## +## Can be none, coarse or fine +# collect_statistics = none + +# collect_statistics = coarse + +## Statistics collection interval (in milliseconds). Increasing +## this will reduce the load on management database. +## +# collect_statistics_interval = 5000 + +## +## Misc/Advanced Options +## ===================== +## +## NB: Change these only if you understand what you are doing! +## + +## Explicitly enable/disable hipe compilation. +## +# hipe_compile = false + +## Timeout used when waiting for Mnesia tables in a cluster to +## become available. +## +# mnesia_table_loading_retry_timeout = 30000 + +## Retries when waiting for Mnesia tables in the cluster startup. Note that +## this setting is not applied to Mnesia upgrades or node deletions. +## +# mnesia_table_loading_retry_limit = 10 + +## Size in bytes below which to embed messages in the queue index. +## Related doc guide: https://rabbitmq.com/persistence-conf.html +## +# queue_index_embed_msgs_below = 4096 + +## You can also set this size in memory units +## +# queue_index_embed_msgs_below = 4kb + +## Whether or not to enable background periodic forced GC runs for all +## Erlang processes on the node in "waiting" state. +## +## Disabling background GC may reduce latency for client operations, +## keeping it enabled may reduce median RAM usage by the binary heap +## (see https://www.erlang-solutions.com/blog/erlang-garbage-collector.html). +## +## Before trying this option, please take a look at the memory +## breakdown (https://www.rabbitmq.com/memory-use.html). +## +# background_gc_enabled = false + +## Target (desired) interval (in milliseconds) at which we run background GC. +## The actual interval will vary depending on how long it takes to execute +## the operation (can be higher than this interval). Values less than +## 30000 milliseconds are not recommended. +## +# background_gc_target_interval = 60000 + +## Whether or not to enable proxy protocol support. +## Once enabled, clients cannot directly connect to the broker +## anymore. They must connect through a load balancer that sends the +## proxy protocol header to the broker at connection time. +## This setting applies only to AMQP clients, other protocols +## like MQTT or STOMP have their own setting to enable proxy protocol. +## See the plugins documentation for more information. +## +# proxy_protocol = false + +## ---------------------------------------------------------------------------- +## Advanced Erlang Networking/Clustering Options. +## +## Related doc guide: https://rabbitmq.com/clustering.html +## ---------------------------------------------------------------------------- + +# ====================================== +# Kernel section +# ====================================== + +## Timeout used to detect peer unavailability, including CLI tools. +## Related doc guide: https://www.rabbitmq.com/nettick.html. +## +# net_ticktime = 60 + +## Inter-node communication port range. +## The parameters inet_dist_listen_min and inet_dist_listen_max +## can be configured in the classic config format only. +## Related doc guide: https://www.rabbitmq.com/networking.html#epmd-inet-dist-port-range. + + +## ---------------------------------------------------------------------------- +## RabbitMQ Management Plugin +## +## Related doc guide: https://rabbitmq.com/management.html. +## ---------------------------------------------------------------------------- + +# ======================================= +# Management section +# ======================================= + +## Preload schema definitions from the following JSON file. +## Related doc guide: https://rabbitmq.com/management.html#load-definitions. +## +# management.load_definitions = /path/to/exported/definitions.json + +## Log all requests to the management HTTP API to a file. +## +# management.http_log_dir = /path/to/access.log + +## HTTP listener and embedded Web server settings. +# ## See https://rabbitmq.com/management.html for details. +# +# management.tcp.port = 15672 +# management.tcp.ip = 0.0.0.0 +# +# management.tcp.shutdown_timeout = 7000 +# management.tcp.max_keepalive = 120 +# management.tcp.idle_timeout = 120 +# management.tcp.inactivity_timeout = 120 +# management.tcp.request_timeout = 120 +# management.tcp.compress = true + +## HTTPS listener settings. +## See https://rabbitmq.com/management.html and https://rabbitmq.com/ssl.html for details. +## +# management.ssl.port = 15671 +# management.ssl.cacertfile = /path/to/ca_certificate.pem +# management.ssl.certfile = /path/to/server_certificate.pem +# management.ssl.keyfile = /path/to/server_key.pem + +## More TLS options +# management.ssl.honor_cipher_order = true +# management.ssl.honor_ecc_order = true +# management.ssl.client_renegotiation = false +# management.ssl.secure_renegotiate = true + +## Supported TLS versions +# management.ssl.versions.1 = tlsv1.2 +# management.ssl.versions.2 = tlsv1.1 + +## Cipher suites the server is allowed to use +# management.ssl.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384 +# management.ssl.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384 +# management.ssl.ciphers.3 = ECDHE-ECDSA-AES256-SHA384 +# management.ssl.ciphers.4 = ECDHE-RSA-AES256-SHA384 +# management.ssl.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384 +# management.ssl.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384 +# management.ssl.ciphers.7 = ECDH-ECDSA-AES256-SHA384 +# management.ssl.ciphers.8 = ECDH-RSA-AES256-SHA384 +# management.ssl.ciphers.9 = DHE-RSA-AES256-GCM-SHA384 + + + +## One of 'basic', 'detailed' or 'none'. See +## https://rabbitmq.com/management.html#fine-stats for more details. +# management.rates_mode = basic + +## Configure how long aggregated data (such as message rates and queue +## lengths) is retained. Please read the plugin's documentation in +## https://rabbitmq.com/management.html#configuration for more +## details. +## Your can use 'minute', 'hour' and 'day' keys or integer key (in seconds) +# management.sample_retention_policies.global.minute = 5 +# management.sample_retention_policies.global.hour = 60 +# management.sample_retention_policies.global.day = 1200 + +# management.sample_retention_policies.basic.minute = 5 +# management.sample_retention_policies.basic.hour = 60 + +# management.sample_retention_policies.detailed.10 = 5 + +## ---------------------------------------------------------------------------- +## RabbitMQ Shovel Plugin +## +## Related doc guide: https://rabbitmq.com/shovel.html +## ---------------------------------------------------------------------------- + +## Shovel plugin config example is defined in additional.config file + + +## ---------------------------------------------------------------------------- +## RabbitMQ STOMP Plugin +## +## Related doc guide: https://rabbitmq.com/stomp.html +## ---------------------------------------------------------------------------- + +# ======================================= +# STOMP section +# ======================================= + +## See https://rabbitmq.com/stomp.html for details. + +## TCP listeners. +## +# stomp.listeners.tcp.1 = 127.0.0.1:61613 +# stomp.listeners.tcp.2 = ::1:61613 + +## TCP listener settings +## +# stomp.tcp_listen_options.backlog = 2048 +# stomp.tcp_listen_options.recbuf = 131072 +# stomp.tcp_listen_options.sndbuf = 131072 +# +# stomp.tcp_listen_options.keepalive = true +# stomp.tcp_listen_options.nodelay = true +# +# stomp.tcp_listen_options.exit_on_close = true +# stomp.tcp_listen_options.send_timeout = 120 + +## Proxy protocol support +## +# stomp.proxy_protocol = false + +## TLS listeners +## See https://rabbitmq.com/stomp.html and https://rabbitmq.com/ssl.html for details. +# stomp.listeners.ssl.default = 61614 +# +# ssl_options.cacertfile = path/to/cacert.pem +# ssl_options.certfile = path/to/cert.pem +# ssl_options.keyfile = path/to/key.pem +# ssl_options.verify = verify_peer +# ssl_options.fail_if_no_peer_cert = true + + +## Number of Erlang processes that will accept connections for the TCP +## and TLS listeners. +## +# stomp.num_acceptors.tcp = 10 +# stomp.num_acceptors.ssl = 1 + +## Additional TLS options + +## Extract a name from the client's certificate when using TLS. +## +# stomp.ssl_cert_login = true + +## Set a default user name and password. This is used as the default login +## whenever a CONNECT frame omits the login and passcode headers. +## +## Please note that setting this will allow clients to connect without +## authenticating! +## +# stomp.default_user = guest +# stomp.default_pass = guest + +## If a default user is configured, or you have configured use TLS client +## certificate based authentication, you can choose to allow clients to +## omit the CONNECT frame entirely. If set to true, the client is +## automatically connected as the default user or user supplied in the +## TLS certificate whenever the first frame sent on a session is not a +## CONNECT frame. +## +# stomp.implicit_connect = true + +## Whether or not to enable proxy protocol support. +## Once enabled, clients cannot directly connect to the broker +## anymore. They must connect through a load balancer that sends the +## proxy protocol header to the broker at connection time. +## This setting applies only to STOMP clients, other protocols +## like MQTT or AMQP have their own setting to enable proxy protocol. +## See the plugins or broker documentation for more information. +## +# stomp.proxy_protocol = false + +## ---------------------------------------------------------------------------- +## RabbitMQ MQTT Adapter +## +## See https://github.com/rabbitmq/rabbitmq-mqtt/blob/stable/README.md +## for details +## ---------------------------------------------------------------------------- + +# ======================================= +# MQTT section +# ======================================= + +## TCP listener settings. +## +# mqtt.listeners.tcp.1 = 127.0.0.1:61613 +# mqtt.listeners.tcp.2 = ::1:61613 + +## TCP listener options (as per the broker configuration). +## +# mqtt.tcp_listen_options.backlog = 4096 +# mqtt.tcp_listen_options.recbuf = 131072 +# mqtt.tcp_listen_options.sndbuf = 131072 +# +# mqtt.tcp_listen_options.keepalive = true +# mqtt.tcp_listen_options.nodelay = true +# +# mqtt.tcp_listen_options.exit_on_close = true +# mqtt.tcp_listen_options.send_timeout = 120 + +## TLS listener settings +## ## See https://rabbitmq.com/mqtt.html and https://rabbitmq.com/ssl.html for details. +# +# mqtt.listeners.ssl.default = 8883 +# +# ssl_options.cacertfile = /path/to/tls/ca_certificate_bundle.pem +# ssl_options.certfile = /path/to/tls/server_certificate.pem +# ssl_options.keyfile = /path/to/tls/server_key.pem +# ssl_options.verify = verify_peer +# ssl_options.fail_if_no_peer_cert = true +# + + +## Number of Erlang processes that will accept connections for the TCP +## and TLS listeners. +## +# mqtt.num_acceptors.tcp = 10 +# mqtt.num_acceptors.ssl = 10 + +## Whether or not to enable proxy protocol support. +## Once enabled, clients cannot directly connect to the broker +## anymore. They must connect through a load balancer that sends the +## proxy protocol header to the broker at connection time. +## This setting applies only to STOMP clients, other protocols +## like STOMP or AMQP have their own setting to enable proxy protocol. +## See the plugins or broker documentation for more information. +## +# mqtt.proxy_protocol = false + +## Set the default user name and password used for anonymous connections (when client +## provides no credentials). Anonymous connections are highly discouraged! +## +# mqtt.default_user = guest +# mqtt.default_pass = guest + +## Enable anonymous connections. If this is set to false, clients MUST provide +## credentials in order to connect. See also the mqtt.default_user/mqtt.default_pass +## keys. Anonymous connections are highly discouraged! +## +# mqtt.allow_anonymous = true + +## If you have multiple vhosts, specify the one to which the +## adapter connects. +## +# mqtt.vhost = / + +## Specify the exchange to which messages from MQTT clients are published. +## +# mqtt.exchange = amq.topic + +## Specify TTL (time to live) to control the lifetime of non-clean sessions. +## +# mqtt.subscription_ttl = 1800000 + +## Set the prefetch count (governing the maximum number of unacknowledged +## messages that will be delivered). +## +# mqtt.prefetch = 10 + + +## ---------------------------------------------------------------------------- +## RabbitMQ AMQP 1.0 Support +## +## See https://github.com/rabbitmq/rabbitmq-amqp1.0/blob/stable/README.md. +## ---------------------------------------------------------------------------- + +# ======================================= +# AMQP 1.0 section +# ======================================= + + +## Connections that are not authenticated with SASL will connect as this +## account. See the README for more information. +## +## Please note that setting this will allow clients to connect without +## authenticating! +## +# amqp1_0.default_user = guest + +## Enable protocol strict mode. See the README for more information. +## +# amqp1_0.protocol_strict_mode = false + +## Logging settings. +## +## See https://rabbitmq.com/logging.html and https://github.com/erlang-lager/lager for details. +## + +## Log directory, taken from the RABBITMQ_LOG_BASE env variable by default. +## +# log.dir = /var/log/rabbitmq + +## Logging to file. Can be false or a filename. +## Default: +# log.file = rabbit.log + +## To disable logging to a file +# log.file = false + +## Log level for file logging +## +# log.file.level = info + +## File rotation config. No rotation by default. +## DO NOT SET rotation date to ''. Leave the value unset if "" is the desired value +# log.file.rotation.date = $D0 +# log.file.rotation.size = 0 + +## Logging to console (can be true or false) +## +# log.console = false + +## Log level for console logging +## +# log.console.level = info + +## Logging to the amq.rabbitmq.log exchange (can be true or false) +## +# log.exchange = false + +## Log level to use when logging to the amq.rabbitmq.log exchange +## +# log.exchange.level = info + + + +## ---------------------------------------------------------------------------- +## RabbitMQ LDAP Plugin +## +## Related doc guide: https://rabbitmq.com/ldap.html. +## +## ---------------------------------------------------------------------------- + +# ======================================= +# LDAP section +# ======================================= + +## +## Connecting to the LDAP server(s) +## ================================ +## + +## Specify servers to bind to. You *must* set this in order for the plugin +## to work properly. +## +# auth_ldap.servers.1 = your-server-name-goes-here + +## You can define multiple servers +# auth_ldap.servers.2 = your-other-server + +## Connect to the LDAP server using TLS +## +# auth_ldap.use_ssl = false + +## Specify the LDAP port to connect to +## +# auth_ldap.port = 389 + +## LDAP connection timeout, in milliseconds or 'infinity' +## +# auth_ldap.timeout = infinity + +## Or number +# auth_ldap.timeout = 500 + +## Enable logging of LDAP queries. +## One of +## - false (no logging is performed) +## - true (verbose logging of the logic used by the plugin) +## - network (as true, but additionally logs LDAP network traffic) +## +## Defaults to false. +## +# auth_ldap.log = false + +## Also can be true or network +# auth_ldap.log = true +# auth_ldap.log = network + +## +## Authentication +## ============== +## + +## Pattern to convert the username given through AMQP to a DN before +## binding +## +# auth_ldap.user_dn_pattern = cn=${username},ou=People,dc=example,dc=com + +## Alternatively, you can convert a username to a Distinguished +## Name via an LDAP lookup after binding. See the documentation for +## full details. + +## When converting a username to a dn via a lookup, set these to +## the name of the attribute that represents the user name, and the +## base DN for the lookup query. +## +# auth_ldap.dn_lookup_attribute = userPrincipalName +# auth_ldap.dn_lookup_base = DC=gopivotal,DC=com + +## Controls how to bind for authorisation queries and also to +## retrieve the details of users logging in without presenting a +## password (e.g., SASL EXTERNAL). +## One of +## - as_user (to bind as the authenticated user - requires a password) +## - anon (to bind anonymously) +## - {UserDN, Password} (to bind with a specified user name and password) +## +## Defaults to 'as_user'. +## +# auth_ldap.other_bind = as_user + +## Or can be more complex: +# auth_ldap.other_bind.user_dn = User +# auth_ldap.other_bind.password = Password + +## If user_dn and password defined - other options is ignored. + +# ----------------------------- +# Too complex section of LDAP +# ----------------------------- + +## +## Authorisation +## ============= +## + +## The LDAP plugin can perform a variety of queries against your +## LDAP server to determine questions of authorisation. +## +## Related doc guide: https://rabbitmq.com/ldap.html#authorisation. + +## Following configuration should be defined in advanced.config file +## DO NOT UNCOMMENT THESE LINES! + +## Set the query to use when determining vhost access +## +## {vhost_access_query, {in_group, +## "ou=${vhost}-users,ou=vhosts,dc=example,dc=com"}}, + +## Set the query to use when determining resource (e.g., queue) access +## +## {resource_access_query, {constant, true}}, + +## Set queries to determine which tags a user has +## +## {tag_queries, []} +# ]}, +# ----------------------------- + diff --git a/hpc-rabbitmq/scripts/local.env b/hpc-rabbitmq/scripts/local.env new file mode 100644 index 000000000..fd1dd3a8d --- /dev/null +++ b/hpc-rabbitmq/scripts/local.env @@ -0,0 +1,5 @@ +## HCP RabbitMQ Conf +HPC_RABBITMQ_USER=user +HPC_RABBITMQ_PASSWORD=user +HPC_RABBITMQ_HOST=hpc-rabbitmq +RABBITMQ_PID_FILE=/var/lib/rabbitmq/mnesia/rabbitmq diff --git a/hpc-rabbitmq/scripts/production.env b/hpc-rabbitmq/scripts/production.env new file mode 100644 index 000000000..d2a457b76 --- /dev/null +++ b/hpc-rabbitmq/scripts/production.env @@ -0,0 +1,5 @@ +## HPC RabbitMQ Config (Staging) +HPC_RABBITMQ_USER=hpc_user +HPC_RABBITMQ_PASSWORD=HH7YdkZXdcoNobm9 +HPC_RABBITMQ_HOST=hpc-rabbitmq +RABBITMQ_PID_FILE=/var/lib/rabbitmq/mnesia/rabbitmq diff --git a/hpc-rabbitmq/scripts/setup.sh b/hpc-rabbitmq/scripts/setup.sh new file mode 100644 index 000000000..5a7dbd930 --- /dev/null +++ b/hpc-rabbitmq/scripts/setup.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +( rabbitmqctl wait $RABBITMQ_PID_FILE && \ + rabbitmqctl add_user $HPC_RABBITMQ_USER $HPC_RABBITMQ_PASSWORD && \ + rabbitmqctl set_permissions $HPC_RABBITMQ_USER ".*" ".*" ".*" ) & +rabbitmq-server $@ diff --git a/hpc-rabbitmq/scripts/staging.env b/hpc-rabbitmq/scripts/staging.env new file mode 100644 index 000000000..d2a457b76 --- /dev/null +++ b/hpc-rabbitmq/scripts/staging.env @@ -0,0 +1,5 @@ +## HPC RabbitMQ Config (Staging) +HPC_RABBITMQ_USER=hpc_user +HPC_RABBITMQ_PASSWORD=HH7YdkZXdcoNobm9 +HPC_RABBITMQ_HOST=hpc-rabbitmq +RABBITMQ_PID_FILE=/var/lib/rabbitmq/mnesia/rabbitmq diff --git a/iipsrv/Dockerfile b/iipsrv/Dockerfile new file mode 100644 index 000000000..c277c0fc4 --- /dev/null +++ b/iipsrv/Dockerfile @@ -0,0 +1,32 @@ +FROM alpine:3 + +RUN apk update +RUN apk upgrade +RUN apk add --no-cache \ + autoconf \ + automake \ + build-base \ + libtool \ + libpng-dev \ + m4 \ + make \ + openjpeg-dev \ + pkgconfig \ + tiff-dev + +RUN wget https://github.com/ruven/iipsrv/archive/refs/heads/master.zip +RUN unzip master.zip +WORKDIR iipsrv-master +RUN ./autogen.sh +RUN ./configure --enable-openjpeg +RUN make + +ENV JPEG_QUALITY 90 +ENV FILESYSTEM_PREFIX /rodan/data/ +ENV VERBOSITY 2 +ENV PORT 9003 + +EXPOSE ${PORT} + + +ENTRYPOINT ./src/iipsrv.fcgi --bind 0.0.0.0:${PORT} diff --git a/nginx/Dockerfile b/nginx/Dockerfile new file mode 100644 index 000000000..c22ddf012 --- /dev/null +++ b/nginx/Dockerfile @@ -0,0 +1,77 @@ +FROM ddmal/rodan-client:nightly as webapp + +# Add local configuration and build. +RUN rm -rf /code/configuration.json +COPY ./config/configuration.json /code/ +RUN /code/node_modules/.bin/gulp dist + + +########################################################### +FROM ddmal/rodan-main:nightly as rodan-static + +RUN touch /code/Rodan/database.log /code/Rodan/rodan.log + +RUN export DJANGO_SECRET_KEY=localdev \ + && export DJANGO_ACCESS_LOG=None \ + && export DJANGO_DEBUG_LOG=None \ + && export DJANGO_ALLOWED_HOSTS=* \ + && export CELERY_JOB_QUEUE=None \ + # Check to see if the static folder exists + && mkdir /code/Rodan/rodan/static \ + # If it does, erase everything. + || rm -rf /code/Rodan/rodan/static/* \ + && python /code/Rodan/manage.py collectstatic --noinput + + +########################################################### +FROM nginx:1.19 + +# Install OS dependencies +RUN apt-get -qq update \ + && apt-get -qq install openssl certbot unzip -y \ + && rm -rf /var/lib/apt/lists/* + +# Add configuration files. +COPY ./config/nginx.conf /etc/nginx/nginx.conf +COPY ./config/ssl.conf /etc/nginx/conf.d/ssl.conf +COPY ./config/ssl-http.conf /etc/nginx/conf.d/ssl-http.conf +COPY ./config/error.conf /etc/nginx/conf.d/error.conf +COPY ./config/rodan.conf /etc/nginx/sites-available/rodan.conf +COPY ./config/rodan.stream /etc/nginx/sites-available/rodan.stream + +RUN mkdir -p /rodan/data +RUN chown -R www-data /rodan + +# Add 40x and 50x pages. +RUN rm /usr/share/nginx/html/* +COPY ./html/ /var/www/default/ + +# Add Rodan Client +COPY --from=webapp /code/dist/* /var/www/default/dist/ +RUN set -e \ + && mkdir /var/www/default/dist/resources \ + && mv /var/www/default/dist/favicon.ico /var/www/default/dist/resources/ \ + && mv /var/www/default/dist/grids-responsive-min.css /var/www/default/dist/resources/ +# Add Rodan Static files +COPY --from=rodan-static /code/Rodan/staticfiles /rodan/static + +# Create and add SSL certificates. +#RUN mkdir /etc/nginx/keys +#COPY ./certs/local_cert.pem /etc/nginx/keys/cert.pem +#COPY ./certs/local_key.pem /etc/nginx/keys/key.pem +#COPY ./certs/local_dhparam.pem /etc/nginx/keys/dhparam.pem + +RUN mkdir -p /etc/letsencrypt +RUN mkdir -p /var/www/letsencrypt/.well-known/acme-challenge + +# This script corrects permissions in the file system +COPY ./scripts/setup /run/ +RUN chmod +x /run/setup + +# This script starts nginx for development +COPY ./scripts/start /run/ +RUN chmod +x /run/start + +# This script starts nginx for production +COPY ./scripts/start-production /run/ +RUN chmod +x /run/start-production diff --git a/nginx/Dockerfile.arm b/nginx/Dockerfile.arm new file mode 100644 index 000000000..85c11eb5c --- /dev/null +++ b/nginx/Dockerfile.arm @@ -0,0 +1,77 @@ +FROM ddmal/rodan-client:nightly as webapp + +# Add local configuration and build. +RUN rm -rf /code/configuration.json +COPY ./config/configuration.json /code/ +RUN /code/node_modules/.bin/gulp dist + + +########################################################### +FROM ddmal/rodan-main:nightly as rodan-static + +RUN touch /code/Rodan/database.log /code/Rodan/rodan.log + +RUN export DJANGO_SECRET_KEY=localdev \ + && export DJANGO_ACCESS_LOG=None \ + && export DJANGO_DEBUG_LOG=None \ + && export DJANGO_ALLOWED_HOSTS=* \ + && export CELERY_JOB_QUEUE=None \ + # Check to see if the static folder exists + && mkdir /code/Rodan/rodan/static \ + # If it does, erase everything. + || rm -rf /code/Rodan/rodan/static/* \ + && python /code/Rodan/manage.py collectstatic --noinput + + +########################################################### +FROM nginx:1.19 + +# Install OS dependencies +RUN apt-get -qq update \ + && apt-get -qq install openssl certbot unzip -y \ + && rm -rf /var/lib/apt/lists/* + +# Add configuration files. +COPY ./config/nginx.conf /etc/nginx/nginx.conf +COPY ./config/ssl.conf /etc/nginx/conf.d/ssl.conf +COPY ./config/ssl-http.conf /etc/nginx/conf.d/ssl-http.conf +COPY ./config/error.conf /etc/nginx/conf.d/error.conf +COPY ./config/rodan.conf /etc/nginx/sites-available/rodan.conf +COPY ./config/rodan_m1.stream /etc/nginx/sites-available/rodan.stream + +RUN mkdir -p /rodan/data +RUN chown -R www-data /rodan + +# Add 40x and 50x pages. +RUN rm /usr/share/nginx/html/* +COPY ./html/ /var/www/default/ + +# Add Rodan Client +COPY --from=webapp /code/dist/* /var/www/default/dist/ +RUN set -e \ + && mkdir /var/www/default/dist/resources \ + && mv /var/www/default/dist/favicon.ico /var/www/default/dist/resources/ \ + && mv /var/www/default/dist/grids-responsive-min.css /var/www/default/dist/resources/ +# Add Rodan Static files +COPY --from=rodan-static /code/Rodan/staticfiles /rodan/static + +# Create and add SSL certificates. +#RUN mkdir /etc/nginx/keys +#COPY ./certs/local_cert.pem /etc/nginx/keys/cert.pem +#COPY ./certs/local_key.pem /etc/nginx/keys/key.pem +#COPY ./certs/local_dhparam.pem /etc/nginx/keys/dhparam.pem + +RUN mkdir -p /etc/letsencrypt +RUN mkdir -p /var/www/letsencrypt/.well-known/acme-challenge + +# This script corrects permissions in the file system +COPY ./scripts/setup /run/ +RUN chmod +x /run/setup + +# This script starts nginx for development +COPY ./scripts/start /run/ +RUN chmod +x /run/start + +# This script starts nginx for production +COPY ./scripts/start-production /run/ +RUN chmod +x /run/start-production diff --git a/nginx/Dockerfile.production b/nginx/Dockerfile.production new file mode 100644 index 000000000..75edf5fde --- /dev/null +++ b/nginx/Dockerfile.production @@ -0,0 +1,7 @@ +FROM ddmal/nginx:nightly +ARG SERVER_HOST + +# [TODO] Run basic config test. It will check to make sure hosts upstream are online. +# But health checks will reboot the current instance, and not others. Do not only rely on this. +# HEALTHCHECK --interval=5m --timeout=3s \ +# CMD service nginx configtest || exit 1 diff --git a/nginx/certs/local_cert.pem b/nginx/certs/local_cert.pem new file mode 100644 index 000000000..3101b9005 --- /dev/null +++ b/nginx/certs/local_cert.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFtjCCA56gAwIBAgIJANcherjxf2hXMA0GCSqGSIb3DQEBCwUAMHAxCzAJBgNV +BAYTAkNBMQ8wDQYDVQQIDAZRdWViZWMxETAPBgNVBAcMCE1vbnRyZWFsMRkwFwYD +VQQKDBBNY0dpbGxVbml2ZXJzaXR5MQ4wDAYDVQQLDAVERE1BTDESMBAGA1UEAwwJ +bG9jYWxob3N0MB4XDTE4MDgyNzE2MDA1N1oXDTI4MDgyNDE2MDA1N1owcDELMAkG +A1UEBhMCQ0ExDzANBgNVBAgMBlF1ZWJlYzERMA8GA1UEBwwITW9udHJlYWwxGTAX +BgNVBAoMEE1jR2lsbFVuaXZlcnNpdHkxDjAMBgNVBAsMBURETUFMMRIwEAYDVQQD +DAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO2rtS +DQBMp6ay/1xcKOl7mj5MvdYkxOI0FJSBoqk+8KMUF7f9+eXTMeDMRpA6VCluj2SW +5271rk35m7CIAMa3KdZ+7K4VLVSL8IfP0787ti1Npdg2OxHTMQwlqiXi6qCEEhYz +OxYgVpyobVnVsenHut1ijN1ZFs4yXWCuX+s23Ku08Gnh+iYU6zBVWg+F60SP21Iw +oBsNn1HpJGoI5GLwb1ptxVhykudA/G8Zj5/LlEGlZDeMQlwuroBHzQkDap35FYNz +Koje57SOJxxbP4jwWFvVyNPhiBww9rDmSMreXiCtGjS43Gd3x5Tvvuk5HKThPSlv +ikWHWfcGkzUDTpOsxjNAKzYDOsUJHCvbMtkQpub7LXD8jGSIKUta2oVcc1UaWzPd +SiPw0+GNe6+6sdCeiMgOxbNZxwISjTFrVzXjKhyOwaq19beV9toVxavcgzWwAr+m +guOzikPEzaPKdtbyXFvEo1ucO6eKF/Nx7/Xgr59TM5Ygqw+UGuaMwseCcvS2Fgxs +HGNGlXfk/+atmEd03+f+RDlccVs5gmHD7LT5WM0p/eyHqqIkW45HDYQCttzH5Nqz +Q/aMOCPC4+03+8TvFKjOrFGZwiRIevN3c8njP3gNLqxY3t0Uk0kearTzaLAwdgOn +cZf++ZufVtqgQdnS2939Ln6jAJd26nnyHbAqkQIDAQABo1MwUTAdBgNVHQ4EFgQU +dRW0ichLzNOLAWfRMzwpvrGWziUwHwYDVR0jBBgwFoAUdRW0ichLzNOLAWfRMzwp +vrGWziUwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAb3m+PKK5 +wq1aisyAQP/rc667j8qZOcrqb6KBxsNEBwPucOet+bW1UFW7wvJYzIcY9Yr4Mz0o +uj+llg3XjTA75hxTIkc/Ajua7jnYbTV3IHDAKdbjkPYPaQpjlM21ElwUN0dcj6z7 +ykcnZZ2n2tckS50j3wVTiEEm8JSDTYgxdbVQn//kaK4LiTpy2bvoa+y6QvcQebfP +avEMIkW8aosPeH1N9CgckJ9e5RW8FO6kc+Av47ZGW4Ph+vlna/eJo04rcc142sOx +UujJ4eiGlfb0plGzmmb7XTEtodmFjGh0GeNg7Q0aluirFoTDUJCat+ctIufvUPgm +7jbSclq0IqfAHp5up11tOWpaqDUdrM9fQRjomHLpZUCWjcrwvh2eI6PdKIDrfGwg +kvmJk/59Yy7ckyy/12/cKaPJty9W7ZIFsPizYzmQ/XrwEfmNWPjYUTjhjq24va+A +0bHvHtfJv79KzaS6xzUeegogfh5JI5cQT359Uagd9NGoKezYrDA00YsddEWD1hNF +erN+t8zlk3EfpH2ExgB7ZfTWp/E8X5HiiLpEs9/+pF18bM4YtmRe23RuUmrUKgoe +YCnnHaP6fwws5Wn9gBCsVaUOh8u4vjz/O/51LIqIeFvXk7z5i5QpQIBdJpkXw6sB +hLq5J39nu77U8OOOW/91+Xi9ipm2qS98giY= +-----END CERTIFICATE----- diff --git a/nginx/certs/local_dhparam.pem b/nginx/certs/local_dhparam.pem new file mode 100644 index 000000000..213f62939 --- /dev/null +++ b/nginx/certs/local_dhparam.pem @@ -0,0 +1,8 @@ +-----BEGIN DH PARAMETERS----- +MIIBCAKCAQEA8k4EAa+Ly8/NLclE9EzhUC/yy+wvJlt15p88K7IDrFM1nuOMCzDo +ugCBAL0MczxOIXyDij3XdO9CCFpYDkwp5KvAaiFGQ9aOgAHVuVizWKQYZitBWDJj +PdW98Ze5Ax4CyzaW4t+A5d3uZ2WeJyyEUDd73Lmy248ftFEsXGqrRVrXgFQbXZu9 +HGFCgoizP9wPaANXBZX1ScNrvjEAApaW9hvRV8iqxJrkiejW/+DB83CavkOL1Lt8 +wxN5wU5MZy9YPr64eltYwjjmwkTYBx1RGlW17gLwmIFZXp7GQV/hGDvgaiD5Hzxz +s6Avj2rNMLV+vmGUUTnKd71FgnyZwJBdawIBAg== +-----END DH PARAMETERS----- diff --git a/nginx/certs/local_key.pem b/nginx/certs/local_key.pem new file mode 100644 index 000000000..e61a0acc0 --- /dev/null +++ b/nginx/certs/local_key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDO2rtSDQBMp6ay +/1xcKOl7mj5MvdYkxOI0FJSBoqk+8KMUF7f9+eXTMeDMRpA6VCluj2SW5271rk35 +m7CIAMa3KdZ+7K4VLVSL8IfP0787ti1Npdg2OxHTMQwlqiXi6qCEEhYzOxYgVpyo +bVnVsenHut1ijN1ZFs4yXWCuX+s23Ku08Gnh+iYU6zBVWg+F60SP21IwoBsNn1Hp +JGoI5GLwb1ptxVhykudA/G8Zj5/LlEGlZDeMQlwuroBHzQkDap35FYNzKoje57SO +JxxbP4jwWFvVyNPhiBww9rDmSMreXiCtGjS43Gd3x5Tvvuk5HKThPSlvikWHWfcG +kzUDTpOsxjNAKzYDOsUJHCvbMtkQpub7LXD8jGSIKUta2oVcc1UaWzPdSiPw0+GN +e6+6sdCeiMgOxbNZxwISjTFrVzXjKhyOwaq19beV9toVxavcgzWwAr+mguOzikPE +zaPKdtbyXFvEo1ucO6eKF/Nx7/Xgr59TM5Ygqw+UGuaMwseCcvS2FgxsHGNGlXfk +/+atmEd03+f+RDlccVs5gmHD7LT5WM0p/eyHqqIkW45HDYQCttzH5NqzQ/aMOCPC +4+03+8TvFKjOrFGZwiRIevN3c8njP3gNLqxY3t0Uk0kearTzaLAwdgOncZf++Zuf +VtqgQdnS2939Ln6jAJd26nnyHbAqkQIDAQABAoICAQCk8FKHNWi0tsW8WtQphFHQ +RghBJun2/aqk/nf/+lTbpANVBSin8jhos4/dMrLUX8F9sAb0MOwQKIFyc8tKVtwc +ttaa9FxG9JNC1nNkqyIEGdp73K7PZ0BqVuSpr8dv7cg6JzXeedHFzWoy/qawN6IC +qaTXbR0eaYnXLQ/nWwJyB3k+2KiFEPKGoZYzqJFSJmvQDYC21yNbNFua/Hc0Se/+ +abwAZWiGS07sSZzJE/XF3ZyOpZ+JTmy0qF4PYpU6TSxTrezXyuXCX51f8B2zQLEP +fFUV3YHdhqt7+2jI5ugkcYe6n3fEo7I5F0JR/Ld427c5BozgrK+OIpVPf9e4oFIs +9R9/0zGJ4j/96S3M48lzbyf3452B2+N1hQONmyDuADFuv6VlTOS7MRQxTKVD8O0R +V++rBDfEuYubJ3aMX2RpruI4H+Fob4Y+bNTdxE9SQrMWFTxAK3LTsKryu6ZPutFY +v+2vrfzBfH+mIld33RaH6Qoo1zEXQIMXQxS/RjtAuQqvlyt0Q1PDcUCiroeQ0n/z +xK1ZqxrTzGxpi0ZPOdWhu1/C/yTqoYTZY+8cQh6XAGiLuF43obKt4J57GVtR5cvf +LFdkHKth+/i4AM4AVr3xWkjz9kvBSCs5tsrR2mfme2YBEil2LJJUJoDgGxRg/Jz5 +I7uKjGStQ4Qu7KH+xxIA8QKCAQEA9xhNbeSgGAujcknLaTqS+bU+a14wAkCoTPQD +r9vzAmBoh9YJSdrm2+ld/sAbsxb2fmMWqeeHJN8QfuEM3bNUAOHrqHrZC844gNrL +Pk23YvSgGmGvtFIFP+UeM+mrip1LcMGTv1KcxJoHZ/GILJQU2Fyk4+v92MuBxkwi +HXNNpiAtorcidRCdB6KOkwmzcXObvoEK1czdQRs8FukSM6oP2lixJlGsFx0jWn9x +cd/H7dzuhqK8dFYlY8aOIfXQKG5AXYhX66SKo2VZfrP/xFYlElr/8eILIEvBuSYh +AIEJwNwDY/j5VnhrzrjMKI+WoOblaOlBkN93aH+onoSm/+DxDQKCAQEA1k8rnKkJ +kNnvQdeldvG2NhxWwEYLLzIv21ssW2XgIBzWEmyLacg/UrbT8Fc5a8dgdph4nv5m +Ibnf/SZXrOFrpJA4YYpkdfO9umiQl2vAU6vCr2+KCzUNagwtKhxvK6F+0l769fP7 +/tL8TUmY49hI/Ue8s8w4W9RKV+AmcuW98UGUIpC6eb0j6bTPOHz7b1Jxfe0rFwuU +AeaYeG3/X8Bvz58xd1j4FeQEklJQuaIUFEhRP6PkGQjXuPGBg47HfXFqbdPFGZLD +fpz5h7BvRTbFaSXHwDBiJ0iIL5rE1jWS8HY/cL50/qxUlxoSQ4R8fM9pdxtdK7oY +nC0sK29cgI/WlQKCAQAlqWGb3137bEK0V8UWO+RNBTAHY2rD3SEJ4aNyOX8XnKQy +GBCAXkoTuMUn4BYYvOZDK004Bl8V4p38CMdSP1QNcmHd4yOT5hG8qhySWXwbLBf/ +DWafgGTmcUCiPvpzfTgTbp3bancUjDmWwTy1NrjapXxIdR7S3WnhVJdaj8mFCaCL +DYjF+QtGL6O1i6P7JdjWN4r0PW53zvPgthOdJk2WRTBzG720JC/QSl57MdWiTqtY +gBNjVAIM7CWbzYC1uOA8oVxtQT4UW41Bf6P7Q/oQiyg5sO9rM8DKPKKJFiHrcF1f +7oHqiR49evM7N2+JBMhwriTdNQJZPiPwTV264Ik9AoIBAQDI/YdRbddi2oHhpnWw +kBDrvrg9q3Nh2Be6ClAXh/wjIehDbzlxBDUfRgiPJ77aripyD51QwBbZGpJPwV4I +7YEe3YODN1/wn6AY62hwGsZNspDsKBe3WxIxmyngjLpWmSdv9VQ4x5JW81lcwuF5 +Dqelo1n+5lEVDoyKzdZBe+YgFfjwUfwRoKnFzaVqvQyy4wc9quj2vA0bm0Dz8XXI +P5qdhhfGbtJ89VS0Ri8fajqaqxhIL1UFhZ2L/jQRRh8iLvQ5/Jql2Vcvr9j2wSoa +J7wNWTl1rergHM5clzJ0E9qzWrM08eqXztemvvTSDbcS9xNaeXdwQyBBmLwMIG0I +xd3hAoIBAGwm037UTBHY98G5XyLAcMh4UHRAzTC9u4mShnK2CZDQj0u1OMIx6u6C +VijQImAxqRealRCoY7M7VoKtwb4EPQgBq/WzqAzMILqgpFN/a6I6UxW47XLLU7bl +9TIDRftPTcZw8keecdVaHGP/ct6FATh+4cLCqBYXen7KSwprjvbE9RJRXi+ZOUnz +VAXqREQOGgy0iBWp4FeHY7M8RGPL3rrp5sgLCX5FFAgMVauS4oWnlYMuSvkOuk9W +eYSPm6qoP77Km48KgG8y64pEmB/mOQZw7JgB2vwbruK43KR11oxiFKwmUEaJPRrG +TXmq4KesHBzKPnL6PBiA+VaMFkjFWL0= +-----END PRIVATE KEY----- diff --git a/nginx/config/configuration.json b/nginx/config/configuration.json new file mode 100644 index 000000000..5d3e68e7a --- /dev/null +++ b/nginx/config/configuration.json @@ -0,0 +1,44 @@ +{ + "SERVER_HOST": "localhost", + "SERVER_PORT": "80/api", + "SERVER_HTTPS": false, + "SERVER_SOCKET_AVAILABLE": false, + "SERVER_AUTHENTICATION_TYPE": "token", + "ADMIN_CLIENT": + { + "NAME": "", + "EMAIL": "" + }, + "DEBUG": false, + "WORKFLOWBUILDERGUI": + { + "USER_AGENT": "rodan-standard", + "GRID": + { + "DIMENSION": 20, + "LINE_COLOR": "#606060", + "LINE_WIDTH": 0.5 + }, + "ZOOM_MAX": 3.0, + "ZOOM_MIN": 1.0, + "ZOOM_RATE": 0.05, + "ZOOM_INITIAL": 1.7, + "WORKFLOWJOB_WIDTH": 20, + "WORKFLOWJOB_HEIGHT": 22, + "PORT_WIDTH": 8, + "PORT_HEIGHT": 8, + "OUTPUTPORT_COLOR": "#00ff00", + "INPUTPORT_COLOR_SATISFIED": "#00ff00", + "INPUTPORT_COLOR_UNSATISFIED": "#ff0000", + "INPUTPORT_COLOR_CANDIDATE": "#00ff00", + "STROKE_COLOR": "#000000", + "FILL_COLOR": "#ccccff", + "WORKFLOWJOBGROUP_FILL_COLOR": "#8888ff", + "STROKE_WIDTH": 1, + "FONT_SIZE": 10, + "STROKE_COLOR_SELECTED": "#0000ff", + "STROKE_WIDTH_SELECTED": 2, + "CONNECTION_CIRCLE_RADIUS": 4, + "HOVER_TIME": 1000 + } +} diff --git a/nginx/config/error.conf b/nginx/config/error.conf new file mode 100644 index 000000000..790cf8ef4 --- /dev/null +++ b/nginx/config/error.conf @@ -0,0 +1,30 @@ +error_page 400 /400.html; +location ^~ /400.html { + internal; + root /var/www/default; +} +error_page 401 /401.html; +location ^~ /401.html { + internal; + root /var/www/default; +} +error_page 403 /403.html; +location ^~ /403.html { + internal; + root /var/www/default; +} +error_page 404 /404.html; +location ^~ /404.html { + internal; + root /var/www/default; +} +error_page 405 /405.html; +location ^~ /405.html { + internal; + root /var/www/default; +} +error_page 500 501 502 503 504 /5xx.html; +location ^~ /5xx.html { + internal; + root /var/www/default; +} diff --git a/nginx/config/nginx.conf b/nginx/config/nginx.conf new file mode 100644 index 000000000..44c57d182 --- /dev/null +++ b/nginx/config/nginx.conf @@ -0,0 +1,108 @@ +# Run as a unique, less privileged user for security reasons. +user www-data www-data; + +# Sets the worker threads to the number of CPU cores available in the system for best performance. +worker_processes auto; + +# Maximum number of open files per worker process. +worker_rlimit_nofile 8192; + +events { + # Less than worker_rlimit_nofile. + worker_connections 1024; +} + +# Log errors and warnings to this file +#no_tls error_log /var/log/nginx/error.log warn; +#tls error_log /dev/stderr warn; + +# The file storing the process ID of the nginx process +pid /var/run/nginx.pid; + + + +stream { + log_format basic '$proxy_protocol_addr [$time_local] ' + '$protocol ($status) $bytes_sent $bytes_received ' + '$ssl_preread_server_name $upstream_addr' + '$session_time'; + #tls include /etc/nginx/conf.d/ssl.conf; + #tls ssl_session_cache shared:SSLSTREAM:10m; + include /etc/nginx/sites-available/rodan.stream; +} + +http { + # Hide nginx version information. + # [TODO] Build nginx from source. This will let us do two things: + # 1 - Give our webserver a custom name, instead of nginx. + # 2 - Have the absolute latest version, instead of the latest package. + server_tokens off; + + # Default: text/plain + default_type application/octet-stream; + + # Include $http_x_forwarded_for within default format used in log files + log_format main '$proxy_protocol_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + # Log access to this file + access_log /var/log/nginx/access.log main; + + # How long to allow each connection to stay idle. + keepalive_timeout 20s; + + # Speed up file transfers by using sendfile() to copy directly + # between descriptors rather than using read()/write(). + sendfile on; + + # Don't send out partial frames; this increases throughput + # since TCP frames are filled up before being sent out. + tcp_nopush on; + + # Enable gzip + gzip on; + gzip_comp_level 5; # Compression Level + gzip_min_length 256; # Don't zip small files, inefficient. + gzip_proxied any; # Compress for proxy too. + gzip_vary on; # Cache gziped and regular, in case older browers can't gzip. + gzip_types + application/atom+xml + application/javascript + application/json + application/ld+json + application/manifest+json + application/rss+xml + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + application/xhtml+xml + application/xml + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + + # Allow larger files to be served. + client_max_body_size 700m; + + # Enables or disables the use of underscores in client request header fields. + # underscores_in_headers on; + + # Sites and configurations. + include /etc/nginx/mime.types; + # TLS is not needed when it is behind another NGINX router that automatically uses TLS for visitors. + #tls include /etc/nginx/conf.d/ssl.conf; + #tls ssl_session_cache shared:SSL:10m; + #tls include /etc/nginx/conf.d/ssl-http.conf; + include /etc/nginx/sites-available/rodan.conf; +} diff --git a/nginx/config/rodan.conf b/nginx/config/rodan.conf new file mode 100644 index 000000000..de38e4707 --- /dev/null +++ b/nginx/config/rodan.conf @@ -0,0 +1,103 @@ +upstream iip { + server iipsrv:9003; +} + +#tls server { # Redirect all http to SSL +#tls listen 80; +#tls listen [::]:80; # IPv6 +#tls include /etc/nginx/conf.d/error.conf; +#tls location /.well-known/acme-challenge { +#tls root /var/www/letsencrypt; +#tls } +#tls location / { +#tls return 301 https://$host$request_uri; +#tls } +#tls } + +server { # Rodan API + #tls listen 443 ssl proxy_protocol; + #tls listen [::]:443 ssl; # IPv6 + #no_tls listen 80; + #no_tls listen [::]:80; # IPv6 + #tls access_log /dev/stdout main; + #no_tls access_log /var/log/nginx/rodan.access.log main; + include /etc/nginx/conf.d/error.conf; + + location /static/ { # Static files for API + limit_except GET { + deny all; + } + root /rodan; + } + + location /fcgi-bin/iipsrv.fcgi { # iipsrv + fastcgi_pass iip; + limit_except GET { + deny all; + } + proxy_set_header Host $http_host; + fastcgi_param QUERY_STRING $query_string; + fastcgi_param REQUEST_METHOD $request_method; + fastcgi_param CONTENT_TYPE $content_type; + fastcgi_param CONTENT_LENGTH $content_length; + fastcgi_param PATH_INFO $fastcgi_script_name; + } + + location /uploads { # NFS storage + limit_except GET { + deny all; + } + add_header Host $http_host; + add_header 'Access-Control-Allow-Origin' '*'; + proxy_pass_request_headers on; + alias /rodan/data; + } + + location /ws/ { # Redis Reload Caching + proxy_http_version 1.1; + proxy_connect_timeout 10; + proxy_read_timeout 60; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + return 101 http://redis:6379; + } + + location /ht { # Django Health Check + limit_except GET { + deny all; + } + proxy_pass http://rodan-main:8000/ht; + } + + location /api { # Gunicorn Portal + limit_except GET POST HEAD OPTIONS PATCH PUT DELETE { + deny all; + } + proxy_set_header Host $http_host; + proxy_set_header X-Scheme $scheme; + proxy_set_header 'Access-Control-Allow-Origin' '*'; + proxy_set_header 'Access-Control-Allow-Headers' 'Content-Type'; + proxy_pass_request_headers on; + proxy_pass http://rodan-main:8000; + } + + #no_tls location /flower { + #no_tls rewrite ^/flower/(.*)$ /$1 break; + #no_tls proxy_pass http://rodan-main:5555; + #no_tls proxy_set_header Host $host; + #no_tls proxy_redirect off; + #no_tls proxy_http_version 1.1; + #no_tls proxy_set_header Upgrade $http_upgrade; + #no_tls proxy_set_header Connection "upgrade"; + #no_tls } + + location / { + proxy_pass_request_headers on; + include /etc/nginx/conf.d/error.conf; + root /var/www/default/dist; + } + + location /.well-known/acme-challenge { + root /var/www/letsencrypt; + } +} diff --git a/nginx/config/rodan.stream b/nginx/config/rodan.stream new file mode 100644 index 000000000..177e26189 --- /dev/null +++ b/nginx/config/rodan.stream @@ -0,0 +1,8 @@ +server { + #tls listen 5671 ssl; + #tls listen [::]:5671 ssl; + #no_tls listen 5671; + #no_tls listen [::]:5671; + + proxy_pass hpc-rabbitmq:5672; +} diff --git a/nginx/config/rodan_m1.stream b/nginx/config/rodan_m1.stream new file mode 100644 index 000000000..7a34083df --- /dev/null +++ b/nginx/config/rodan_m1.stream @@ -0,0 +1,8 @@ +server { + #tls listen 5671 ssl; + #tls listen [::]:5671 ssl; + #no_tls listen 5671; + #no_tls listen [::]:5671; + + proxy_pass rabbitmq:5672; +} diff --git a/nginx/config/ssl-http.conf b/nginx/config/ssl-http.conf new file mode 100644 index 000000000..c1ed5d324 --- /dev/null +++ b/nginx/config/ssl-http.conf @@ -0,0 +1,10 @@ +# Additional ssl configuration for http/s +ssl_stapling on; +ssl_stapling_verify on; +resolver 1.1.1.1 8.8.8.8 valid=300s; +resolver_timeout 5s; + +add_header Strict-Transport-Security "max-age=63072000; includeSubDomains;"; +add_header X-Frame-Options DENY; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; diff --git a/nginx/config/ssl.conf b/nginx/config/ssl.conf new file mode 100644 index 000000000..e38186543 --- /dev/null +++ b/nginx/config/ssl.conf @@ -0,0 +1,10 @@ +# SSL Configuration (2019-07) +ssl_prefer_server_ciphers on; +ssl_protocols TLSv1.2 TLSv1.3; +ssl_certificate /etc/letsencrypt/live/SERVER_HOST/fullchain.pem; +ssl_certificate_key /etc/letsencrypt/live/SERVER_HOST/privkey.pem; +ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; +ssl_ciphers EECDH+AESGCM:EDH+AESGCM; +ssl_ecdh_curve secp384r1; +ssl_session_timeout 10m; +ssl_session_tickets off; diff --git a/nginx/html/400.html b/nginx/html/400.html new file mode 100644 index 000000000..4fca84490 --- /dev/null +++ b/nginx/html/400.html @@ -0,0 +1,85 @@ + + + + + Error 400 (Bad Request)!!1 + + +

400. That’s an error. +

Your client has issued a malformed or illegal request. That’s all we know. diff --git a/nginx/html/401.html b/nginx/html/401.html new file mode 100644 index 000000000..b87691766 --- /dev/null +++ b/nginx/html/401.html @@ -0,0 +1,85 @@ + + + + + Error 401 (Unauthorized)!!1 + + +

401. That’s an error. +

Your client has issued a malformed or illegal request. That’s all we know. diff --git a/nginx/html/403.html b/nginx/html/403.html new file mode 100644 index 000000000..f7b75a3b9 --- /dev/null +++ b/nginx/html/403.html @@ -0,0 +1,85 @@ + + + + + Error 403 (Forbidden)!!1 + + +

403. That’s an error. +

Your client has issued a malformed or illegal request. That’s all we know. diff --git a/nginx/html/404.html b/nginx/html/404.html new file mode 100644 index 000000000..2f4b3341d --- /dev/null +++ b/nginx/html/404.html @@ -0,0 +1,85 @@ + + + + + Error 404 (Not Found)!!1 + + +

404. That’s an error. +

Your client has issued a malformed or illegal request. There is nothing here. That’s all we know. diff --git a/nginx/html/405.html b/nginx/html/405.html new file mode 100644 index 000000000..8050b4179 --- /dev/null +++ b/nginx/html/405.html @@ -0,0 +1,85 @@ + + + + + Error 405 (Method Not Allowed)!!1 + + +

405. That’s an error. +

Your client has issued a malformed or illegal request. That’s all we know. diff --git a/nginx/html/50x.html b/nginx/html/50x.html new file mode 100644 index 000000000..11690d121 --- /dev/null +++ b/nginx/html/50x.html @@ -0,0 +1,85 @@ + + + + + Error 500 (Something went wrong)!!1 + + +

500. That’s an error. +

Something very strange happened. Please try again later. That’s all we know. diff --git a/nginx/html/logo.png b/nginx/html/logo.png new file mode 100644 index 000000000..b851772d6 Binary files /dev/null and b/nginx/html/logo.png differ diff --git a/nginx/html/logo4.png b/nginx/html/logo4.png new file mode 100644 index 000000000..073b605c0 Binary files /dev/null and b/nginx/html/logo4.png differ diff --git a/nginx/scripts/setup b/nginx/scripts/setup new file mode 100644 index 000000000..3f41a7753 --- /dev/null +++ b/nginx/scripts/setup @@ -0,0 +1,12 @@ +#!/bin/sh +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +#chmod 700 /etc/nginx/keys +#chmod -R 600 /etc/nginx/keys/* +#chown -R root /etc/nginx/keys + +chown -R www-data:www-data /var/www/default +find /var/www/default -type d | xargs chmod 755 +find /var/www/default -type f | xargs chmod 644 diff --git a/nginx/scripts/ssl b/nginx/scripts/ssl new file mode 100755 index 000000000..d3662cf5a --- /dev/null +++ b/nginx/scripts/ssl @@ -0,0 +1,19 @@ +#!/bin/sh +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +echo "Creating local ssl certificates." + +# 2048 is ok for Local. Production should be 4096 +openssl dhparam -out ./nginx/certs/dhparam.pem 2048 + +openssl req -x509 \ + -newkey rsa:4096 \ + -out ./nginx/certs/cert.pem \ + -keyout ./nginx/certs/key.pem \ + -days 3650 \ + -nodes \ + -subj '/C=CA/ST=Quebec/L=Montreal/O=McGillUniversity/OU=DDMAL/CN=localhost' + +echo "Done." diff --git a/nginx/scripts/start b/nginx/scripts/start new file mode 100644 index 000000000..66119c95c --- /dev/null +++ b/nginx/scripts/start @@ -0,0 +1,12 @@ +#!/bin/sh +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +/run/setup +sed -i "s/#no_tls //g" /etc/nginx/nginx.conf \ + /etc/nginx/sites-available/rodan.conf \ + /etc/nginx/sites-available/rodan.stream + +nginx +tail -f /var/log/nginx/access.log & tail -f /var/log/nginx/error.log diff --git a/nginx/scripts/start-production b/nginx/scripts/start-production new file mode 100644 index 000000000..a9552b3d0 --- /dev/null +++ b/nginx/scripts/start-production @@ -0,0 +1,22 @@ +#!/bin/sh +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +/run/setup +sed -i "s/localhost/${SERVER_HOST}/g" /var/www/default/dist/configuration.json +sed -i "s/SERVER_HOST/${SERVER_HOST}/g" /etc/nginx/conf.d/ssl.conf + +if [ $TLS -eq 1 ]; then + if [ ! -f /etc/letsencrypt/ssl-dhparams.pem ]; then + openssl dhparam -out /etc/letsencrypt/ssl-dhparams.pem 4096 + fi + sed -i "s/#tls //g" /etc/nginx/nginx.conf \ + /etc/nginx/sites-available/rodan.conf \ + /etc/nginx/sites-available/rodan.stream + sed -i 's/"SERVER_PORT": "80/"SERVER_PORT": "443/g' /var/www/default/dist/configuration.json + sed -i 's/"SERVER_HTTPS": false,/"SERVER_HTTPS": true,/g' /var/www/default/dist/configuration.json + nginx +fi + +tail -f /dev/null \ No newline at end of file diff --git a/postgres/Dockerfile b/postgres/Dockerfile new file mode 100644 index 000000000..62e0edb88 --- /dev/null +++ b/postgres/Dockerfile @@ -0,0 +1,26 @@ +# FROM postgres:latest +FROM postgres:9.6 +EXPOSE 5432 + +RUN apt-get update \ + # && apt-get install -y postgresql-plpython-${PG_MAJOR} python-pip \ + && apt-get install -y postgresql-plpython-9.6 python-pip \ + && rm -rf /var/lib/apt/lists/* + +# Installing the postgresql-plpython overrides the postgresql.conf.sample file generated by the postgres Dockerfile, +# which then causes the postgres.conf to not have the listen_addresses='*' setting, which is required in order to +# connect to the database from another machine. Overcome this by removing the postgresql.conf.sample created by +# postgresql-plpython and re-linking the Dockerfile's postgresql.conf.sample. +RUN rm /usr/share/postgresql/${PG_MAJOR}/postgresql.conf.sample \ + && ln -sv /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/$PG_MAJOR/ + +RUN pip install redis + +COPY ./postgres/maintenance /usr/local/bin/maintenance +RUN chmod +x /usr/local/bin/maintenance/* +RUN mv /usr/local/bin/maintenance/* /usr/local/bin \ + && rmdir /usr/local/bin/maintenance \ + && mkdir /backups + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["postgres"] diff --git a/postgres/maintenance/_functions/constants.sh b/postgres/maintenance/_functions/constants.sh new file mode 100755 index 000000000..6ca4f0ca9 --- /dev/null +++ b/postgres/maintenance/_functions/constants.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + + +BACKUP_DIR_PATH='/backups' +BACKUP_FILE_PREFIX='backup' diff --git a/postgres/maintenance/_functions/countdown.sh b/postgres/maintenance/_functions/countdown.sh new file mode 100755 index 000000000..e6cbfb6ff --- /dev/null +++ b/postgres/maintenance/_functions/countdown.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + + +countdown() { + declare desc="A simple countdown. Source: https://superuser.com/a/611582" + local seconds="${1}" + local d=$(($(date +%s) + "${seconds}")) + while [ "$d" -ge `date +%s` ]; do + echo -ne "$(date -u --date @$(($d - `date +%s`)) +%H:%M:%S)\r"; + sleep 0.1 + done +} diff --git a/postgres/maintenance/_functions/messages.sh b/postgres/maintenance/_functions/messages.sh new file mode 100755 index 000000000..f6be756e9 --- /dev/null +++ b/postgres/maintenance/_functions/messages.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + + +message_newline() { + echo +} + +message_debug() +{ + echo -e "DEBUG: ${@}" +} + +message_welcome() +{ + echo -e "\e[1m${@}\e[0m" +} + +message_warning() +{ + echo -e "\e[33mWARNING\e[0m: ${@}" +} + +message_error() +{ + echo -e "\e[31mERROR\e[0m: ${@}" +} + +message_info() +{ + echo -e "\e[37mINFO\e[0m: ${@}" +} + +message_suggestion() +{ + echo -e "\e[33mSUGGESTION\e[0m: ${@}" +} + +message_success() +{ + echo -e "\e[32mSUCCESS\e[0m: ${@}" +} diff --git a/postgres/maintenance/_functions/yes_no.sh b/postgres/maintenance/_functions/yes_no.sh new file mode 100755 index 000000000..fd9cae161 --- /dev/null +++ b/postgres/maintenance/_functions/yes_no.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + + +yes_no() { + declare desc="Prompt for confirmation. \$\"\{1\}\": confirmation message." + local arg1="${1}" + + local response= + read -r -p "${arg1} (y/[n])? " response + if [[ "${response}" =~ ^[Yy]$ ]] + then + exit 0 + else + exit 1 + fi +} diff --git a/postgres/maintenance/backup b/postgres/maintenance/backup new file mode 100644 index 000000000..c8b8e4249 --- /dev/null +++ b/postgres/maintenance/backup @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +## Create a database backup. +## +## Usage: +## $ docker-compose exec postgres backup + + +working_dir="$(dirname ${0})" +source "${working_dir}/_functions/constants.sh" +source "${working_dir}/_functions/messages.sh" + + +message_welcome "Backing up the '${POSTGRES_DB}' database..." + + +if [[ "${POSTGRES_USER}" == "postgres" ]]; then + message_error "Backing up as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again." + exit 1 +fi + +export PGHOST="${POSTGRES_HOST}" +export PGPORT="${POSTGRES_PORT}" +export PGUSER="${POSTGRES_USER}" +export PGPASSWORD="${POSTGRES_PASSWORD}" +export PGDATABASE="${POSTGRES_DB}" + +backup_filename="${BACKUP_FILE_PREFIX}_$(date +'%Y_%m_%dT%H_%M_%S').sql.gz" +pg_dump | gzip > "${BACKUP_DIR_PATH}/${backup_filename}" + + +message_success "'${POSTGRES_DB}' database backup '${backup_filename}' has been created and placed in '${BACKUP_DIR_PATH}'." diff --git a/postgres/maintenance/backups b/postgres/maintenance/backups new file mode 100644 index 000000000..7e7eedab9 --- /dev/null +++ b/postgres/maintenance/backups @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +## View backups. +## +## Usage: +## $ docker-compose exec postgres backups + + +working_dir="$(dirname ${0})" +source "${working_dir}/_functions/constants.sh" +source "${working_dir}/_functions/messages.sh" + + +message_welcome "These are the backups you have got:" + +ls -lht "${BACKUP_DIR_PATH}" diff --git a/postgres/maintenance/clean b/postgres/maintenance/clean new file mode 100644 index 000000000..5e3b6a598 --- /dev/null +++ b/postgres/maintenance/clean @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -o xtrace # Print commands and their arguments as they are executed. + +## View remove older backups. +## +## Usage: +## $ docker-compose exec postgres clean + +working_dir="$(dirname ${0})" +source "${working_dir}/_functions/constants.sh" +source "${working_dir}/_functions/messages.sh" + + +message_welcome "Removing all backups older than 30 days, but ensuring there are at least 10 files in the backup folder." + + +shopt -s nullglob # causes unmatched globs to return empty instead of the glob itself +files=(*) # put all files in the current directory into an array +if (( "${#files[@]}" >= 10 )); then + find /backups/back* -mtime +30 -delete +fi +shopt -u nullglob # disable null glob diff --git a/postgres/maintenance/restore b/postgres/maintenance/restore new file mode 100644 index 000000000..b4997b57a --- /dev/null +++ b/postgres/maintenance/restore @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +## Restore database from a backup. +## +## Parameters: +## <1> filename of an existing backup. (Optional) +## +## Usage: +## $ docker-compose exec postgres restore +## $ docker-compose exec postgres restore <1> + + +working_dir="$(dirname ${0})" +source "${working_dir}/_functions/constants.sh" +source "${working_dir}/_functions/messages.sh" + + +if [[ -z ${1+x} ]]; then + + shopt -s nullglob + files=(*) + if (( "${#files[@]}" >= 5 )); then + # When restore is called without arguments, search for the latest backup and re-execute itself. + latest=$(find $BACKUP_DIR_PATH -type f -printf "%T@ %p\n" 2>/dev/null | sort -n | cut -d' ' -f 2- | tail -n 1) + most_recent_backup=".${latest:${#BACKUP_DIR_PATH}:${#latest}}" + $0 $most_recent_backup + else + message_error "Not enough backups in the folder to automatically restore from the latest backup." + exit 1 + fi + shopt -u nullglob + exit 0 +fi + +backup_filename="${BACKUP_DIR_PATH}/${1}" +if [[ ! -f "${backup_filename}" ]]; then + message_error "No backup with the specified filename found. Check out the 'backups' maintenance script output to see if there is one and try again." + exit 1 +fi + +message_welcome "Restoring the '${POSTGRES_DB}' database from the '${backup_filename}' backup..." + +if [[ "${POSTGRES_USER}" == "postgres" ]]; then + message_error "Restoring as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again." + exit 1 +fi + +export PGHOST="${POSTGRES_HOST}" +export PGPORT="${POSTGRES_PORT}" +export PGUSER="${POSTGRES_USER}" +export PGPASSWORD="${POSTGRES_PASSWORD}" +export PGDATABASE="${POSTGRES_DB}" + +message_info "Dropping the database..." +dropdb "${PGDATABASE}" + +message_info "Creating a new database..." +createdb --owner="${POSTGRES_USER}" + +message_info "Applying the backup to the new database..." +gunzip -c "${backup_filename}" | psql "${POSTGRES_DB}" + +message_success "The '${POSTGRES_DB}' database has been restored from the '${backup_filename}' backup." diff --git a/production.yml b/production.yml new file mode 100644 index 000000000..6e9f973ea --- /dev/null +++ b/production.yml @@ -0,0 +1,307 @@ +version: "3.4" + +services: + + nginx: + image: "ddmal/nginx:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "0.5" + memory: 1G + limits: + cpus: "0.5" + memory: 1G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "/usr/sbin/service", "nginx", "status"] + interval: "30s" + timeout: "10s" + retries: 10 + start_period: "5m" + command: /run/start-production + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + TLS: 1 + ports: + - "80:80" + - "443:443" + - "5671:5671" + - "9002:9002" + volumes: + - "resources:/rodan/data" + - "certbot:/etc/letsencrypt" + + rodan-main: + image: "ddmal/rodan-main:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD-SHELL", "/usr/bin/curl -H 'User-Agent: docker-healthcheck' http://localhost:8000/api/?format=json || exit 1"] + interval: "10s" + timeout: "5s" + retries: 2 + start_period: "2m" + command: /run/start + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + CELERY_JOB_QUEUE: None + env_file: + - ./scripts/production.env + volumes: + - "resources:/rodan/data" + + iipsrv: + image: "ddmal/iipsrv:nightly" + volumes: + - "resources:/rodan/data" + + celery: + image: "ddmal/rodan-main:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@celery"] + interval: "30s" + timeout: "10s" + start_period: "1m" + retries: 3 + command: /run/start-celery + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + CELERY_JOB_QUEUE: celery + env_file: + - ./scripts/production.env + volumes: + - "resources:/rodan/data" + + py2-celery: + image: "ddmal/rodan-python2-celery:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@Python2"] + interval: "30s" + timeout: "10s" + retries: 3 + command: /run/start-celery + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + CELERY_JOB_QUEUE: Python2 + env_file: + - ./scripts/production.env + volumes: + - "resources:/rodan/data" + + py3-celery: + image: "ddmal/rodan-python3-celery:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@Python3"] + interval: "30s" + timeout: "10s" + retries: 3 + command: /run/start-celery + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + CELERY_JOB_QUEUE: Python3 + env_file: + - ./scripts/production.env + - ./hpc-rabbitmq/scripts/production.env + volumes: + - "resources:/rodan/data" + + gpu-celery: + image: "ddmal/rodan-gpu-celery:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "6" + memory: 45G + limits: + cpus: "6" + memory: 45G + restart_policy: + condition: any + delay: 5s + window: 30s + placement: + constraints: + - node.labels.queue == GPU + healthcheck: + test: ["CMD", "celery", "inspect", "ping", "-A", "rodan", "--workdir", "/code/Rodan", "-d", "celery@GPU"] + interval: "30s" + timeout: "10s" + retries: 3 + command: /run/start-celery + environment: + TZ: America/Toronto + SERVER_HOST: rodan2.simssa.ca + CELERY_JOB_QUEUE: GPU + env_file: + - ./scripts/production.env + volumes: + - "resources:/rodan/data" + + redis: + image: "redis:alpine" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + environment: + TZ: America/Toronto + + postgres: + image: "ddmal/postgres-plpython:v2.0.0" + deploy: + replicas: 1 + endpoint_mode: dnsrr + resources: + reservations: + cpus: "4" + memory: 10G + limits: + cpus: "4" + memory: 10G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD-SHELL", "pg_isready", "-U", "postgres"] + interval: 10s + timeout: 5s + retries: 5 + environment: + TZ: America/Toronto + volumes: + - "pg_data:/var/lib/postgresql/data" + - "pg_backup:/backups" + env_file: + - ./scripts/production.env + + rabbitmq: + image: "rabbitmq:alpine" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: "30s" + timeout: "3s" + retries: 3 + environment: + TZ: America/Toronto + env_file: + - ./scripts/production.env + + hpc-rabbitmq: + image: "ddmal/hpc-rabbitmq:v2.0.0" + deploy: + replicas: 1 + resources: + reservations: + cpus: "1" + memory: 2G + limits: + cpus: "1" + memory: 2G + restart_policy: + condition: any + delay: 5s + window: 30s + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] + interval: "30s" + timeout: "3s" + retries: 3 + environment: + TZ: America/Toronto + env_file: + - ./hpc-rabbitmq/scripts/production.env + +volumes: + resources: + pg_backup: + pg_data: + certbot: diff --git a/python2-celery/Dockerfile b/python2-celery/Dockerfile new file mode 100644 index 000000000..257e5ae95 --- /dev/null +++ b/python2-celery/Dockerfile @@ -0,0 +1,133 @@ +FROM debian:buster +ARG BRANCHES +ARG VERSION + +# Sometimes install_rodan_jobs will return `ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.` +# For this reason, we extend the timeout of pip. +ENV PIP_DEFAULT_TIMEOUT=100 + +# Update repository list. +# Install required packages for debian. +# [TODO] Recheck this list, organized it from memory. There could even be packages that are not necessary. +RUN set -e \ + # Project Dependencies + && apt-get update \ + && apt-get -qq install -y \ + git \ + python \ + python-pip \ + python-dev \ + python-docutils \ + libpython-dev \ + cmake \ + g++ \ + apt-utils \ + unzip \ + # Gamera Dependencies + autoconf \ + graphicsmagick \ + libtiff5-dev \ + libpng-dev \ + python-pygments \ + python-wxgtk3.0 \ + python-wxversion \ + lib32ncurses5-dev \ + # Libmei + libboost-python-dev \ + libboost-thread-dev \ + libjpeg-dev \ + uuid-dev \ + libpq-dev \ + openjdk-11-jdk \ + # Silent the output + >/dev/null \ + # Needed for pixel_wrapper (node_js) + && apt-get -qq install -y apt-transport-https curl gnupg >/dev/null \ + && curl -sL https://deb.nodesource.com/setup_10.x | bash - \ + && apt-get -qq update \ + && apt-get -qq install -y nodejs >/dev/null \ + # Needed for Neon2-wrapper (yarn) - [TODO] - Test pixel with yarn also. + && apt-get -qq remove cmdtest \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt-get -qq update && apt-get -qq install yarn -y >/dev/null \ + # Needed for Ocropy (Text-Alignment) + && apt -qq install -y \ + wget \ + python-scipy \ + python-matplotlib \ + python-lxml \ + >/dev/null \ + # [TODO] Check these + && apt-get -qq install -y \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + lib32z1-dev \ + libxml2-utils \ + libvips42 \ + libvips-tools \ + libtool \ + subversion \ + pkg-config \ + >/dev/null + +# Clean out repository list. +RUN rm -rf /var/lib/apt/lists/* + +# Install Gamera. This takes a very long time to build. Do not move it! +# RUN pip install git+https://github.com/hsnr-gamera/gamera.git --global-option="--nowx" +# pip broke again: https://github.com/pypa/pip/issues/6560 +# Let's not rely on pip to install this again. + +RUN set -e \ + && mkdir -p /rodan/data /code/jobs \ + && chown -R www-data /rodan \ + && git clone https://github.com/hsnr-gamera/gamera.git /code/gamera \ + # Without this gamera's setup can't find the version file. + && cd /code/gamera \ + # && git reset --hard c77194d5e839204efc617971233967ba5a6c53bc \ + && git reset --hard d8e4255a5e2d6d6e64528c8758d75f0afacf4d72 \ + && python setup.py install --nowx >/dev/null 2>&1 + +# Install framework dependencies for Rodan Jobs. +COPY ./scripts/install_rodan_job_dependencies /run/ +COPY ./scripts/install_python2_rodan_jobs /run/ +COPY ./scripts/install_rodan /run/ +COPY ./scripts/wait-for-app /run/ +COPY ./scripts/entrypoint /opt/ +COPY ./scripts/start-celery /run/ + +# Copying rodan core from build context into container +# Rodan folder MUST be uppercase, otherwise many unittests fail. +COPY ./rodan-main/code /code/Rodan + + +RUN set -x \ + && chmod +x /run/install_rodan_job_dependencies \ + && chown www-data /run/install_rodan_job_dependencies \ + && /run/install_rodan_job_dependencies \ + # Install Rodan Jobs + && chmod +x /run/install_python2_rodan_jobs \ + && chown www-data /run/install_python2_rodan_jobs \ + && /run/install_python2_rodan_jobs \ + # Install Rodan + && chmod +x /run/install_rodan \ + && chown www-data /run/install_rodan \ + && pip install -U setuptools==44.0.0 \ + && sed -i "s/-e git+https:\/\/github.com\/deepio\/pybagit.git@4eea813148bc590896000f57cde35fb86443d2f4#egg=pybagit ; python_version >= '3.6'//" /code/Rodan/requirements.txt \ + && /run/install_rodan \ + # Script to wait for postgres and redis to be running before attempting to connect to them. + && chmod +x /run/wait-for-app \ + && chown www-data /run/wait-for-app \ + # Runs on both Rodan service, and Rodan-Celery + && sed -i 's/\r//' /opt/entrypoint \ + && chmod +x /opt/entrypoint \ + && chown www-data /opt/entrypoint \ + # This script starts Rodan-Celery + && sed -i 's/\r//' /run/start-celery \ + && chmod +x /run/start-celery \ + && chown www-data /run/start-celery \ + && chown -R www-data /code/Rodan /code/jobs + +ENTRYPOINT ["/opt/entrypoint"] diff --git a/python2-celery/config/promtail.yaml b/python2-celery/config/promtail.yaml new file mode 100644 index 000000000..6fd7300ed --- /dev/null +++ b/python2-celery/config/promtail.yaml @@ -0,0 +1,19 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://192.168.17.170:3100/loki/api/v1/push + +scrape_configs: +- job_name: rodan_celery + static_configs: + - targets: + - localhost + labels: + job: varlogs + host: SERVER_HOST + __path__: /code/Rodan/*.log \ No newline at end of file diff --git a/python3-celery/Dockerfile b/python3-celery/Dockerfile new file mode 100644 index 000000000..3b64aa04c --- /dev/null +++ b/python3-celery/Dockerfile @@ -0,0 +1,63 @@ +FROM debian:buster +ARG BRANCHES +ARG VERSION + +RUN set -e \ + && apt-get -qq update \ + && apt-get install ffmpeg libsm6 libxext6 -y \ + && apt-get -qq install -y \ + git \ + python3 \ + python3-pip \ + # Opencv Dependency + python3-opencv \ + # Python lxml dependencies + python3-dev \ + libxml2-dev \ + libxslt1-dev \ + zlib1g-dev \ + lib32ncurses5-dev \ + # Psycopg2 dependencies + libpq-dev \ + # >/dev/null + # Remove when done + vim + +RUN rm -rf /var/lib/apt/lists/* + +COPY ./scripts/install_python3_rodan_jobs /run/ +COPY ./scripts/install_rodan /run/ +COPY ./scripts/start-celery /run/ +COPY ./scripts/wait-for-app /run/ + +# Copying rodan core from build context into container +# Rodan folder MUST be uppercase, otherwise many unittests fail. +COPY ./rodan-main/code /code/Rodan + +RUN set -x \ + && mkdir -p /code/jobs \ + # Install Python3 Rodan Jobs + && chmod +x /run/install_python3_rodan_jobs \ + && chown www-data /run/install_python3_rodan_jobs \ + && /run/install_python3_rodan_jobs \ + # Install Rodan + # Django-Guardian suddenly failed to build. + # https://github.com/DDMAL/rodan-docker/issues/60 + && pip3 install -U pip \ + && pip3 install setuptools==57.0.0 \ + && sed -i "s/pip /pip3 /g" /run/install_rodan \ + && sed -i "s/lxml/#lxml/g" /code/Rodan/requirements.txt \ + # && sed -i "s/pybagit==1.5.0/-e git:\/\/github.com\/deepio\/pybagit.git@a27c9e0fc3bdf99dab8bd327f3ce9ea884abd6b4#egg=pybagit/g" /code/Rodan/requirements.txt \ + && chmod +x /run/install_rodan \ + && chown www-data /run/install_rodan \ + && /run/install_rodan \ + # Add Celery script + && chmod +x /run/start-celery \ + && chown www-data /run/start-celery \ + # Change the concurency for python3 jobs (Calvo) + && sed -i "s/=10/=1/g" /run/start-celery \ + # Script to wait for postgres and redis to be running before attempting to connect to them. + && chmod +x /run/wait-for-app \ + && chown www-data /run/wait-for-app \ + && chown -R www-data /code/Rodan /code/jobs \ + && pip3 install opencv-python==4.5.5.64 diff --git a/python3-celery/config/promtail.yaml b/python3-celery/config/promtail.yaml new file mode 100644 index 000000000..6fd7300ed --- /dev/null +++ b/python3-celery/config/promtail.yaml @@ -0,0 +1,19 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://192.168.17.170:3100/loki/api/v1/push + +scrape_configs: +- job_name: rodan_celery + static_configs: + - targets: + - localhost + labels: + job: varlogs + host: SERVER_HOST + __path__: /code/Rodan/*.log \ No newline at end of file diff --git a/readme.md b/readme.md index 8596e91cd..8b184c2e5 100644 --- a/readme.md +++ b/readme.md @@ -1 +1,56 @@ -Please visit http://ddmal.github.io/Rodan/ +# Rodan + +- Rodan ![GitHub release](https://img.shields.io/github/release/ddmal/rodan) ![GitHub pull requests](https://img.shields.io/github/issues-pr/ddmal/rodan) ![GitHub issues](https://img.shields.io/github/issues/ddmal/rodan) + - Master Branch ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/ddmal/rodan/master) + - Develop Branch ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/ddmal/rodan/develop) + +This repository contains Docker images that can be used to set up [Rodan](https://github.com/DDMAL/rodan) locally for development. These images can also be used in the future with slight modifications for deployment to a swarm production environment. Please see the wiki for more information about deploying Rodan. [Rodan-Docker Wiki](https://github.com/DDMAL/rodan-docker/wiki) + +#### Objectives + +- Simplify the installation process of Rodan on all platforms. +- Maintain clear installation documentation. + +## Quick Start + +If you are working on **Rodan** or **Rodan Jobs** + +- Make sure you have Rodan submodule cloned in `${repository_root}/rodan/code` and **it is up to date** with the branch you wish to work with. The branches should be either `develop`, or the **name of the feature** you would like to include into develop. The `master` branch is only for version releases and is supposed to be a guaranteed working version. +- Follow the instructions here: https://github.com/DDMAL/rodan-docker/wiki/Working-on-Rodan + - If working on jobs, you will need to install the jobs individually on your machine inside the docker environment. All dependencies for each job should already be installed. You can follow the same shell script used to install the jobs individually in the container here: `${repository_root}/scripts/install_rodan_jobs` and `${repository_root}/scripts/install_python3_rodan_jobs`. + - Note the `BRANCHES` environment variable in the installation scripts, you can set the environment variable locally by running the following command: `export BRANCHES="develop"`. + +If you are working on **Rodan-Client** + +- Make sure you have Rodan-Client cloned in `${repository_root}/rodan-client/code` and it is up to date with the branch you wish to work with. +- Follow the instructions here: https://github.com/DDMAL/rodan-docker/wiki/Working-on-Rodan-Client + +## Tips for Interacting with Running Containers + +The following commands may seem familiar to you if you have worked with Posix systems, or bash shells in general. Many of the commands that exist for docker, by just adding the prefix `docker`. + +- If you would like to see a list of all running containers on your machine, execute: `docker ps` +- To copy files between the container and the host, it is the same way you would use scp between different computers, execute: `docker cp`, +- Other commands like `docker top` are also available to monitor resources outside of the containers. + +A similar concept to using `exec` is using SSH to connect to another computer. We use `exec` to connect to a specific container. It is much simpler to use `docker-compose exec`, instead of the `docker exec`. Docker-compose will search the configuration inside `docker-compose.yml` to know which service is being referenced. The format of the command works this way: + +- `docker-compose exec ` +- The command could be anything eg: `/opt/some_directory/my_shell_script.sh` +- A command you will use frequently is: `docker-compose exec rodan bash` or `docker-compose exec celery bash` for investigating problems. **You should not be using this command to edit files, use `docker volumes` and your IDE outside of the container.** + +Consult the documentation of the [Docker command line](https://docs.docker.com/engine/reference/commandline/cli/) for additional information. + +## Automated Build + +The images are rebuilt and pushed automatically on a nightly basis at 2am. This accomplished with a cron job. You must point the cron job to the nightly script on one of the staging virtual machines. Any account will do and no authentication required, add this line to the crontab. Docker hub will send a Slack notification if the image has built. We should expect 5 new images daily, or more if there was a new tagged release of any of them. + +```shell +0 2 * * 1-5 /srv/webapps/rodan-docker/scripts/nightly +``` + +You may also force Docker Cloud to rebuild new images when new commits are pushed to a Git repository. Unfortunately, we had problems connecting the `rodan-docker` GitHub repository to Docker Cloud due to authentication issues, so we set up a private repository on Bitbucket instead. + +## Additional Information + +For more information about volumes in Docker, see [Use volumes](https://docs.docker.com/engine/admin/volumes/volumes/) in the Docker documentation. See also the docs for the [`volumes` section](https://docs.docker.com/compose/compose-file/#volumes) of the `docker-compose.yml` file. diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 85bb9ce42..000000000 --- a/requirements.txt +++ /dev/null @@ -1,37 +0,0 @@ -backports.ssl-match-hostname==3.4.0.2 -celery==3.1.25 -certifi==14.05.14 -django-cors-headers==3.0.2 -django-decorator-include==1.3 -django-environ==0.4.5 -django-extensions==1.6.7 -django-filter==1.1.0 -django-guardian==1.4.5 -django-health-check==2.4.0 -django-sortedm2m==1.1.1 -django-websocket-redis==0.5.2 -Django==1.11.29 -djoser==1.5.1 -djangorestframework==3.6.4 -flower==0.9.3 -gevent==1.3.6 -gnureadline==6.3.3 -gunicorn==19.10.0 -jsonfield==1.0.0 -jsonschema==2.5.1 -lxml==3.4.0 -Markdown==2.5.1 -mimeparse==0.1.3 -model-mommy==1.6.0 -Pillow==6.2.2 -psycopg2==2.8.4 -pybagit==1.5.0 -pyparsing==2.0.3 -pypng==0.0.18 -python-dateutil==2.5 --e git+https://github.com/ahupp/python-magic.git#egg=0e977c98649b4ed4533a7700fbc5fea6895bfe71 # python-magic==0.4.15 -PyYAML==5.3.1 -readline==6.2.4.1 -redis==2.10.3 -uWSGI==2.0.15 -Werkzeug==1.0.1 diff --git a/rodan-client/.dockerignore b/rodan-client/.dockerignore new file mode 100644 index 000000000..8a11723f7 --- /dev/null +++ b/rodan-client/.dockerignore @@ -0,0 +1,15 @@ +**/.gitignore +**/.DS_Store + +code/__develop__ +code/configuration.json +code/npm-debug.log +code/node_modules +code/dist +code/web +code/bundle +code/tmp +code/website/_site +code/configuration.json +code/src/js/.plugins.js +code/src/js/Plugins.js diff --git a/rodan-client/Dockerfile b/rodan-client/Dockerfile new file mode 100644 index 000000000..d5a42d369 --- /dev/null +++ b/rodan-client/Dockerfile @@ -0,0 +1,42 @@ +FROM debian +EXPOSE 9002 + +# Install OS packages. +RUN apt-get -qq update \ + && apt-get -qq install -y \ + git \ + gnupg2 \ + libgif-dev \ + curl \ + build-essential \ + # Add npm + # && curl -sL https://deb.nodesource.com/setup_12.x | bash - \ + # && apt-get install -yq \ + # nodejs + # Add yarn + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ + && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ + && apt -qq update \ + && apt -qq install -y \ + yarn + +RUN rm -rf /var/lib/apt/lists/* + +# Install node project. +COPY code/ /code/ +RUN set -x \ + && cd /code \ + # && npm install + && yarn install + +# On some machines, the webpack dev server on the container won't accept connections from the host on localhost. +# Make the development server listen on 0.0.0.0 instead to accept connections from all addresses. +ENV RODAN_CLIENT_DEVELOP_HOST 0.0.0.0 +WORKDIR /code/node_modules/.bin + +COPY ./config/configuration.json /code/configuration.json + +# Template start script, in case the startup gets longer. +COPY ./scripts/start /run/ +RUN sed -i 's/\r//' /run/start +RUN chmod +x /run/start diff --git a/rodan-client/code/.gitignore b/rodan-client/code/.gitignore new file mode 100755 index 000000000..e9b6d4707 --- /dev/null +++ b/rodan-client/code/.gitignore @@ -0,0 +1,14 @@ +._.DS_Store +.DS_Store +npm-debug.log +node_modules/ +dist/ +web +bundle +tmp +website/_site +configuration.json +._* + +__* +src/js/.plugins.js diff --git a/rodan-client/code/LICENSE b/rodan-client/code/LICENSE new file mode 100644 index 000000000..e1f62ef0a --- /dev/null +++ b/rodan-client/code/LICENSE @@ -0,0 +1,29 @@ +MIT License + +Copyright (c) 2015-2017 Ryan Bannon, + 2015 Reiner Krämer, + 2016 Andrew Fogarty, + 2017-2020 Alex Daigle, + 2017 Matan Gover, + 2018 Eric Liu, + 2018 Gabriel Vigliensoni, + 2019-2020 Ling-Xiao Yang, + 2020 Juliette Regimbal + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-client/code/README.md b/rodan-client/code/README.md new file mode 100755 index 000000000..1e42a618d --- /dev/null +++ b/rodan-client/code/README.md @@ -0,0 +1,22 @@ +# __rodan-client__ + +Rodan-Client is a GUI that allows you to interact with Rodan jobs and workflows. + +**UPDATE:** You should not need to install rodan-client this way anymore. `Rodan-Docker` does everything for us. + +## Prerequisites +Install `Homebrew`, `Yarn`, `Gulp` and `git` if you have not already. You should install both `yarn` and `gulp` globally. +``` +/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" +brew install yarn +yarn global add gulp +``` + +## Installation +- Clone project `git clone https://github.com/DDMAL/rodan-client` +- Change to the project directory and run `yarn install` +- Copy the `configuration.example.json` file, and rename it to `configuration.json` +- Edit the `SERVER_HOST` and `SERVER_PORT` accordingly + - If you're using docker in local development, use `localhost` for the server, and port `8000`. You will also need to set `SERVER_HTTPS` to false unless you setup local SSL certificates. +- From the root project directory, travel to `./node_modules/.bin/`. +- Run `gulp` diff --git a/rodan-client/code/configuration.example.json b/rodan-client/code/configuration.example.json new file mode 100755 index 000000000..4e4e19f19 --- /dev/null +++ b/rodan-client/code/configuration.example.json @@ -0,0 +1,44 @@ +{ + "SERVER_HOST": "localhost", + "SERVER_PORT": 8000, + "SERVER_HTTPS": false, + "SERVER_SOCKET_AVAILABLE": true, + "SERVER_AUTHENTICATION_TYPE": "token", + "ADMIN_CLIENT": + { + "NAME": "", + "EMAIL": "" + }, + "DEBUG": false, + "WORKFLOWBUILDERGUI": + { + "USER_AGENT": "rodan-standard", + "GRID": + { + "DIMENSION": 20, + "LINE_COLOR": "#606060", + "LINE_WIDTH": 0.5 + }, + "ZOOM_MAX": 3.0, + "ZOOM_MIN": 1.0, + "ZOOM_RATE": 0.05, + "ZOOM_INITIAL": 1.7, + "WORKFLOWJOB_WIDTH": 20, + "WORKFLOWJOB_HEIGHT": 22, + "PORT_WIDTH": 8, + "PORT_HEIGHT": 8, + "OUTPUTPORT_COLOR": "#00ff00", + "INPUTPORT_COLOR_SATISFIED": "#00ff00", + "INPUTPORT_COLOR_UNSATISFIED": "#ff0000", + "INPUTPORT_COLOR_CANDIDATE": "#00ff00", + "STROKE_COLOR": "#000000", + "FILL_COLOR": "#ccccff", + "WORKFLOWJOBGROUP_FILL_COLOR": "#8888ff", + "STROKE_WIDTH": 1, + "FONT_SIZE": 10, + "STROKE_COLOR_SELECTED": "#0000ff", + "STROKE_WIDTH_SELECTED": 2, + "CONNECTION_CIRCLE_RADIUS": 4, + "HOVER_TIME": 1000 + } +} diff --git a/rodan-client/code/gulpfile.js b/rodan-client/code/gulpfile.js new file mode 100644 index 000000000..b0da6f351 --- /dev/null +++ b/rodan-client/code/gulpfile.js @@ -0,0 +1,399 @@ +'use strict'; + +//////////////////////////////////////////////////////////////////////////////// +// REQUIRE +//////////////////////////////////////////////////////////////////////////////// +const async = require('async'); +const del = require('del'); +const fs = require('fs'); +const gulp = require('gulp'); +const ip = require('ip'); +const path = require('path'); +const recread = require('recursive-readdir'); +const sass = require('gulp-sass'); +const vfs = require('vinyl-fs'); +const webpack = require('webpack'); +const WebpackDevServer = require("webpack-dev-server"); + +//////////////////////////////////////////////////////////////////////////////// +// CONFIGURATION - Develop +//////////////////////////////////////////////////////////////////////////////// +const DEVELOP_HOST = process.env.RODAN_CLIENT_DEVELOP_HOST || "localhost"; +const DEVELOP_PORT = 9002; +const DEVELOP_SOURCEMAP = 'eval-source-map'; +const DEVELOP_WEBROOT = '__develop__'; + +//////////////////////////////////////////////////////////////////////////////// +// CONFIGURATION - Dist +//////////////////////////////////////////////////////////////////////////////// +const DIST_SOURCEMAP = 'source-map'; +const DIST_WEBROOT = 'dist'; + +//////////////////////////////////////////////////////////////////////////////// +// NOTE: don't edit this unless you know what you're doing. +//////////////////////////////////////////////////////////////////////////////// +const CONFIGURATION_FILE = 'configuration.json'; +const CONFIGURATION_EXAMPLE_FILE = 'configuration.example.json'; +const ENTRY_FILE = './src/js/main.js'; +const INFO_FILE = 'info.json'; +const NODE_MODULES_DIRECTORY = '/node_modules'; +const OUTPUT_FILE = 'rodan_client.min.js'; +const PACKAGE_FILE = 'package.json'; +const PLUGINS_INCLUSION_FILE = '/plugins.json'; +const PLUGINS_FILE = '.plugins.js'; +const RESOURCES_DIRECTORY = 'resources'; +const SOURCE_DIRECTORY = 'src/js'; +const TEMPLATE_DIRECTORY = 'templates'; + +//////////////////////////////////////////////////////////////////////////////// +// WEBPACK +//////////////////////////////////////////////////////////////////////////////// +var webpackConfig = +{ + entry: ENTRY_FILE, + output: + { + filename: OUTPUT_FILE + }, + module: {rules: []}, + resolve: + { + modules: [ + path.resolve(__dirname + '/src'), + path.resolve(__dirname + '/node_modules') + ] + }, + plugins: [new webpack.ProvidePlugin({jQuery: "jquery"})] +}; +var webpackServerConfig = {}; + +//////////////////////////////////////////////////////////////////////////////// +// TASKS - Plugins +//////////////////////////////////////////////////////////////////////////////// +/** + * Create '.plugins.js' based on contents of config. + */ +const pluginsImport = function(callback) { + var pluginList = getPluginList(); + var pluginsPath = path.resolve(__dirname, SOURCE_DIRECTORY + '/' + PLUGINS_FILE); + var plugins = 'import WorkflowBuilderGUI from \'./WorkflowBuilderGUI.js\''; + + /** + for (var i = 0; i < pluginList.length; i++) + { + plugins += 'import \'' + pluginList[i] + '\';\n'; + } */ + + fs.writeFileSync(pluginsPath, plugins); + + // Set the creation and modification time for the newly generated file to 10 seconds ago, + // to work around a bug in webpack. + // See https://github.com/webpack/watchpack/issues/25#issuecomment-287789288 + var tenSecondsAgo = Date.now() / 1000 - 10 + fs.utimes(pluginsPath, tenSecondsAgo, tenSecondsAgo, function (err) { if (err) throw err; }); + + callback(); +}; + +//////////////////////////////////////////////////////////////////////////////// +// TASKS - Develop +//////////////////////////////////////////////////////////////////////////////// + +/** + * Clean out develop + */ +const developClean = function() { + return del([DEVELOP_WEBROOT]); +}; + +/** + * Make web directory. + */ +const developMkdir = gulp.series(developClean, function(callback) { + return fs.mkdir(DEVELOP_WEBROOT, callback); +}); + +/** + * Build Webpack configs for develop. + */ +const developConfig = function(callback) { + webpackConfig.mode = 'development'; + webpackConfig.devtool = DEVELOP_SOURCEMAP; + webpackConfig.output.path = path.resolve(__dirname, DEVELOP_WEBROOT); + webpackServerConfig.contentBase = DEVELOP_WEBROOT; + callback(); +}; + +/** + * Build templates. + */ +const developTemplates = function(callback) { + // Get plugin templates. When done, get the main templates. + var pluginList = getPluginList(); + var pluginTemplates = ''; + async.each(pluginList, function(plugin, done) + { + var pluginPath = path.resolve(__dirname, NODE_MODULES_DIRECTORY + '/' + plugin + '/templates'); + buildTemplates(pluginPath, [], function(error, templates) + { + if (error) + { + done(error); + } + pluginTemplates += templates; + done(); + }); + }, + function(error) + { + if (error) + { + callback(error); + } + + // Get the main templates. + buildTemplates(TEMPLATE_DIRECTORY, ['index.html'], function(err, mainTemplates) + { + var indexFile = fs.readFileSync(TEMPLATE_DIRECTORY + '/index.html', 'utf8'); + indexFile = indexFile.replace('{templates}', mainTemplates + pluginTemplates); + fs.writeFileSync(DEVELOP_WEBROOT + '/index.html', indexFile); + callback(); + }); + }); +}; + +/** + * Compile SCSS to CSS. + */ +const developStyles = function() { + return gulp.src('styles/default.scss') + .pipe(sass()) + .pipe(gulp.dest(DEVELOP_WEBROOT)); +}; + +/** + * Creates info.json. This holds client data, such as version. + * It's basically a trimmed 'package.json' + */ +const developInfo = function(callback) { + var info = createInfo(function(err, data) + { + fs.writeFileSync(DEVELOP_WEBROOT + '/' + INFO_FILE, JSON.stringify(data, null, 4)); + callback(); + }); +}; + +/** + * Links build results to web directory. + */ +const developLink = function() { + return gulp.src([CONFIGURATION_FILE, RESOURCES_DIRECTORY]).pipe(vfs.symlink(DEVELOP_WEBROOT)); +}; + +/** + * Bundle (Webpack) and start the development server. + */ +const develop = gulp.series( + pluginsImport, + developMkdir, + developConfig, + gulp.parallel(developStyles, developTemplates, developInfo, developLink), + function(callback) { + var compiler = webpack(webpackConfig); + var server = new WebpackDevServer(compiler, webpackServerConfig); + server.listen(DEVELOP_PORT, DEVELOP_HOST, function(err) + { + console.log(''); + console.log('=========='); + console.log('Starting server on: http://' + DEVELOP_HOST + ':' + DEVELOP_PORT); + console.log('Serving: ' + DEVELOP_WEBROOT); + console.log(''); + console.log('Make sure ' + DEVELOP_HOST + ':' + DEVELOP_PORT + ' is allowed access to the Rodan server'); + console.log('=========='); + console.log(''); + }); + }); + +//////////////////////////////////////////////////////////////////////////////// +// TASKS - Distribution +//////////////////////////////////////////////////////////////////////////////// +/** + * Cleans out dist. + */ + const distClean = function() { + return del([DIST_WEBROOT]); + } + + /** + * Make dist directory + */ + const distMkdir = gulp.series(distClean, function(callback) { + return fs.mkdir(DIST_WEBROOT, callback); + }); + + /** + * Build Webpack configs for dist. + */ + const distConfig = function(callback) { + var babelRule = { + test: /\.(js)$/, + exclude: /node_modules/, + use: { + loader: 'babel-loader', + options: { + presets: [ + [ + '@babel/preset-env', + { + targets: 'defaults', + useBuiltIns: 'usage', + corejs: { version: 3, proposals: true } + } + ] + ] + } + } + }; + // No more babel. This kills the rodan client. + // webpackConfig.module.rules.push(babelRule); + webpackConfig.mode = 'development'; + webpackConfig.devtool = DIST_SOURCEMAP; + webpackConfig.output.path = path.resolve(__dirname, DIST_WEBROOT); + callback(); + }; + + /** + * Build templates. + */ + const distTemplates = function(callback) { + // Get plugin templates. When done, get the main templates. + var pluginList = getPluginList(); + var pluginTemplates = ''; + async.each(pluginList, function(plugin, done) + { + var pluginPath = path.resolve(__dirname, NODE_MODULES_DIRECTORY + '/' + plugin + '/templates'); + buildTemplates(pluginPath, [], function(error, templates) + { + if (error) + { + done(error); + } + pluginTemplates += templates; + done(); + }); + }, + function(error) + { + if (error) + { + callback(error); + } + + // Get the main templates. + buildTemplates(TEMPLATE_DIRECTORY, ['index.html'], function(err, mainTemplates) + { + var indexFile = fs.readFileSync(TEMPLATE_DIRECTORY + '/index.html', 'utf8'); + indexFile = indexFile.replace('{templates}', mainTemplates + pluginTemplates); + fs.writeFileSync(DIST_WEBROOT + '/index.html', indexFile); + callback(); + }); + }); + }; + +/** + * Compile SCSS to CSS. + */ +const distStyles = function() { + return gulp.src('styles/default.scss') + .pipe(sass()) + .pipe(gulp.dest(DIST_WEBROOT)); +}; + +/** + * Creates info.json. + */ +const distInfo = function(callback) { + var info = createInfo(function(err, data) { + fs.writeFileSync(DIST_WEBROOT + '/' + INFO_FILE, JSON.stringify(data, null, 4)); + callback(); + }); +}; + +/** + * Copy to dist. + */ +const distCopy = function() { + return gulp.src([RESOURCES_DIRECTORY + '/*', CONFIGURATION_FILE, PACKAGE_FILE], {base: './'}) + .pipe(gulp.dest(DIST_WEBROOT)); +}; + +const dist = gulp.series( + pluginsImport, + distMkdir, + distConfig, + gulp.parallel( + distCopy, + distTemplates, + distStyles, + distInfo + ), + function(callback) { + webpack(webpackConfig, callback); + }); + +//////////////////////////////////////////////////////////////////////////////// +// UTILITIES +//////////////////////////////////////////////////////////////////////////////// +/** + * Returns ''; + } + callback(null, templates); + }); +} + +/** + * Creates data for info.json. + */ +function createInfo(callback) +{ + var json = require('./' + PACKAGE_FILE); + var info = {CLIENT: json}; + callback(null, info); +} + +/** + * Reads config file to determine which plugins should be included. + */ +function getPluginList() +{ + var pluginsInclusionFile = path.resolve(__dirname, + '/' + PLUGINS_INCLUSION_FILE); + try + { + var plugins = require(pluginsInclusionFile); + return Object.keys(plugins); + } + catch (error) + { + return []; + } +} + +exports.develop = develop; +exports.dist = dist; +exports.clean = gulp.parallel(distClean, developClean); +exports.default = develop; diff --git a/rodan-client/code/package.json b/rodan-client/code/package.json new file mode 100644 index 000000000..c17acea99 --- /dev/null +++ b/rodan-client/code/package.json @@ -0,0 +1,84 @@ +{ + "name": "rodan-client", + "version": "0.20.0", + "description": "Rodan Client", + "keywords": [ + "workflow", + "music", + "mcgill", + "rodan" + ], + "bugs": { + "url": "https://github.com/DDMAL/rodan-client/issues" + }, + "scripts": { + "clean": "gulp clean", + "start": "gulp", + "dist": "gulp dist", + "test": "echo \"Error: no test specified\" && exit 1", + "pretest": "node scripts/pretest.js", + "postversion": "git push && git push --tags", + "prestart": "node scripts/prestart.js", + "preversion": "node scripts/preversion.js" + }, + "author": { + "name": "Distributed Digital Music Archives & Library Laboratory", + "url": "http://ddmal.music.mcgill.ca/" + }, + "main": "src/rodan.js", + "license": "ISC", + "repository": { + "type": "git", + "url": "https://github.com/ddmal/rodan-client" + }, + "devDependencies": { + "@babel/core": "^7.9.6", + "@babel/preset-env": "^7.9.6", + "async": "^3.2.0", + "babel-loader": "^8.1.0", + "core-js": "^3.6.5", + "del": "^5.1.0", + "gulp": "^4.0.2", + "gulp-sass": "^4.1.0", + "ip": "^1.1.4", + "paper": "^0.12.4", + "prompt-sync": "^4.2.0", + "recursive-readdir": "^2.2.2", + "regenerator-runtime": "^0.13.5", + "simple-git": "^1.132.0", + "tags-input": "^1.1.1", + "vinyl-fs": "^3.0.3", + "webpack": "^4.43.0", + "webpack-dev-server": "^3.11.0" + }, + "dependencies": { + "babel-preset-env": "^1.7.0", + "backbone": "^1.4.0", + "backbone.marionette": "^4.1.2", + "backbone.radio": "^2.0.0", + "bootstrap": "^4.4.1", + "eonasdan-bootstrap-datetimepicker": "4.17.47", + "file-saver": "^2.0.2", + "jquery": "^3.5.0", + "jqueryui": "^1.11.1", + "json-editor": "0.7.28", + "moment": "^2.25.3", + "moment-timezone": "^0.5.28", + "popper.js": "^1.16.1", + "underscore": "^1.10.2" + }, + "engines": { + "node": ">=4.2.6" + }, + "jspm": { + "directories": { + "baseURL": "node_modules/.bin" + }, + "dependencies": {}, + "devDependencies": { + "babel": "npm:babel-core@^5.8.24", + "babel-runtime": "npm:babel-runtime@^5.8.24", + "core-js": "npm:core-js@^1.1.4" + } + } +} diff --git a/rodan-client/code/resources/favicon.ico b/rodan-client/code/resources/favicon.ico new file mode 100755 index 000000000..ddd077e50 Binary files /dev/null and b/rodan-client/code/resources/favicon.ico differ diff --git a/rodan-client/code/resources/grids-responsive-min.css b/rodan-client/code/resources/grids-responsive-min.css new file mode 100644 index 000000000..f83fcb816 --- /dev/null +++ b/rodan-client/code/resources/grids-responsive-min.css @@ -0,0 +1,7 @@ +/*! +Pure v0.6.0 +Copyright 2014 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +https://github.com/yahoo/pure/blob/master/LICENSE.md +*/ +@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-2,.pure-u-sm-1-3,.pure-u-sm-2-3,.pure-u-sm-1-4,.pure-u-sm-3-4,.pure-u-sm-1-5,.pure-u-sm-2-5,.pure-u-sm-3-5,.pure-u-sm-4-5,.pure-u-sm-5-5,.pure-u-sm-1-6,.pure-u-sm-5-6,.pure-u-sm-1-8,.pure-u-sm-3-8,.pure-u-sm-5-8,.pure-u-sm-7-8,.pure-u-sm-1-12,.pure-u-sm-5-12,.pure-u-sm-7-12,.pure-u-sm-11-12,.pure-u-sm-1-24,.pure-u-sm-2-24,.pure-u-sm-3-24,.pure-u-sm-4-24,.pure-u-sm-5-24,.pure-u-sm-6-24,.pure-u-sm-7-24,.pure-u-sm-8-24,.pure-u-sm-9-24,.pure-u-sm-10-24,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%;*width:4.1357%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%;*width:8.3023%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%;*width:12.469%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%;*width:16.6357%}.pure-u-sm-1-5{width:20%;*width:19.969%}.pure-u-sm-5-24{width:20.8333%;*width:20.8023%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%;*width:24.969%}.pure-u-sm-7-24{width:29.1667%;*width:29.1357%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%;*width:33.3023%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%;*width:37.469%}.pure-u-sm-2-5{width:40%;*width:39.969%}.pure-u-sm-5-12,.pure-u-sm-10-24{width:41.6667%;*width:41.6357%}.pure-u-sm-11-24{width:45.8333%;*width:45.8023%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%;*width:49.969%}.pure-u-sm-13-24{width:54.1667%;*width:54.1357%}.pure-u-sm-7-12,.pure-u-sm-14-24{width:58.3333%;*width:58.3023%}.pure-u-sm-3-5{width:60%;*width:59.969%}.pure-u-sm-5-8,.pure-u-sm-15-24{width:62.5%;*width:62.469%}.pure-u-sm-2-3,.pure-u-sm-16-24{width:66.6667%;*width:66.6357%}.pure-u-sm-17-24{width:70.8333%;*width:70.8023%}.pure-u-sm-3-4,.pure-u-sm-18-24{width:75%;*width:74.969%}.pure-u-sm-19-24{width:79.1667%;*width:79.1357%}.pure-u-sm-4-5{width:80%;*width:79.969%}.pure-u-sm-5-6,.pure-u-sm-20-24{width:83.3333%;*width:83.3023%}.pure-u-sm-7-8,.pure-u-sm-21-24{width:87.5%;*width:87.469%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%;*width:91.6357%}.pure-u-sm-23-24{width:95.8333%;*width:95.8023%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-5-5,.pure-u-sm-24-24{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-2,.pure-u-md-1-3,.pure-u-md-2-3,.pure-u-md-1-4,.pure-u-md-3-4,.pure-u-md-1-5,.pure-u-md-2-5,.pure-u-md-3-5,.pure-u-md-4-5,.pure-u-md-5-5,.pure-u-md-1-6,.pure-u-md-5-6,.pure-u-md-1-8,.pure-u-md-3-8,.pure-u-md-5-8,.pure-u-md-7-8,.pure-u-md-1-12,.pure-u-md-5-12,.pure-u-md-7-12,.pure-u-md-11-12,.pure-u-md-1-24,.pure-u-md-2-24,.pure-u-md-3-24,.pure-u-md-4-24,.pure-u-md-5-24,.pure-u-md-6-24,.pure-u-md-7-24,.pure-u-md-8-24,.pure-u-md-9-24,.pure-u-md-10-24,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%;*width:4.1357%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%;*width:8.3023%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%;*width:12.469%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%;*width:16.6357%}.pure-u-md-1-5{width:20%;*width:19.969%}.pure-u-md-5-24{width:20.8333%;*width:20.8023%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%;*width:24.969%}.pure-u-md-7-24{width:29.1667%;*width:29.1357%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%;*width:33.3023%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%;*width:37.469%}.pure-u-md-2-5{width:40%;*width:39.969%}.pure-u-md-5-12,.pure-u-md-10-24{width:41.6667%;*width:41.6357%}.pure-u-md-11-24{width:45.8333%;*width:45.8023%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%;*width:49.969%}.pure-u-md-13-24{width:54.1667%;*width:54.1357%}.pure-u-md-7-12,.pure-u-md-14-24{width:58.3333%;*width:58.3023%}.pure-u-md-3-5{width:60%;*width:59.969%}.pure-u-md-5-8,.pure-u-md-15-24{width:62.5%;*width:62.469%}.pure-u-md-2-3,.pure-u-md-16-24{width:66.6667%;*width:66.6357%}.pure-u-md-17-24{width:70.8333%;*width:70.8023%}.pure-u-md-3-4,.pure-u-md-18-24{width:75%;*width:74.969%}.pure-u-md-19-24{width:79.1667%;*width:79.1357%}.pure-u-md-4-5{width:80%;*width:79.969%}.pure-u-md-5-6,.pure-u-md-20-24{width:83.3333%;*width:83.3023%}.pure-u-md-7-8,.pure-u-md-21-24{width:87.5%;*width:87.469%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%;*width:91.6357%}.pure-u-md-23-24{width:95.8333%;*width:95.8023%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-5-5,.pure-u-md-24-24{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-2,.pure-u-lg-1-3,.pure-u-lg-2-3,.pure-u-lg-1-4,.pure-u-lg-3-4,.pure-u-lg-1-5,.pure-u-lg-2-5,.pure-u-lg-3-5,.pure-u-lg-4-5,.pure-u-lg-5-5,.pure-u-lg-1-6,.pure-u-lg-5-6,.pure-u-lg-1-8,.pure-u-lg-3-8,.pure-u-lg-5-8,.pure-u-lg-7-8,.pure-u-lg-1-12,.pure-u-lg-5-12,.pure-u-lg-7-12,.pure-u-lg-11-12,.pure-u-lg-1-24,.pure-u-lg-2-24,.pure-u-lg-3-24,.pure-u-lg-4-24,.pure-u-lg-5-24,.pure-u-lg-6-24,.pure-u-lg-7-24,.pure-u-lg-8-24,.pure-u-lg-9-24,.pure-u-lg-10-24,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%;*width:4.1357%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%;*width:8.3023%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%;*width:12.469%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%;*width:16.6357%}.pure-u-lg-1-5{width:20%;*width:19.969%}.pure-u-lg-5-24{width:20.8333%;*width:20.8023%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%;*width:24.969%}.pure-u-lg-7-24{width:29.1667%;*width:29.1357%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%;*width:33.3023%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%;*width:37.469%}.pure-u-lg-2-5{width:40%;*width:39.969%}.pure-u-lg-5-12,.pure-u-lg-10-24{width:41.6667%;*width:41.6357%}.pure-u-lg-11-24{width:45.8333%;*width:45.8023%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%;*width:49.969%}.pure-u-lg-13-24{width:54.1667%;*width:54.1357%}.pure-u-lg-7-12,.pure-u-lg-14-24{width:58.3333%;*width:58.3023%}.pure-u-lg-3-5{width:60%;*width:59.969%}.pure-u-lg-5-8,.pure-u-lg-15-24{width:62.5%;*width:62.469%}.pure-u-lg-2-3,.pure-u-lg-16-24{width:66.6667%;*width:66.6357%}.pure-u-lg-17-24{width:70.8333%;*width:70.8023%}.pure-u-lg-3-4,.pure-u-lg-18-24{width:75%;*width:74.969%}.pure-u-lg-19-24{width:79.1667%;*width:79.1357%}.pure-u-lg-4-5{width:80%;*width:79.969%}.pure-u-lg-5-6,.pure-u-lg-20-24{width:83.3333%;*width:83.3023%}.pure-u-lg-7-8,.pure-u-lg-21-24{width:87.5%;*width:87.469%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%;*width:91.6357%}.pure-u-lg-23-24{width:95.8333%;*width:95.8023%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-5-5,.pure-u-lg-24-24{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-2,.pure-u-xl-1-3,.pure-u-xl-2-3,.pure-u-xl-1-4,.pure-u-xl-3-4,.pure-u-xl-1-5,.pure-u-xl-2-5,.pure-u-xl-3-5,.pure-u-xl-4-5,.pure-u-xl-5-5,.pure-u-xl-1-6,.pure-u-xl-5-6,.pure-u-xl-1-8,.pure-u-xl-3-8,.pure-u-xl-5-8,.pure-u-xl-7-8,.pure-u-xl-1-12,.pure-u-xl-5-12,.pure-u-xl-7-12,.pure-u-xl-11-12,.pure-u-xl-1-24,.pure-u-xl-2-24,.pure-u-xl-3-24,.pure-u-xl-4-24,.pure-u-xl-5-24,.pure-u-xl-6-24,.pure-u-xl-7-24,.pure-u-xl-8-24,.pure-u-xl-9-24,.pure-u-xl-10-24,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24{display:inline-block;*display:inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%;*width:4.1357%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%;*width:8.3023%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%;*width:12.469%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%;*width:16.6357%}.pure-u-xl-1-5{width:20%;*width:19.969%}.pure-u-xl-5-24{width:20.8333%;*width:20.8023%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%;*width:24.969%}.pure-u-xl-7-24{width:29.1667%;*width:29.1357%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%;*width:33.3023%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%;*width:37.469%}.pure-u-xl-2-5{width:40%;*width:39.969%}.pure-u-xl-5-12,.pure-u-xl-10-24{width:41.6667%;*width:41.6357%}.pure-u-xl-11-24{width:45.8333%;*width:45.8023%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%;*width:49.969%}.pure-u-xl-13-24{width:54.1667%;*width:54.1357%}.pure-u-xl-7-12,.pure-u-xl-14-24{width:58.3333%;*width:58.3023%}.pure-u-xl-3-5{width:60%;*width:59.969%}.pure-u-xl-5-8,.pure-u-xl-15-24{width:62.5%;*width:62.469%}.pure-u-xl-2-3,.pure-u-xl-16-24{width:66.6667%;*width:66.6357%}.pure-u-xl-17-24{width:70.8333%;*width:70.8023%}.pure-u-xl-3-4,.pure-u-xl-18-24{width:75%;*width:74.969%}.pure-u-xl-19-24{width:79.1667%;*width:79.1357%}.pure-u-xl-4-5{width:80%;*width:79.969%}.pure-u-xl-5-6,.pure-u-xl-20-24{width:83.3333%;*width:83.3023%}.pure-u-xl-7-8,.pure-u-xl-21-24{width:87.5%;*width:87.469%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%;*width:91.6357%}.pure-u-xl-23-24{width:95.8333%;*width:95.8023%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-5-5,.pure-u-xl-24-24{width:100%}} diff --git a/rodan-client/code/resources/rodan.jpg b/rodan-client/code/resources/rodan.jpg new file mode 100755 index 000000000..9a90bb9ef Binary files /dev/null and b/rodan-client/code/resources/rodan.jpg differ diff --git a/rodan-client/code/scripts/prestart.js b/rodan-client/code/scripts/prestart.js new file mode 100644 index 000000000..07baaf31b --- /dev/null +++ b/rodan-client/code/scripts/prestart.js @@ -0,0 +1,120 @@ +/******************************************************************************* + * PRESTART + * + * Checks to see if 'configuration.json' exists. If not, it will help the user + * create one. + ******************************************************************************/ + +process.stdin.setEncoding('utf8'); + +const fs = require('fs'); +const path = require('path'); +const prompt = require('prompt-sync')({sigint: true}); + +const projectRoot = path.resolve(__dirname, '../'); + +// Check for file. If exists, we're good. Else, ask if they want to create. +fs.readFile(projectRoot + '/configuration.json', 'utf8', function(error, data) +{ + if (error) + { + if (error.errno !== -2) + { + throw error; + } + console.log('File "configuration.json" NOT found.'); + console.log('You will need one to run the dev server.'); + + var createConfig = promptCreateConfig(); + while(createConfig < 0) + { + createConfig = promptCreateConfig(); + } + + // Check for exit. + if (createConfig === 0) + { + process.exit(); + } + + // Ask for IP/domain. + var ipDomain = promptIPDomain(); + while (ipDomain === null) + { + ipDomain = promptIPDomain(); + } + + // Create config file. + var config = require(projectRoot + '/configuration.example.json'); + config.SERVER_HOST = ipDomain; + fs.writeFileSync(projectRoot + '/configuration.json', JSON.stringify(config, null, 4)); + console.log('Wrote ' + projectRoot + '/configuration.json'); + } + else + { + console.log('File ' + projectRoot + '/configuration.json found'); + } + + // Check for plugins.json. + var pluginsInclusionFile = projectRoot + '/plugins.json'; + try + { + var plugins = require(pluginsInclusionFile); + } + catch (error) + { + console.log(''); + console.log('Could not read ' + pluginsInclusionFile); + console.log('If you wish to include plugins in the build, make sure they are declared in ' + pluginsInclusionFile + ' in JSON format.'); + console.log(''); + console.log('Example:'); + console.log(''); + console.log('{'); + console.log(' "some-plugin": {},'); + console.log(' "some-other-plugin": {}'); + console.log('}'); + console.log(''); + console.log('Please see the README for more info.'); + var input = prompt('Press return/enter to continue.'); + console.log(''); + } + process.exit(); +}); + +/** + * Get config creation response. + * + * @return {int} 0 if no, 1 if yes, -1 if error + */ +function promptCreateConfig() +{ + var input = prompt('Would you like to create it now? (y/n): ', 'y'); + input = input.toLowerCase(); + if (input === 'y') + { + return 1; + } + else if (input === 'n') + { + return 0; + } + console.log('invalid response'); + return -1; +} + +/** + * IP/domain string. + * + * @return {string} null if invalid response/error + */ +function promptIPDomain() +{ + var input = prompt('Please enter IP or domain name of the Rodan server you wish the client to connect to: '); + input = input.trim(); + if (input === '') + { + console.log('invalid response'); + return null; + } + return input; +} \ No newline at end of file diff --git a/rodan-client/code/scripts/pretest.js b/rodan-client/code/scripts/pretest.js new file mode 100644 index 000000000..650aa5bab --- /dev/null +++ b/rodan-client/code/scripts/pretest.js @@ -0,0 +1,13 @@ +/******************************************************************************* + * PRETEST + ******************************************************************************/ +console.log(); +console.log('****************************************************************'); +console.log('* ' + process.env.npm_package_name + '@' + process.env.npm_package_version); +console.log('* ' + process.env.npm_package_description); +console.log('*'); +console.log('* There are currently no tests and that is BAAAAAAAAAD!'); +console.log('* So, the "test" script will fail.'); +console.log('*'); +console.log('****************************************************************'); +console.log(); \ No newline at end of file diff --git a/rodan-client/code/scripts/preversion.js b/rodan-client/code/scripts/preversion.js new file mode 100644 index 000000000..10a198173 --- /dev/null +++ b/rodan-client/code/scripts/preversion.js @@ -0,0 +1,32 @@ +/******************************************************************************* + * PREVERSION + * + * We only allow new versions from master. + ******************************************************************************/ +const path = require('path'); +const projectPath = path.resolve(__dirname, '../'); +const git = require('simple-git')(projectPath); + +git.status(function(error, data) +{ + // Check if master. + if (data.current !== 'master') + { + console.log("Must be on master branch with no changes to update version."); + process.exit(1); + } + + // Check if credential helper. + git.raw(['config', 'credential.helper'], function(error, data) + { + if (!data || data === '') + { + console.log('No git credential.helper detected. You need to set this up to version this package.'); + process.exit(1); + } + else + { + process.exit(); + } + }); +}); \ No newline at end of file diff --git a/rodan-client/code/src/js/Application.js b/rodan-client/code/src/js/Application.js new file mode 100755 index 000000000..045c7e0e6 --- /dev/null +++ b/rodan-client/code/src/js/Application.js @@ -0,0 +1,216 @@ +import _ from 'underscore'; +import $ from 'jquery'; +import bootstrap from 'bootstrap'; +import Marionette from 'backbone.marionette'; +import moment from 'moment'; +import Radio from 'backbone.radio'; + +import BehaviorTable from './Behaviors/BehaviorTable'; +import ControllerAuthentication from './Controllers/ControllerAuthentication'; +import ControllerContextMenu from './Controllers/ControllerContextMenu'; +import ControllerDownload from './Controllers/ControllerDownload'; +import ControllerModal from './Controllers/ControllerModal'; +import ControllerProject from './Controllers/ControllerProject'; +import ControllerResource from './Controllers/ControllerResource'; +import ControllerResourceList from './Controllers/ControllerResourceList'; +import ControllerRunJob from './Controllers/ControllerRunJob'; +import ControllerServer from './Controllers/ControllerServer'; +import ControllerUserPreference from './Controllers/ControllerUserPreference'; +import ControllerWorkflow from './Controllers/ControllerWorkflow'; +import ControllerWorkflowBuilder from './Controllers/ControllerWorkflowBuilder'; +import ControllerWorkflowJob from './Controllers/ControllerWorkflowJob'; +import ControllerWorkflowJobGroup from './Controllers/ControllerWorkflowJobGroup'; +import ControllerWorkflowRun from './Controllers/ControllerWorkflowRun'; +import Configuration from './Configuration'; +import ErrorManager from 'js/Managers/ErrorManager'; +import RODAN_EVENTS from './Shared/RODAN_EVENTS'; +import GlobalInputPortTypeCollection from './Collections/Global/GlobalInputPortTypeCollection'; +import GlobalJobCollection from './Collections/Global/GlobalJobCollection'; +import GlobalOutputPortTypeCollection from './Collections/Global/GlobalOutputPortTypeCollection'; +import GlobalProjectCollection from './Collections/Global/GlobalProjectCollection'; +import GlobalResourceTypeCollection from './Collections/Global/GlobalResourceTypeCollection'; +import GlobalResourceLabelCollection from './Collections/Global/GlobalResourceLabelCollection'; +import LayoutViewMaster from './Views/Master/LayoutViewMaster'; +import UpdateManager from './Managers/UpdateManager'; +import TransferManager from './Managers/TransferManager'; + +/** + * Main application class. + */ +export default class Application extends Marionette.Application +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Called on Marionette.Application.start(). This will load the configuration from the host. + */ + onStart() + { + Configuration.load('configuration.json', () => this._startUp()); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Application start-up + */ + _startUp() + { + // Check debug. + if (Configuration.DEBUG) + { + Radio.tuneIn('rodan'); + } + + Configuration.load('info.json'); + + // Non-network and non-GUI inits. Do these first. + this._initializeDateTimeFormatter(); + this._initializeRadio(); + this._initializeCollections(); + this._initializeManagers(); + + this._initializeAjaxPrefilters(); + this._initializeViews(); + this._initializeControllers(); + + require('./.plugins'); + + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_LOAD_ROUTES); + } + + /** + * Initialize managers. + */ + _initializeManagers() + { + this._transferManager = new TransferManager(); + this._updateManager = new UpdateManager(); + // This is commented out because deleting a workflowRun throws a null error despite the error + // being non-existent. Its errors are not very useful anyway. Fix in progress, see issue 475 (Rodan). + // this._errorManager = new ErrorManager(); + } + + /** + * Initializes various helpers. + */ + _initializeDateTimeFormatter() + { + moment.defaultFormat = Configuration.DATETIME_FORMAT; + _.formatFromUTC = function(dateTime) + { + // TODO - see https://github.com/DDMAL/rodan-client/issues/59 + try + { + return moment(dateTime).format(); + } + catch(error) + { + return moment.moment(dateTime).format(); + } + }; + } + + /** + * Set event binding. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__SERVER_ROUTESLOADED, () => this._handleEventRoutesLoaded()); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGIN_SUCCESS, () => this._handleAuthenticationSuccess()); + } + + /** + * Initialize controllers. These are not used for viewing; rather, they are server/auth control. + */ + _initializeControllers() + { + this._contextMenuController = new ControllerContextMenu(); + this._downloadController = new ControllerDownload(); + this._controllerServer = new ControllerServer(); + this._controllerAuthentication = new ControllerAuthentication(this._controllerServer); + this._modalController = new ControllerModal(); + this._projectController = new ControllerProject(); + this._resourceController = new ControllerResource(); + this._resourceListController = new ControllerResourceList(); + this._runJobController = new ControllerRunJob(); + this._userPreferenceController = new ControllerUserPreference(); + this._workflowController = new ControllerWorkflow(); + this._workflowRunController = new ControllerWorkflowRun(); + this._workflowBuilderController = new ControllerWorkflowBuilder(); + this._workflowJobController = new ControllerWorkflowJob(); + this._workflowJobGroupController = new ControllerWorkflowJobGroup(); + } + + /** + * Initialize AJAX prefilters. This allows the application a lower level of request monitoring (if desired). + */ + _initializeAjaxPrefilters() + { + var that = this; + $.ajaxPrefilter(function(options) + { + that._controllerAuthentication.ajaxPrefilter(options); + that._controllerServer.ajaxPrefilter(options); + }); + } + + /** + * Initialize collections. + */ + _initializeCollections() + { + this._jobCollection = new GlobalJobCollection(); + this._resourceTypeCollection = new GlobalResourceTypeCollection(); + this._inputPortTypeCollection = new GlobalInputPortTypeCollection(); + this._outputPortTypeCollection = new GlobalOutputPortTypeCollection(); + this._projectCollection = new GlobalProjectCollection(); + this._resourceLabelCollection = new GlobalResourceLabelCollection(); + } + + /** + * Initialize all the views so they can respond to events. + */ + _initializeViews() + { + this._layoutViewMaster = new LayoutViewMaster(); + } + + /** + * Handle EVENT__SERVER_ROUTESLOADED. + */ + _handleEventRoutesLoaded() + { + // Render layout views. + /** @ignore */ + this.showView(this._layoutViewMaster); + + // Do version compatibility trimming. + if (Configuration.ENFORCE_VERSION_COMPATIBILITY) + { + RODAN_EVENTS.enforceVersionCompatibility(); + } + + // Check authentication. + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_CHECK); + } + + /** + * Handle authentication success. + */ + _handleAuthenticationSuccess() + { + var user = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_USER); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_LOAD_ROUTE_OPTIONS); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECTS_LOAD, {data: {user: user.get('uuid')}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_INPUTPORTTYPES_LOAD); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_OUTPUTPORTTYPES_LOAD); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPES_LOAD); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABELS_LOAD); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOBS_LOAD, {data: {enabled: 'True'}}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SELECTED_COLLECTION); + } +} +Application.prototype.region = '#region-master'; diff --git a/rodan-client/code/src/js/Behaviors/BehaviorTable.js b/rodan-client/code/src/js/Behaviors/BehaviorTable.js new file mode 100755 index 000000000..6c7dc92b6 --- /dev/null +++ b/rodan-client/code/src/js/Behaviors/BehaviorTable.js @@ -0,0 +1,663 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import datetimepicker from 'eonasdan-bootstrap-datetimepicker'; +import 'jqueryui'; +import BaseCollection from 'js/Collections/BaseCollection'; +import Configuration from 'js/Configuration'; +import Environment from 'js/Shared/Environment'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * A Marionette Behavior for tables. This class defines sorting and filtering. + */ +export default class BehaviorTable extends Marionette.Behavior +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this._filtersInjected = false; + this._datetimepickerElements = []; + this._lastTarget = null; + this._multipleSelectionKey = Environment.getMultipleSelectionKey(); + this._rangeSelectionKey = Environment.getRangeSelectionKey(); + } + + /** + * Delegate events and inject table controls after render. + * + * @param {Marionette.View} view View from which the Behavior will get events + */ + onRender(view) + { + // Not really pretty, but works for now. Marionette calls 'delegateEvents' + // before our custom 'initialize' on the view. However, at that point, the + // collection is not yet set in the view, so binding doesn't work. This next + // line is a work around. + // TODO - fix/find better way + this.view.delegateEvents(); + + // Inject controls and initialize. + this._injectControl(); + this._processPagination(null); + + // Inject the controls. + if (view.collection) + { + this._handleCollectionEventSync(view.collection); + } + + if (view.collection._route === "projects") + { + Radio.channel('rodan').on(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_FIRST, () => this._handlePaginationFirst()); + Radio.channel('rodan').on(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_PREVIOUS, () => this._handlePaginationPrevious()); + Radio.channel('rodan').on(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_NEXT, () => this._handlePaginationNext()); + Radio.channel('rodan').on(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_LAST, () => this._handlePaginationLast()); + } + } + + /** + * Destroy instance. This takes care of destroying any known DateTimePicker instances before moving to the next View. + * Also reset last target. + */ + onDestroy() + { + var datetimePickerElementIds = $(this.el).find(':data(DateTimePicker)').map(function(){return $(this).attr('id');}).get(); + for (var index in datetimePickerElementIds) + { + $(this.el).find('#' + datetimePickerElementIds[index]).data('DateTimePicker').destroy(); + } + this._lastTarget = null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - injectors +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Injects control template. + */ + _injectControl() + { + if (this.$el.find('.table-control').length === 0) + { + this.$el.find('div.table-responsive').before($(this.options.templateControl).html()); + } + } + + /** + * Returns the filters for the associated Collection. + */ + _getFilters(collection, filterFields) + { + // Some tables will be defined with enumerations. + var enumerations = collection.getEnumerations(); + + // Get all columns that have a data-name attribute. + var filters = []; + this._datetimepickerElements = []; + var columns = $(this.el).find(this.options.table + ' thead th').filter(function() { return $(this).attr('data-name'); }); + // Create a mapping of column name to column title. + var columnTitlesAndNames = columns.map(function() { + return {[$(this).attr('data-name')]: $(this).text()} + }); + var columnTitleByName = Object.assign({}, ...columnTitlesAndNames.get()); + var filterTitles = this.view.filterTitles || {}; + + for (var [field, fieldFilters] of Object.entries(filterFields)) + { + var datetimeLtFilter = false; + var datetimeGtFilter = false; + // Try to find a title for the filter - either specified in the view class, or taken + // from the corresponding column title. + var filterTitle = filterTitles[field] || columnTitleByName[field]; + if (filterTitle) + { + // First, check to see if this is an enumeration field (which Django doesn't cover). + // If it is, deal with it as such. + for (var filter of fieldFilters) + { + switch (filter) + { + case 'icontains': + { + filters.push(this._getFilterText(filterTitle, field)); + break; + } + + case 'gt': + { + datetimeGtFilter = true; + break; + } + + case 'lt': + { + datetimeLtFilter = true; + break; + } + + case 'exact': + { + if (field === 'labels') + { + filters.push(this._getFilterLabels(filterTitle, field)); + } + break; + } + + default: + { + break; + } + } + } + + // Check for datetime filters. + if (datetimeGtFilter || datetimeLtFilter) + { + if (datetimeGtFilter) + { + var elementId = '#' + field + '__gt'; + this._datetimepickerElements.push(elementId); + } + if (datetimeLtFilter) + { + elementId = '#' + field + '__lt'; + this._datetimepickerElements.push(elementId); + } + filters.push(this._getFilterDatetime(filterTitle, field)); + } + } + } + + // Finally, get enumerations. + var templateChoice = _.template($(this.options.templateFilterChoice).html()); + var templateInput = _.template($(this.options.templateFilterEnum).html()); + for (var [field, enumeration] of enumerations) + { + var htmlChoice = templateChoice({label: enumeration.label, field: field}); + var htmlInput = templateInput({label: enumeration.label, field: field, values: enumeration.values}); + var filterObject = {collectionItem: htmlChoice, input: htmlInput}; + filters.push(filterObject); + } + + return filters; + } + + /** + * Injects filtering functionality into template. + */ + _injectFiltering(filterFields) + { + var filters = this._getFilters(this.view.collection, filterFields); + for (var index in filters) + { + var $collectionItem = $(filters[index].collectionItem); + var $formInput = $(filters[index].input); + $collectionItem.click((event) => this._handleFilterClick(event)); + $(this.el).find('#filter-menu ul').append($collectionItem); + $(this.el).find('#filter-inputs').append($formInput); + } + + // Setup datetimepickers. + for (index in this._datetimepickerElements) + { + var elementId = this._datetimepickerElements[index]; + $(this.el).find(elementId).datetimepicker(); + $(this.el).find(elementId).data('DateTimePicker').format(Configuration.DATETIME_FORMAT); + $(this.el).find(elementId).on('dp.change', () => this._handleSearch()); + } + + $(this.el).find('#filter-inputs input').on('change keyup paste mouseup', () => this._handleSearch()); + $(this.el).find('#filter-inputs select').on('change keyup paste mouseup', () => this._handleSearch()); + + this._filtersInjected = true; + this._hideFormElements(); + } + + /** + * Get text filter. + */ + _getFilterText(label, field) + { + var templateChoice = _.template($(this.options.templateFilterChoice).html()); + var templateInput = _.template($(this.options.templateFilterText).html()); + var htmlChoice = templateChoice({label: label, field: field}); + var htmlInput = templateInput({label: label, field: field}); + return {collectionItem: htmlChoice, input: htmlInput}; + } + + /** + * Get master datetime filter template. + */ + _getFilterDatetime(label, field) + { + var templateChoice = _.template($(this.options.templateFilterChoice).html()); + var templateInput = _.template($(this.options.templateFilterDatetime).html()); + var htmlChoice = templateChoice({label: label, field: field}); + var htmlInput = templateInput({label: label, field: field}); + return {collectionItem: htmlChoice, input: htmlInput}; + } + + /** + * Get the filter for resource labels + */ + _getFilterLabels(label, field) + { + var templateChoice = _.template($(this.options.templateFilterChoice).html()); + var templateInput = _.template($(this.options.templateFilterMultipleEnum).html()); + var labelCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABEL_COLLECTION); + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + var project_resources = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCES_CURRENT, {data: {project: project.id}}); + var labels = new Set(); + project_resources.each(function (resource) { + resource.attributes.labels.forEach(function (url) { + labels.add(url); + }); + }); + var filtered_collection = labelCollection.filter(function (resource) { return labels.has(resource.attributes.url); }); + var labelModels = filtered_collection.map((label) => { + return { + label: label.get('name'), + value: label.get('uuid') + }; + }); + var htmlChoice = templateChoice({label: label, field: field}); + var htmlInput = templateInput({label: label, field: field, values: labelModels}); + return {collectionItem: htmlChoice, input: htmlInput}; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Event handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles filter click. + */ + _handleFilterClick(event) + { + var data = $(event.target).data(); + //this._hideFormElements(); + if (data.id) + { + this._showFormElement(data.id); + } + } + + /** + * Handle search. + */ + _handleSearch() + { + // Only use this if the collection has a URL. + if (!this.view.collection.route) + { + return; + } + + var values = $(this.el).find('form').serializeArray(); + var filters = {}; + for (var index in values) + { + var name = values[index].name; + var value = values[index].value; + if (typeof filters[name] === 'undefined') { + filters[name] = value; + } else if (typeof filters[name] === 'string') { + filters[name] = [filters[name], value]; + } else { + filters[name].push(value); + } + } + this.view.collection.fetchFilter(filters); + } + + /** + * Handles sort request. + * + * Defaults to ascending. Only goes descending if the associated ascending + * CSS style is currently attached to the target th. + */ + _handleSort(event) + { + // Only use this if the collection has a route. + if (!this.view.collection.route) + { + return; + } + + var sortField = $(event.currentTarget).attr('data-name'); + if (sortField) + { + // Check for sort arrow "up" already there. If so, we want down (else, up). + var ascending = true; + if ($(event.currentTarget).find('span.glyphicon-arrow-up').length > 0) + { + ascending = false; + } + + // Do the sort. + this.view.collection.fetchSort(ascending, sortField); + + // Set the sort arrows properly. + $(event.currentTarget).parent().find('th span.glyphicon').remove(); + if (ascending) + { + $(event.currentTarget).append(''); + } + else + { + $(event.currentTarget).append(''); + } + } + } + + /** + * Handle pagination previous. + */ + _handlePaginationPrevious() + { + var pagination = this.view.collection.getPagination(); + var data = this._getURLQueryParameters(pagination.get('previous')); + if (data.page) + { + this.view.collection.fetchPage({page: data.page}); + } + else + { + this.view.collection.fetchPage({}); + } + } + + /** + * Handle pagination next. + */ + _handlePaginationNext() + { + var pagination = this.view.collection.getPagination(); + var data = this._getURLQueryParameters(pagination.get('next')); + this.view.collection.fetchPage({page: data.page}); + } + + /** + * Handle pagination first. + */ + _handlePaginationFirst() + { + this.view.collection.fetchPage({page: 1}); + } + + /** + * Handle pagination last. + */ + _handlePaginationLast() + { + var pagination = this.view.collection.getPagination(); + this.view.collection.fetchPage({page: pagination.get('total')}); + } + + /** + * Handles collection event. + */ + _handleCollectionEventSync(collection) + { + if (collection instanceof BaseCollection) + { + // We only inject if: the table exists, a route exists, we haven't injected yet, and the table has items. + if ($(this.el).find(this.options.table).length > 0 && + collection.route && + !this._filtersInjected && + collection.length > 0) + { + var options = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_GET_ROUTE_OPTIONS, {route: collection.route}); + if (options) + { + this._injectFiltering(options.filter_fields); + } + } + + // Handle pagination. + this._processPagination(collection); + } + } + + /** + * Handle button remove. + */ + _handleButtonRemove(event) + { + var data = $(event.target).data(); + this._hideFormElement(data.id); + this._handleSearch(); + } + + /** + * Handle button clear all. + */ + _handleButtonClearAll(event) + { + var data = $(event.target).data(); + this._hideFormElements(); + this._handleSearch(); + } + + /** + * Handle row left click. + */ + _handleLeftClickRow(event) + { + if (this.view.allowMultipleSelection) + { + // Wipe everything if ctrl key not selected. + if (!event[this._multipleSelectionKey]) + { + $(event.currentTarget).addClass('active clickable-row').siblings().removeClass('active'); + } + else + { + $(event.currentTarget).toggleClass('active'); + } + + // If shift down, select range. + if (event[this._rangeSelectionKey]) + { + $(this._lastTarget).addClass('active clickable-row') + if ($(this._lastTarget).index() <= $(event.currentTarget).index()) + { + $(this._lastTarget).nextUntil(event.currentTarget).addClass('active clickable-row'); + } + else + { + $(event.currentTarget).nextUntil(this._lastTarget).addClass('active clickable-row'); + } + } + else + { + this._lastTarget = event.currentTarget; + } + } + else + { + $(event.currentTarget).addClass('active clickable-row').siblings().removeClass('active'); + this._lastTarget = event.currentTarget; + } + } + + /** + * Handles right click on row. + */ + _handleRowRightClick(event) + { + if (this.view.contextMenu) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__CONTEXTMENU_SHOW, {top: event.pageY, + left: event.pageX, + items: this.view.contextMenu}); + } + return false; + } + + /** + * Handle pagination change. + */ + _handlePaginationSelect(event) + { + this.view.collection.fetchPage({page: parseInt(event.currentTarget.value)}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns query parameters from passed URL string. + * + * TODO: move this out of here... + */ + _getURLQueryParameters(string) + { + var queryString = string.substr(string.indexOf('?') + 1), + match, + pl = /\+/g, // Regex for replacing addition symbol with a space + search = /([^&=]+)=?([^&]*)/g, + decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }; + + var urlParams = {}; + while (match = search.exec(queryString)) + urlParams[decode(match[1])] = decode(match[2]); + return urlParams; + } + + /** + * Hide all form elements for the table control. + */ + _hideFormElements() + { + $(this.el).find('#filter-inputs div input').val(''); + $(this.el).find('#filter-inputs div select').val(''); + $(this.el).find('#filter-inputs').children().hide(); + } + + /** + * Hide form element of given ID. + */ + _hideFormElement(elementId) + { + $(this.el).find('#filter-inputs div#' + elementId + ' input').val(''); + $(this.el).find('#filter-inputs div#' + elementId + ' select').val(''); + $(this.el).find('#filter-inputs div#' + elementId).hide(); + } + + /** + * Shows form element of given ID. + */ + _showFormElement(elementId) + { + $(this.el).find('#filter-inputs div#' + elementId).show(); + } + + /** + * Process pagination. + */ + _processPagination(collection) + { + // Initialize pagination controls. + $(this.el).find('.table-control #pagination-first').prop('disabled', true); + $(this.el).find('.table-control #pagination-previous').prop('disabled', true); + $(this.el).find('.table-control #pagination-next').prop('disabled', true); + $(this.el).find('.table-control #pagination-last').prop('disabled', true); + + $(this.el).find('.table-control #pagination-first').hide(); + $(this.el).find('.table-control #pagination-previous').hide(); + $(this.el).find('.table-control #pagination-next').hide(); + $(this.el).find('.table-control #pagination-last').hide(); + + $(this.el).find('.table-control #pagination-select').hide(); + $(this.el).find('.table-control #pagination-select').empty(); + $(this.el).find('.table-control #pagination-select-text').hide(); + Radio.channel('radio').request(RODAN_EVENTS.REQUEST__UPDATE_NAVIGATION_PAGINATION); + + // If collection, setup pagination. + if (collection) + { + var pagination = collection.getPagination(); + if (pagination !== null) + { + // Handle select and show buttons + if (pagination.get('total') > 1) + { + var select = $(this.el).find('.table-control #pagination-select'); + select.prop('disabled', false); + for (var i = 1; i <= pagination.get('total'); i++) + { + select.append($('

  • ').append(anchor)); + } + $('#menu-context').css('top', options.top); + $('#menu-context').css('left', options.left); + $('#menu-context').show(); + $('body').one('click', this._handleRequestContextMenuHide); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerDownload.js b/rodan-client/code/src/js/Controllers/ControllerDownload.js new file mode 100755 index 000000000..1eba9aed0 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerDownload.js @@ -0,0 +1,45 @@ +import $ from 'jquery'; +import BaseController from 'js/Controllers/BaseController'; +import Configuration from 'js/Configuration'; +import FileSaver from 'file-saver'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Download controller. + */ +export default class ControllerDownload extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Event bindings. + */ + _initializeRadio() + { + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__DOWNLOAD_START, (options) => this._handleRequestDownloadStart(options)); + } + + /** + * Handle download start. + */ + _handleRequestDownloadStart(options) + { + var data = options.data; + var filename = options.filename; + var mimetype = options.mimetype; + var blob = new Blob([data], {type: mimetype}); + FileSaver.saveAs(blob, filename); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerModal.js b/rodan-client/code/src/js/Controllers/ControllerModal.js new file mode 100755 index 000000000..50dd9cd28 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerModal.js @@ -0,0 +1,124 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Controls modals. + */ +export default class ControllerModal extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this._waiting = true; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize radio. + */ + _initializeRadio() + { + // Requests. + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__MODAL_ERROR, (options) => this._handleRequestModalError(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__MODAL_HIDE, () => this._handleRequestModalHide()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__MODAL_SHOW, options => this._handleRequestModalShow(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, options => this._handleRequestModalShowImportant(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle request modal hide. + */ + _handleRequestModalHide() + { + var $modalElement = $('#modal-generic'); + $('.modal-footer').removeClass('modal-footer-error'); + $modalElement.modal('hide'); + this._waiting = false; + } + + /** + * Handle request modal show. + */ + _handleRequestModalShow(options) + { + var $modalEl = $('#modal-generic'); + if ($modalEl.is(':visible')) + { + return; + } + + if (typeof options.content == 'string') + { + this._layoutViewModal = new Marionette.View({template: _.template($('#template-modal_simple').text())}); + this._layoutViewModal.render(); + + $modalEl.css({top: 0, left: 0, position: 'absolute'}); + $modalEl.html(this._layoutViewModal.el); + $('.modal-title').text(options.title); + $('.modal-body').append(options.content); + $modalEl.modal({backdrop: 'static', keyboard: false}); + } + else + { + this._layoutViewModal = new Marionette.View({template: _.template($('#template-modal').text())}); + this._layoutViewModal.addRegions({modal_body: '#region-modal_body'}); + this._layoutViewModal.render(); + this._layoutViewModal.showChildView('modal_body', options.content); + + $modalEl.css({top: 0, left: 0, position: 'absolute'}); + $modalEl.html(this._layoutViewModal.el); + $modalEl.draggable({handle: '.modal-header'}); + $('.modal-title').text(options.title); + $modalEl.modal({backdrop: 'static'}); + } + } + + /** + * Handles modal update footer. If a modal is currently visible, this will + * update the footer. If not, it will do REQUEST__MODAL_SHOW. + */ + _handleRequestModalShowImportant(options) + { + var $modalEl = $('#modal-generic'); + if ($modalEl.is(':visible')) + { + $('.modal-footer').text(options.title + ': ' + options.content); + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, options); + } + } + + /** + * Handles modal error. If modal is already visible, changes footer text. + * Else, creates simple modal. + */ + _handleRequestModalError(options) + { + var $modalEl = $('#modal-generic'); + if ($modalEl.is(':visible')) + { + $('.modal-footer').text(options.content); + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: 'ERROR', content: options.content}); + } + $('.modal-footer').addClass('modal-footer-error'); + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerProject.js b/rodan-client/code/src/js/Controllers/ControllerProject.js new file mode 100755 index 000000000..e1779e820 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerProject.js @@ -0,0 +1,365 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseController from './BaseController'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import LayoutViewProjectUsers from 'js/Views/Master/Main/Project/Individual/LayoutViewProjectUsers'; +import Project from 'js/Models/Project'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import UserCollection from 'js/Collections/UserCollection'; +import ViewProject from 'js/Views/Master/Main/Project/Individual/ViewProject'; +import ViewProjectCollection from 'js/Views/Master/Main/Project/Collection/ViewProjectCollection'; +import ViewUserCollectionItem from 'js/Views/Master/Main/User/Collection/ViewUserCollectionItem'; +import ViewWorkflowRunCollection from 'js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollection'; +import WorkflowRunCollection from 'js/Collections/WorkflowRunCollection'; + +/** + * Controller for Projects. + */ +export default class ControllerProject extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize the instance. + */ + initialize() + { + this._activeProject = null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - initialization +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + // Events. + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_ADDED_USER_ADMIN, options => this._handleEventProjectAddedUserAdmin(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_ADDED_USER_WORKER, options => this._handleEventProjectAddedUserWorker(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_CREATED, options => this._handleEventProjectGenericResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_DELETED, options => this._handleEventProjectDeleteResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_REMOVED_USER_ADMIN, options => this._handleEventProjectRemovedUser(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_REMOVED_USER_WORKER, options => this._handleEventProjectRemovedUser(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_SAVED, options => this._handleEventProjectGenericResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_SELECTED, options => this._handleEventItemSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_SELECTED_COLLECTION, () => this._handleEventCollectionSelected()); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_USERS_SELECTED, options => this._handleEventProjectShowUsers(options)); + + // Requests. + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_ADD_USER_ADMIN, (options) => this._handleRequestProjectAddUserAdmin(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_ADD_USER_WORKER, (options) => this._handleRequestProjectAddUserWorker(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE, () => this._handleRequestProjectActive()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_CREATE, options => this._handleRequestCreateProject(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, options => this._handleRequestSetActiveProject(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_SAVE, options => this._handleRequestProjectSave(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_DELETE, options => this._handleRequestProjectDelete(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_REMOVE_USER_ADMIN, options => this._handleRequestRemoveUserAdmin(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__PROJECT_REMOVE_USER_WORKER, options => this._handleRequestRemoveUserWorker(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Event handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event Project show users. + */ + _handleEventProjectShowUsers(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + + // Make sure project is updated. + options.project.fetch(); + + // Create collections to store admins and workers. + var adminUserCollection = new UserCollection(); + var workerUserCollection = new UserCollection(); + + // Get admins and workers for project. + var ajaxSettingsAdmins = {success: (response) => this._handleProjectGetAdminsSuccess(response, adminUserCollection), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'GET', + dataType: 'json', + url: options.project.get('url') + 'admins/'}; + var ajaxSettingsWorkers = {success: (response) => this._handleProjectGetWorkersSuccess(response, workerUserCollection), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'GET', + dataType: 'json', + url: options.project.get('url') + 'workers/'}; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettingsAdmins}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettingsWorkers}); + + // Need collection for all users. + var collection = new UserCollection(); + collection.fetch(); + var userSelectionView = new BaseViewCollection({collection: collection, + template: _.template($('#template-main_user_selection').text()), + childView: BaseViewCollectionItem, + childViewContainer: 'select', + childViewOptions: {template: _.template($('#template-main_user_selection_item').text()), + tagName: 'option'}}); + + // Create view. + var projectAdminsView = new BaseViewCollection({collection: adminUserCollection, + template: _.template($('#template-main_user_collection').text()), + childView: ViewUserCollectionItem, + childViewOptions: {template: _.template($('#template-main_user_collection_item_remove').text()), + project: options.project, + admin: true}}); + var projectWorkersView = new BaseViewCollection({collection: workerUserCollection, + template: _.template($('#template-main_user_collection').text()), + childView: ViewUserCollectionItem, + childViewOptions: {template: _.template($('#template-main_user_collection_item_remove').text()), + project: options.project}}); + var view = new LayoutViewProjectUsers({viewusers: userSelectionView, + viewprojectadmins: projectAdminsView, + viewprojectworkers: projectWorkersView, + project: options.project}); + + // Show modal. + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Project Users'}); + } + + /** + * Handle event Project generic response. + */ + _handleEventProjectGenericResponse() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECTS_LOAD, {}); + } + + /** + * Handle event Project delete response. + */ + _handleEventProjectDeleteResponse() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECTS_LOAD, {}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SELECTED_COLLECTION); + } + + /** + * Handle request Project save. + */ + _handleRequestProjectSave(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Project', content: 'Please wait...'}); + options.project.save(options.fields, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SAVED, {project: model})}); + } + + /** + * Handle request Project create. + */ + _handleRequestCreateProject(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Creating Project', content: 'Please wait...'}); + var project = new Project({creator: options.user}); + project.save({}, {success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_CREATED, {project: model})}); + } + + /** + * Handle request Project delete. + */ + _handleRequestProjectDelete(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Project', content: 'Please wait...'}); + this._activeProject = null; + options.project.destroy({success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_DELETED, {project: model})}); + } + + /** + * Handle request set active Project. + */ + _handleRequestSetActiveProject(options) + { + this._activeProject = options.project; + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + this._activeProject = options.project; + this._activeProject.fetch(); + var collection = new WorkflowRunCollection(); + collection.fetch({data: {project: this._activeProject.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [collection]}); + var layoutView = new LayoutViewModel({template: _.template($('#template-main_layoutview_model_inverse').text())}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: layoutView}); + layoutView.showItem(new ViewProject({model: this._activeProject})); + layoutView.showCollection(new ViewWorkflowRunCollection({collection: collection})); + } + + /** + * Handle collection selection. + */ + _handleEventCollectionSelected() + { + var collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECT_COLLECTION); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [collection]}); + var view = new ViewProjectCollection({collection: collection}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: view}); + } + + /** + * Handle request for current active project. Returns null. + */ + _handleRequestProjectActive() + { + return this._activeProject; + } + + /** + * Handle project admins get success. + */ + _handleProjectGetAdminsSuccess(response, collection) + { + collection.fetch({data: {username__in: response.join()}}); + } + + /** + * Handle project workers get success. + */ + _handleProjectGetWorkersSuccess(response, collection) + { + if (response.flat().length !== 0){ + collection.fetch({data: {username__in: response.join()}}); + } + } + + /** + * Handle request to remove User as Project admin. + * We have to use a custom AJAX call since modifying the users of a Project + * has no endpoint at the moment. + */ + _handleRequestRemoveUserAdmin(options) + { + var admins = options.project.get('admins'); + if (admins.length > 1) + { + var userIndex = admins.indexOf(options.user.get('username')); + if (userIndex >= 0) + { + admins.splice(userIndex, 1); + var usersSendObject = {}; + admins.map(function(value) { usersSendObject[value] = value; return value; }); + var ajaxSettings = {success: (response) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_REMOVED_USER_ADMIN, {project: options.project}), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'PUT', + dataType: 'json', + data: usersSendObject, + url: options.project.get('url') + 'admins/'}; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettings}); + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_ERROR, {content: 'An error occured trying to remove this User.'}); + } + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_ERROR, {content: 'At least one project admin, the creator, must exist.'}); + } + } + + /** + * Handle request to remove User as Project worker. + * We have to use a custom AJAX call since modifying the users of a Project + * has no endpoint at the moment. + */ + _handleRequestRemoveUserWorker(options) + { + var users = options.project.get('workers'); + if (users.length > 0) + { + var userIndex = users.indexOf(options.user.get('username')); + if (userIndex >= 0) + { + users.splice(userIndex, 1); + var usersSendObject = {}; + users.map(function(value) { usersSendObject[value] = value; return value; }); + var ajaxSettings = {success: (response) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_REMOVED_USER_WORKER, {project: options.project}), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'PUT', + dataType: 'json', + data: usersSendObject, + url: options.project.get('url') + 'workers/'}; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettings}); + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_ERROR, {content: 'An error occured trying to remove this User.'}); + } + } + } + + /** + * Handle project removed user. + */ + _handleEventProjectRemovedUser(options) + { + this._activeProject.fetch(); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_USERS_SELECTED, {project: this._activeProject}); + } + + /** + * Handle request add admin. + */ + _handleRequestProjectAddUserAdmin(options) + { + var users = options.project.get('admins'); + users.push(options.username); + var usersSendObject = {}; + users.map(function(value) { usersSendObject[value] = value; return value; }); + var ajaxSettings = {success: (response) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_ADDED_USER_ADMIN, {project: options.project}), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'PUT', + dataType: 'json', + data: usersSendObject, + url: options.project.get('url') + 'admins/'}; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettings}); + } + + /** + * Handle request add worker. + */ + _handleRequestProjectAddUserWorker(options) + { + var users = options.project.get('workers'); + users.push(options.username); + var usersSendObject = {}; + users.map(function(value) { usersSendObject[value] = value; return value; }); + var ajaxSettings = {success: (response) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_ADDED_USER_WORKER, {project: options.project}), + error: (response) => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {response: response}), + type: 'PUT', + dataType: 'json', + data: usersSendObject, + url: options.project.get('url') + 'workers/'}; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettings}); + } + + /** + * Handle event added admin. + */ + _handleEventProjectAddedUserAdmin() + { + this._activeProject.fetch(); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_USERS_SELECTED, {project: this._activeProject}); + } + + /** + * Handle event added worker. + */ + _handleEventProjectAddedUserWorker() + { + this._activeProject.fetch(); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_USERS_SELECTED, {project: this._activeProject}); + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerResource.js b/rodan-client/code/src/js/Controllers/ControllerResource.js new file mode 100755 index 000000000..f01594d97 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerResource.js @@ -0,0 +1,252 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import Radio from 'backbone.radio'; +import Resource from 'js/Models/Resource'; +import ResourceCollection from 'js/Collections/ResourceCollection'; +import ViewResource from 'js/Views/Master/Main/Resource/Individual/ViewResource'; +import ViewResourceMulti from 'js/Views/Master/Main/Resource/Individual/ViewResourceMulti'; +import ViewResourceCollection from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollection'; +import ViewResourceCollectionItem from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionItem'; + +/** + * Controller for Resources. + */ +export default class ControllerResource extends BaseController +{ + initialize() { + this._selectedResources = new Set(); + this._baseSelectResource = null; + } +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + // Events + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SELECTED, options => this._handleEventItemSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_CREATED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_DELETED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SAVED, options => this._handleSuccessGeneric(options)); + + // Requests + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_CREATE, options => this._handleRequestResourceCreate(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_DELETE, options => this._handleCommandResourceDelete(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_DOWNLOAD, options => this._handleRequestResourceDownload(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_SAVE, options => this._handleCommandResourceSave(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_SHOWLAYOUTVIEW, options => this._handleCommandShowLayoutView(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCE_VIEWER_ACQUIRE, options => this._handleRequestViewer(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCES_LOAD, options => this._handleRequestResources(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCES_UPDATE_LABELS, () => this._handleRequestUpdateLabels()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCES_CURRENT, options => this._handleCurrentResources(options)); + } + + /** + * Handle show LayoutView. + */ + _handleCommandShowLayoutView(options) + { + this._layoutView = options.layoutView; + } + + /** + * Handle collection selection. + */ + _handleEventCollectionSelected(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCES_LOAD, {data: {project: options.project.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [this._collection]}); + this._layoutView = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._layoutView}); + var view = new ViewResourceCollection({collection: this._collection, + template: _.template($('#template-main_resource_collection').text()), + childView: ViewResourceCollectionItem, + model: options.project}); + this._layoutView.showCollection(view); + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + if (!options.multiple && !options.range) { + this._selectedResources.clear(); + this._baseSelectResource = null; + } + + if (options.multiple && this._selectedResources.has(options.resource)) { + this._selectedResources.delete(options.resource); + this._baseSelectResource = null; + } + else if (options.range && this._baseSelectResource !== null) { + let indexBase = this._collection.indexOf(this._baseSelectResource); + let indexRes = this._collection.indexOf(options.resource); + this._selectedResources.clear(); + for (let n = Math.min(indexBase, indexRes); n <= Math.max(indexBase, indexRes); n++) { + this._selectedResources.add(this._collection.at(n)); + } + } + else { + this._selectedResources.add(options.resource); + this._baseSelectResource = options.resource; + } + + if (this._selectedResources.size === 0) { + this._layoutView.clearItemView(); + } + else if (this._selectedResources.size === 1) { + this._layoutView.showItem(new ViewResource({model: this._selectedResources.values().next().value})); + } + else { + this._layoutView.showItem(new ViewResourceMulti({models: this._selectedResources})); + } + } + + /** + * Handle command add Resource. + */ + _handleRequestResourceCreate(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Creating Resource', content: 'Please wait...'}); + var resource = null; + let opts = { + project: options.project.get('url'), + file: options.file, + }; + if (options.resourcetype) + { + opts['resource_type'] = options.resourcetype; + } + if (options.label_names !== undefined) + { + opts['label_names'] = options.label_names; + } + resource = new Resource(opts); + var jqXHR = resource.save({}, {success: (model) => this._handleCreateSuccess(model, this._collection)}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD, {request: jqXHR, file: options.file}); + } + + /** + * Handle command delete Resource. + */ + _handleCommandResourceDelete(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Resource', content: 'Please wait...'}); + this._layoutView.clearItemView(); + options.resource.destroy({success: (model) => this._handleDeleteSuccess(model, this._collection)}); + } + + /** + * Handle command download Resource. + */ + _handleRequestResourceDownload(options) + { + var mimetype = options.resource.get('resource_type_full').mimetype; + var ext = options.resource.get('resource_type_full').extension; + var filename = options.resource.get('name') + '.' + ext; + let a = document.createElement('a'); + a.href = options.resource.get('download'); + a.download = filename; + a.type = mimetype; + document.body.append(a); + a.click(); + a.remove(); + } + + /** + * Handle command save Resource. + */ + _handleCommandResourceSave(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Resource', content: 'Please wait...'}); + options.resource.save(options.fields, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SAVED, {resource: model})}); + } + + _handleCurrentResources(options) + { + try { + if (this._collection['_lastData']['project'] === options.data.project) { + return this._collection; + } else { + return this._handleRequestResources(options); + } + } catch (e) { + console.debug(e); + return this._handleRequestResources(options); + } + } + + /** + * Handle request Resources. + */ + _handleRequestResources(options) + { + this._collection = new ResourceCollection(); + this._collection.fetch(options); + return this._collection; + } + + /** + * Handle request for Resource viewer. + */ + _handleRequestViewer(options) + { + var ajaxOptions = { + url: options.resource.get('url') + 'acquire/', + type: 'POST', + dataType: 'json', + success: (response) => this._handleSuccessAcquire(response) + }; + $.ajax(ajaxOptions); + } + + _handleRequestUpdateLabels() + { + let resources = this._collection; + resources.forEach(resource => { + resource._updateResourceLabelsFull(); + }); + } + + /** + * Handle acquire success. + */ + _handleSuccessAcquire(response) + { + window.open(response.working_url, '', '_blank'); + } + + /** + * Handle create success. + */ + _handleCreateSuccess(resource, collection) + { + collection.add(resource); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_CREATED, {resource: resource}); + } + + /** + * Handle delete success. + */ + _handleDeleteSuccess(model, collection) + { + collection.remove(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_DELETED, {resource: model}); + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABELS_LOAD, {}); + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerResourceList.js b/rodan-client/code/src/js/Controllers/ControllerResourceList.js new file mode 100755 index 000000000..93fe99090 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerResourceList.js @@ -0,0 +1,208 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import LayoutViewResourceAssignment from 'js/Views/Master/Main/ResourceAssignment/LayoutViewResourceAssignment'; +import Radio from 'backbone.radio'; +import ResourceCollection from 'js/Collections/ResourceCollection'; +import ResourceList from 'js/Models/ResourceList'; +import ResourceListCollection from 'js/Collections/ResourceListCollection'; +import ViewResourceCollectionModal from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModal'; +import ViewResourceList from 'js/Views/Master/Main/ResourceList/Individual/ViewResourceList'; +import ViewResourceListCollection from 'js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollection'; +import ViewResourceListCollectionItem from 'js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollectionItem'; + +/** + * Controller for ResourceLists. + */ +export default class ControllerResourceList extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + // Events + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED, options => this._handleEventItemSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_CREATED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_DELETED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_SAVED, options => this._handleSuccessGeneric(options)); + + // Requests + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_ADD_RESOURCE, options => this._handleRequestAddResource(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_CREATE, options => this._handleRequestResourceListCreate(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_DELETE, options => this._handleCommandResourceListDelete(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_DOWNLOAD, options => this._handleRequestResourceListDownload(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_REMOVE_RESOURCE, options => this._handleRequestRemoveResource(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_SAVE, options => this._handleCommandResourceListSave(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELIST_SHOW_RESOURCEASSIGNMENT_VIEW, options => this._handleRequestShowResourceAssignmentView(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RESOURCELISTS_LOAD, options => this._handleRequestLoad(options)); + } + + /** + * Handle show LayoutView. + */ + /* _handleCommandShowLayoutView(options) + { + this._layoutView = options.layoutView; + }*/ + + /** + * Handle request add Resource. + */ + _handleRequestAddResource(options) + { + debugger; + } + + /** + * Handle request remove Resource. + */ + _handleRequestRemoveResource(options) + { + debugger; + } + + /** + * Handle request show Resource assignment view. + */ + _handleRequestShowResourceAssignmentView(options) + { + // Get ResourceType (if it exists). + var resourceTypeId = null; + var globalResourceTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + if (options.resourcelist.has('resource_type')) + { + resourceTypeId = globalResourceTypes.findWhere({url: options.resourcelist.get('resource_type')}).id; + } + + // Get available Resources. + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + var data = {project: project.id, resource_type: null}; + var availableResources = new ResourceCollection(); + availableResources.fetch({data: data}); + + // Get Collections. + // Issue #113: https://github.com/DDMAL/rodan-client/issues/113 + // What's the best way to get Resource objects for a ResourceList. + var assignedResources = new ResourceCollection(); + + // Create views. + var assignedResourceView = new ViewResourceCollectionModal({collection: assignedResources, + childViewOptions: {assigned: true, + requestdata: {resourcelist: options.resourcelist}, + assignrequest: RODAN_EVENTS.REQUEST__RESOURCELIST_ADD_RESOURCE, + unassignrequest: RODAN_EVENTS.REQUEST__RESOURCELIST_REMOVE_RESOURCE}}); + var resourceListView = new ViewResourceCollectionModal({collection: availableResources, + childViewOptions: {assigned: false, + requestdata: {resourcelist: options.resourcelist}, + assignrequest: RODAN_EVENTS.REQUEST__RESOURCELIST_ADD_RESOURCE, + unassignrequest: RODAN_EVENTS.REQUEST__RESOURCELIST_REMOVE_RESOURCE}}); + + // Show the layout view. + var view = new LayoutViewResourceAssignment({viewavailableresources: resourceListView, viewassignedresources: assignedResourceView}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Resource List'}); + } + + /** + * Handle collection selection. + */ + _handleEventCollectionSelected(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELISTS_LOAD, {data: {project: options.project.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [this._collection]}); + this._layoutView = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._layoutView}); + var view = new ViewResourceListCollection({collection: this._collection, + template: _.template($('#template-main_resourcelist_collection').text()), + childView: ViewResourceListCollectionItem, + model: options.project}); + this._layoutView.showCollection(view); + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + this._layoutView.showItem(new ViewResourceList({model: options.resourcelist})); + } + + /** + * Handle command add Resource. + */ + _handleRequestResourceListCreate(options) + { + var resourceList = new ResourceList({project: options.project.get('url'), name: 'untitled'}); + resourceList.save({}, {success: (model) => this._handleCreateSuccess(model, this._collection)}); + } + + /** + * Handle command delete ResourceList. + */ + _handleCommandResourceListDelete(options) + { + this._layoutView.clearItemView(); + options.resourcelist.destroy({success: (model) => this._handleDeleteSuccess(model, this._collection)}); + } + + /** + * Handle command download ResourceList. + */ + _handleRequestResourceListDownload(options) + { + //var mimetype = options.resource.get('resource_type_full').mimetype; + //var ext = options.resource.get('resource_type_full').extension; +// var filename = options.resource.get('name') + '.zip'; + // Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_DOWNLOAD, {url: options.resource.get('download'), filename: filename, mimetype: mimetype}); + } + + /** + * Handle command save Resource. + */ + _handleCommandResourceListSave(options) + { + options.resourcelist.save(options.fields, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_SAVED, {resourcelist: model})}); + } + + /** + * Handle request load. + */ + _handleRequestLoad(options) + { + this._collection = new ResourceListCollection(); + this._collection.fetch(options); + return this._collection; + } + + /** + * Handle create success. + */ + _handleCreateSuccess(model, collection) + { + collection.add(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_CREATED, {resourcelist: model}); + } + + /** + * Handle delete success. + */ + _handleDeleteSuccess(model, collection) + { + collection.remove(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_DELETED, {resourcelist: model}); + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerRunJob.js b/rodan-client/code/src/js/Controllers/ControllerRunJob.js new file mode 100755 index 000000000..df092e119 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerRunJob.js @@ -0,0 +1,194 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseController from './BaseController'; +import Configuration from 'js/Configuration'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import Radio from 'backbone.radio'; +import RunJobCollection from 'js/Collections/RunJobCollection'; +import ViewRunJob from 'js/Views/Master/Main/RunJob/Individual/ViewRunJob'; +import ViewRunJobCollection from 'js/Views/Master/Main/RunJob/Collection/ViewRunJobCollection'; +import ViewRunJobCollectionItem from 'js/Views/Master/Main/RunJob/Collection/ViewRunJobCollectionItem'; + +/** + * Controller for RunJobs. + */ +export default class ControllerRunJob extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this._runJobLocks = {}; + // setInterval(() => this._reacquire(), Configuration.RUNJOB_ACQUIRE_INTERVAL); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RUNJOB_SHOWLAYOUTVIEW, options => this._handleCommandShowLayoutView(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RUNJOB_SELECTED, options => this._handleEventItemSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RUNJOB_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RUNJOB_ACQUIRE, options => this._handleRequestAcquire(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__RUNJOBS_LOAD, options => this._handleRequestRunJobs(options)); + } + + /** + * Handle show LayoutView. + */ + _handleCommandShowLayoutView(options) + { + this._layoutView = options.layoutView; + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + this._layoutView.showItem(new ViewRunJob({model: options.runjob})); + } + + /** + * Handle event collection selected. + */ + _handleEventCollectionSelected(options) + { + this._collection = new RunJobCollection(); + this._collection.fetch({data: {project: options.project.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [this._collection]}); + this._layoutView = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._layoutView}); + var view = new ViewRunJobCollection({collection: this._collection, + template: _.template($('#template-main_runjob_collection').text()), + childView: ViewRunJobCollectionItem}); + this._layoutView.showCollection(view); + } + + /** + * Handle request acquire. + */ + _handleRequestAcquire(options) + { + // Get lock if available. Else, if we already have the lock, simply open the interface. + var user = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_USER); + var runJobUrl = options.runjob.get('url'); + if (options.runjob.available()) + { + var ajaxSettings = { + url: options.runjob.get('interactive_acquire'), + type: 'POST', + dataType: 'json', + success: (response) => this._handleSuccessAcquire(response, runJobUrl, options.runjob), + error: () => this._removeRunJobLock(runJobUrl) + }; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, {settings: ajaxSettings}); + } + else if (options.runjob.get('working_user') === user.get('url')) + { + var url = this._getWorkingUrl(runJobUrl); + this._openRunJobInterface(url); + } + } + + /** + * Handle success of interactive acquire. + */ + _handleSuccessAcquire(response, runJobUrl, runJob) + { +// this._registerRunJobForReacquire(runJobUrl, response.working_url, runJob.get('interactive_acquire')); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RUNJOB_ACQUIRED, {runjob: runJob}); + this._openRunJobInterface(response.working_url); + } + + /** + * Opens interface. + */ + _openRunJobInterface(url) + { + window.open(url, '', '_blank'); + } + + /** + * Registers an interactive job to be relocked. + */ + _registerRunJobForReacquire(runJobUrl, workingUrl, acquireUrl) + { + var date = new Date(); + this._runJobLocks[runJobUrl] = {date: date.getTime(), working_url: workingUrl, acquire_url: acquireUrl}; + } + + /** + * Get working URL for acquired RunJob. + */ + _getWorkingUrl(runJobUrl) + { + var object = this._runJobLocks[runJobUrl]; + if (object) + { + return object.working_url; + } + return null; + } + + /** + * Handle reacquire callback. + */ + _reacquire() + { + var date = new Date(); + for (var runJobUrl in this._runJobLocks) + { + var runJob = this._collection.findWhere({url: runJobUrl}); + + // If the RunJob is available, renew. Else, get rid of the lock. + if (runJob.available()) + { + var data = this._runJobLocks[runJobUrl]; + if (data) + { + var timeElapsed = date.getTime() - data.date; + if (timeElapsed < Configuration.RUNJOB_ACQUIRE_DURATION) + { + $.ajax({url: data.acquire_url, type: 'POST', dataType: 'json', error: () => this._removeRunJobLock(runJobUrl)}); + } + else + { + this._removeRunJobLock(runJobUrl); + } + } + } + else + { + this._removeRunJobLock(runJobUrl); + } + } + } + + /** + * Remove RunJob lock. + */ + _removeRunJobLock(runJobUrl) + { + this._runJobLocks[runJobUrl] = null; + } + + /** + * Handle request RunJobs. + */ + _handleRequestRunJobs(options) + { + this._collection = new RunJobCollection(); + this._collection.fetch(options); + return this._collection; + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerServer.js b/rodan-client/code/src/js/Controllers/ControllerServer.js new file mode 100755 index 000000000..189058a66 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerServer.js @@ -0,0 +1,366 @@ +import $ from 'jquery'; +import Backbone from 'backbone'; +import BaseController from 'js/Controllers/BaseController'; +import Configuration from 'js/Configuration'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +var oldsync = Backbone.sync; +Backbone.sync = function(method, model, options) { 'use strict'; return oldsync(method, model, options); }; + +/** + * Server controller. + */ +export default class ControllerServer extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this._serverDate = null; + this._server = null; + this._originalSync = Backbone.sync; + this._responseTimeout = null; + this._responsePanic = null; + this._waitingEventTriggered = false; + this._pendingRequests = 0; + Backbone.sync = (method, model, options) => this._sync(method, model, options); + } + + /** + * AJAX prefilter associated with server control. + * + * This will count the pending responses and set timeouts. + * + * @param {object} options object.beforeSend (optional) is a function that takes in the XmlHTTPRequest before sending; this may be useful for doing pre-processing of AJAX requests + */ + ajaxPrefilter(options) + { + var that = this; + var oldOnBeforeSend = options.beforeSend; + options.beforeSend = function (xhr) + { + if (oldOnBeforeSend) + { + oldOnBeforeSend(xhr); + } + + // Set a timeout for x seconds. + if (that._responseTimeout === null) + { + that._responseTimeout = setTimeout(() => that._sendWaitingNotification(), Configuration.SERVER_WAIT_TIMER); + } + + // Set a timeout for panic. + if (that._responsePanic === null) + { + that._responsePanic = setTimeout(() => that._sendPanicNotification(), Configuration.SERVER_PANIC_TIMER); + } + + // Increment pending requests. + that._pendingRequests++; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_REQUESTS_PENDING_UPDATE, {pending: that._pendingRequests}); + }; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Sends dummy request to get server time. + */ + _sendTimeGetterRequest() + { + var request = new XMLHttpRequest(); + request.open('HEAD', Configuration.getServerURL()); + request.onreadystatechange = (event) => this._handleTimeRequest(event); + request.setRequestHeader('Content-Type', 'text/html'); + request.send(''); + } + + /** + * Sync override. We do this to add handlers. + */ + _sync(method, model, options) + { + options = this._applyAJAXResponseHandlers(options); + return this._originalSync(method, model, options); + } + + /** + * Event bindings. + */ + _initializeRadio() + { + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_CONFIGURATION, () => this._handleRequestConfiguration()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_DATE, () => this._handleRequestDate()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_LOAD_ROUTES, () => this._getRoutes()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_LOAD_ROUTE_OPTIONS, () => this._handleGetRouteOptions()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_GET_ROUTE, routeName => this._handleRequestServerRoute(routeName)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_GET_ROUTE_OPTIONS, options => this._handleRequestServerRouteOptions(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_GET_HOSTNAME, () => this._handleRequestServerHostname()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_GET_VERSION, () => this._handleRequestServerVersionRodan()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SERVER_REQUEST_AJAX, (options) => this._handleRequestAjax(options)); + } + + /** + * Return server config. + */ + _handleRequestConfiguration() + { + return this._server.configuration; + } + + /** + * Return server date. + */ + _handleRequestDate() + { + return this._serverDate; + } + + /** + * Returns associated route. + */ + _handleRequestServerRoute(routeName) + { + return this._server.routes[routeName].url; + } + + /** + * Returns associated route options. + */ + _handleRequestServerRouteOptions(options) + { + return this._server.routes[options.route].options; + } + + /** + * Returns server hostname. + */ + _handleRequestServerHostname() + { + return Configuration.SERVER_HOST; + } + + /** + * Returns server version - Rodan. + */ + _handleRequestServerVersionRodan() + { + return this._server.version; + } + + /* + * Fetches the routes from the Rodan server. This is the first function to be called in the + * Rodan loading process. It hits the root endpoint on the Rodan server and from there downloads + * all of the path endpoints required to automatically configure the client application. + * */ + _getRoutes() + { + var routeRequest = new XMLHttpRequest(); + + // FYI: the use of the Fat arrow maps `this` to `ServerController`, not the request object. + routeRequest.onload = (event) => + { + if (routeRequest.responseText && routeRequest.status === 200) + { + this._server = JSON.parse(routeRequest.responseText); + for (var routeName in this._server.routes) + { + this._server.routes[routeName] = {url: this._server.routes[routeName]}; + } + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_ROUTESLOADED); + } + else + { + console.error('Routes could not be loaded from the server.'); + console.error(event); + } + }; + + routeRequest.open('GET', Configuration.getServerURL(), true); + routeRequest.setRequestHeader('Accept', 'application/json'); + routeRequest.send(); + } + + /** + * Fetches the OPTIONS (arguments for sorting, filtering, etc). + */ + _handleGetRouteOptions() + { + for (var key in this._server.routes) + { + // Skip routes that don't have any options. + if (Configuration.ROUTES_WITHOUT_OPTIONS.indexOf(key) >= 0) + { + continue; + } + + var ajaxSettings = {success: (result, status, xhr) => this._handleGetRouteOptionsSuccess(result, status, xhr), + type: 'OPTIONS', + url: this._server.routes[key].url, + dataType: 'json'}; + ajaxSettings = this._applyAJAXResponseHandlers(ajaxSettings); + var request = $.ajax(ajaxSettings); + request.key = key; + } + } + + /** + * Handle get route options success. + */ + _handleGetRouteOptionsSuccess(result, status, xhr) + { + this._server.routes[xhr.key].options = result; + } + + /** + * Apply success/error AJAX handlers to HTTP request. + */ + _applyAJAXResponseHandlers(options) + { + var genericResponseFunction = (result, status, xhr) => this._handleAJAXResponse(result, status, xhr); + + // Success. + if (!options.hasOwnProperty('success')) + { + options.success = genericResponseFunction; + } + else + { + var customSuccessFunction = options.success; + options.success = function(result, status, xhr) + { + customSuccessFunction(result, status, xhr); + genericResponseFunction(result, status, xhr); + }; + } + + // Error + if (!options.hasOwnProperty('error')) + { + options.error = genericResponseFunction; + } + else + { + var customErrorFunction = options.error; + options.error = function(result, status, xhr) + { + customErrorFunction(result, status, xhr); + genericResponseFunction(result, status, xhr); + }; + } + + return options; + } + + /** + * Handle AJAX response (generic). + */ + _handleAJAXResponse(result, status, xhr) + { + // Decrement the pending requests. + this._pendingRequests--; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_REQUESTS_PENDING_UPDATE, {pending: this._pendingRequests}); + + if (document.readyState === 'complete' && this._pendingRequests === 0) + { + clearTimeout(this._responseTimeout); + clearTimeout(this._responsePanic); + this._responseTimeout = null; + this._responsePanic = null; + if (this._waitingEventTriggered) + { + this._sendIdleNotification(); + } + } + else if (this._waitingEventTriggered) + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_WAITING, {pending: this._pendingRequests}); + } + + // Get the time. + if (xhr.getResponseHeader) + { + var dateResponse = new Date(xhr.getResponseHeader('Date')); + if (this._serverDate === null || this._serverDate.getTime() < dateResponse.getTime()) + { + this._updateServerDate(dateResponse); + clearInterval(this._timeGetterInterval); + this._timeGetterInterval = null; + } + } + + // Set Date getter interval. + if (!this._timeGetterInterval) + { + this._timeGetterInterval = setInterval(() => this._sendTimeGetterRequest(), Configuration.SERVER_REQUEST_TIME_INTERVAL); + } + } + + + /** + * Sends a notification that queries are still pending. + */ + _sendWaitingNotification() + { + this._waitingEventTriggered = true; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_WAITING, {pending: this._pendingRequests}); + } + + /** + * Send idle notification. + */ + _sendIdleNotification() + { + this._waitingEventTriggered = false; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_IDLE); + } + + /** + * Sends a panic notification + */ + _sendPanicNotification() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_PANIC); + } + + /** + * Handle time getter request response. + */ + _handleTimeRequest(event) + { + var request = event.currentTarget; + if (request && request.getResponseHeader('Date')) + { + var dateResponse = new Date(request.getResponseHeader('Date')); + if (this._serverDate === null || this._serverDate.getTime() < dateResponse.getTime()) + { + this._updateServerDate(dateResponse); + } + } + } + + /** + * Updates recorded server date. + */ + _updateServerDate(date) + { + this._serverDate = date; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_DATE_UPDATED, {date: this._serverDate}); + } + + /** + * Requests custom AJAX request. + */ + _handleRequestAjax(options) + { + var ajaxSettings = this._applyAJAXResponseHandlers(options.settings); + $.ajax(ajaxSettings); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerUserPreference.js b/rodan-client/code/src/js/Controllers/ControllerUserPreference.js new file mode 100755 index 000000000..de3a3c045 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerUserPreference.js @@ -0,0 +1,87 @@ +import $ from 'jquery'; +import BaseController from 'js/Controllers/BaseController'; +import Configuration from 'js/Configuration'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import UserPreference from 'js/Models/UserPreference'; +import UserPreferenceCollection from 'js/Collections/UserPreferenceCollection'; + +/** + * UserPreference controller. + */ +export default class ControllerUserPreference extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + /** @ignore */ + this._userPreference = null; + /** @ignore */ + this._collection = new UserPreferenceCollection(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Event bindings. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGIN_SUCCESS, (options) => this._handleEventAuthenticationSuccess(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__USER_PREFERENCE, (options) => this._handleRequestUserPreference(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__USER_PREFERENCE_SAVE, (options) => this._handleRequestUserPreferenceSave(options)); + } + + /** + * Handle authentication success. + */ + _handleEventAuthenticationSuccess(options) + { + this._collection.fetch({data: {user: options.user.id}, success: () => this._handleAjaxLoadUserPreference(options.user)}); + } + + /** + * Handle loading of user preference. If DNE, will automatically create it. + */ + _handleAjaxLoadUserPreference(user) + { + // @todo - see https://github.com/DDMAL/Rodan/issues/460 + var userPreference = this._collection.findWhere({user: user.get('url')}); + if (!userPreference) + { + this._userPreference = new UserPreference({user: user.get('url')}); + this._userPreference.save(); + } + else + { + this._userPreference = userPreference; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__USER_PREFERENCE_LOADED, {user_preference: this._userPreference}); + } + } + + /** + * Handle request user preference. + */ + _handleRequestUserPreference() + { + return this._userPreference; + } + + /** + * Handle request UserPreference save. + */ + _handleRequestUserPreferenceSave(options) + { + if (!$.isEmptyObject(options.user_preference.changed)) + { + options.user_preference.save(options.user_preference.changed, + {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__USER_PREFERENCE_SAVED, {user_preference: options.user_preference})}); + } + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerWorkflow.js b/rodan-client/code/src/js/Controllers/ControllerWorkflow.js new file mode 100755 index 000000000..67252df73 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerWorkflow.js @@ -0,0 +1,185 @@ +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import Radio from 'backbone.radio'; +import ViewWorkflow from 'js/Views/Master/Main/Workflow/Individual/ViewWorkflow'; +import ViewWorkflowCollection from 'js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollection'; +import Workflow from 'js/Models/Workflow'; +import WorkflowCollection from 'js/Collections/WorkflowCollection'; + +/** + * Controller for Workflows. + */ +export default class ControllerWorkflow extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Initialization +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + // Events. + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED, options => this._handleEventItemSelected(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_CREATED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_DELETED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_SAVED, options => this._handleSuccessGeneric(options)); + + // Requests. + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOW_SAVE, options => this._handleRequestSaveWorkflow(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOW_DELETE, options => this._handleCommandDeleteWorkflow(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOW_IMPORT, options => this._handleCommandImportWorkflow(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOW_CREATE, options => this._handleCommandAddWorkflow(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOW_EXPORT, options => this._handleCommandExportWorkflow(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle collection selection. + */ + _handleEventCollectionSelected(options) + { + this._collection = new WorkflowCollection(); + this._collection.fetch({data: {project: options.project.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [this._collection]}); + this._layoutView = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._layoutView}); + this._viewCollection = new ViewWorkflowCollection({collection: this._collection}); + this._layoutView.showCollection(this._viewCollection); + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + this._viewItem = new ViewWorkflow({model: options.workflow}); + this._layoutView.showItem(this._viewItem); + } + + /** + * Handle command delete workflow. + */ + _handleCommandDeleteWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Workflow', content: 'Please wait...'}); + // Clear the individual view (if there). + if (this._viewItem !== null && options.workflow === this._viewItem.model) + { + this._layoutView.clearItemView(); + } + options.workflow.destroy({success: (model) => this._handleDeleteSuccess(model, this._collection)}); + } + + /** + * Handle command add workflow. + */ + _handleCommandAddWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Creating Workflow', content: 'Please wait...'}); + var workflow = new Workflow({project: options.project.get('url'), name: 'untitled'}); + workflow.save({}, {success: (model) => this._handleCreateSuccess(model, this._collection)}); + } + + /** + * Handle save workflow. + */ + _handleRequestSaveWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Workflow', content: 'Please wait...'}); + options.workflow.save(options.fields, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_SAVED, {workflow: model})}); + } + + /** + * Handle export workflow. + */ + _handleCommandExportWorkflow(options) + { + options.workflow.sync('read', options.workflow, {data: {export: true}, success: (result) => this._handleExportSuccess(result, options.workflow)}); + } + + /** + * Handle import workflow. + */ + _handleCommandImportWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Importing Workflow', content: 'Please wait...'}); + var fileReader = new FileReader(); + fileReader.onerror = (event) => this._handleFileReaderError(event); + fileReader.onload = (event) => this._handleFileReaderLoaded(event, options.project); + fileReader.readAsText(options.file); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - FileReader handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle FileReader error. + */ + _handleFileReaderError(event) + { + // TODO error + console.error(event); + } + + /** + * Handle FileReader loaded. + */ + _handleFileReaderLoaded(event, project) + { + var workflow = new Workflow({project: project.get('url'), serialized: JSON.parse(event.target.result)}); + workflow.save({}, {success: (model) => this._handleImportSuccess(model, this._collection)}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - REST handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle create success. + */ + _handleCreateSuccess(model, collection) + { + collection.add(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_CREATED, {workflow: model}); + } + + /** + * Handle delete success. + */ + _handleDeleteSuccess(model, collection) + { + collection.remove(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_DELETED, {workflow: model}); + } + + /** + * Handle export success. + */ + _handleExportSuccess(result, model) + { + var data = JSON.stringify(result); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__DOWNLOAD_START, {data: data, filename: model.get('name'), mimetype: 'application/json'}); + } + + /** + * Handle import success. + */ + _handleImportSuccess(model, collection) + { + collection.add(model, {}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_CREATED, {workflow: model}); + //Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: model}); + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerWorkflowBuilder.js b/rodan-client/code/src/js/Controllers/ControllerWorkflowBuilder.js new file mode 100755 index 000000000..c7cddf7b8 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerWorkflowBuilder.js @@ -0,0 +1,942 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseCollection from 'js/Collections/BaseCollection'; +import BaseController from './BaseController'; +import Configuration from 'js/Configuration'; +import Connection from 'js/Models/Connection'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import InputPort from 'js/Models/InputPort'; +import ViewControlWorkflowJob from 'js/Views/Master/Main/WorkflowJob/ViewControlWorkflowJob'; +import JobCollection from 'js/Collections/JobCollection'; +import LayoutViewControlPorts from 'js/Views/Master/Main/WorkflowJob/LayoutViewControlPorts'; +import LayoutViewResourceAssignment from 'js/Views/Master/Main/ResourceAssignment/LayoutViewResourceAssignment'; +import OutputPort from 'js/Models/OutputPort'; +import Radio from 'backbone.radio'; +import Resource from 'js/Models/Resource'; +import ResourceCollection from 'js/Collections/ResourceCollection'; +import ResourceList from 'js/Models/ResourceList'; +import ViewJobCollection from 'js/Views/Master/Main/Job/Collection/ViewJobCollection'; +import ViewResourceCollectionModal from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModal'; +import ViewResourceCollectionModalItem from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItem'; +import ViewResourceCollectionModalItemAssigned from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItemAssigned'; +import ViewWorkflow from 'js/Views/Master/Main/Workflow/Individual/ViewWorkflow'; +import ViewWorkflowCollection from 'js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollection'; +import ViewWorkflowCollectionImportItem from 'js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionImportItem'; +import WorkflowCollection from 'js/Collections/WorkflowCollection'; +import ViewWorkflowJobGroup from 'js/Views/Master/Main/WorkflowJobGroup/ViewWorkflowJobGroup'; +import ViewSettings from 'js/Views/Master/Main/WorkflowJob/ViewSettings'; + +/** + * Controller for the WorkflowBuilder. + */ +export default class ControllerWorkflowBuilder extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializer. + */ + initialize() + { + this._resourceAssignments = []; // this helps manage the list of resource assignments while building the resource + this._resourcesAvailable = []; // this is just a cache for resources that will work with a given input port + this._workflowRunOptions = {}; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_LOADED_WORKFLOW, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_SELECTED, options => this._handleEventBuilderSelected(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SET_ADDPORTS, options => this._handleRequestSetAddPorts(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_CONNECTION, options => this._handleCommandAddConnection(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_INPUTPORT, options => this._handleCommandAddInputPort(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_OUTPUTPORT, options => this._handleCommandAddOutputPort(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOB, options => this._handleRequestAddWorkflowJob(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOBGROUP, options => this._handleRequestAddWorkflowJobGroup(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGN_RESOURCE, options => this._handleRequestAssignResource(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_UP, options => this._handleMoveUpAssignedResource(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_DOWN, options => this._handleMoveDownAssignedResource(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN, options => this._handleRequestCreateWorkflowRun(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_DISTRIBUTOR, options => this._handleRequestCreateDistributor(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_CONNECTION, options => this._handleRequestDeleteConnection(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_INPUTPORT, options => this._handleCommandDeleteInputPort(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_OUTPUTPORT, options => this._handleCommandDeleteOutputPort(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB, options => this._handleRequestDeleteWorkflowJob(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOBGROUP, options => this._handleRequestDeleteWorkflowJobGroup(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_GET_RESOURCEASSIGNMENTS, options => this._handleRequestGetResourceAssignments(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_IMPORT_WORKFLOW, options => this._handleRequestImportWorkflow(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_LOAD_WORKFLOW, options => this._handleEventLoadWorkflow(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_JOBCOLLECTION_VIEW, options => this._handleRequestShowJobCollectionView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_RESOURCEASSIGNMENT_VIEW, options => this._handleRequestShowResourceAssignmentView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWCOLLECTION_VIEW, options => this._handleRequestShowWorkflowCollectionView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOW_VIEW, options => this._handleRequestShowWorkflowView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_VIEW, options => this._handleRequestShowWorkflowJobView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_PORTS_VIEW, options => this._handleRequestShowWorkflowJobPortsView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_SETTINGS_VIEW, options => this._handleRequestShowWorkflowJobSettingsView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOBGROUP_VIEW, options => this._handleRequestShowWorkflowJobGroupView(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNASSIGN_RESOURCE, options => this._handleRequestUnassignResource(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNGROUP_WORKFLOWJOBGROUP, options => this._handleRequestWorkflowJobGroupUngroup(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, options => this._handleRequestValidateWorkflow(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_GET_SATISFYING_INPUTPORTS, options => this._handleRequestGetSatisfyingInputPorts(options), this); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle selection. + */ + _handleEventBuilderSelected(options) + { + this._resourceAssignments = []; + this._resourcesAvailable = []; + this._addPorts = true; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_LOAD_WORKFLOW, {'workflow': options.workflow}); + } + + /** + * Handle request set add ports. + */ + _handleRequestSetAddPorts(options) + { + this._addPorts = options.addports; + } + + /** + * Handle request create WorkflowRun. + */ + _handleRequestCreateWorkflowRun(options) + { + this._workflowRunOptions = {workflow: options.workflow, assignments: {}}; + var inputPortTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_INPUTPORTTYPE_COLLECTION); + var knownInputPorts = this._workflowRunOptions.workflow.get('workflow_input_ports').clone(); + for (var inputPortUrl in this._resourceAssignments) + { + // If our assignments for an InputPort are not needed, we just skip it. + var inputPort = knownInputPorts.findWhere({url: inputPortUrl}); + if (!inputPort) + { + continue; + } + + // If there is nothing for a given InputPort, error. + this._workflowRunOptions.assignments[inputPortUrl] = []; + var collection = this._getResourceAssignments(inputPortUrl); + if (collection.length === 0) + { + console.error('TODO ERROR'); + return; + } + + // Get URLs. + var resourceUrls = []; + for (var i = 0; i < collection.length; i++) + { + var resource = collection.at(i); + resourceUrls.push(resource.get('url')); + } + + // If the InputPort requires a ResourceList, we'll have to create one. + // Else, just get the Resource URLs. + var inputPortType = inputPortTypes.findWhere({url: inputPort.get('input_port_type')}); + if (inputPortType.get('is_list')) + { + var resource = collection.at(0); + var resourceType = resource.get('resource_type'); + var resourceList = new ResourceList(); + resourceList.set({resources: resourceUrls, resource_type: resourceType}); + this._workflowRunOptions.assignments[inputPortUrl] = resourceList; + } + else + { + this._workflowRunOptions.assignments[inputPortUrl] = resourceUrls; + } + + // Finally, remove the InputPort from the cloned Collection. + knownInputPorts.remove(inputPort); + } + + // If we have anything left oveer in our cloned Collection, something is wrong. + if (knownInputPorts.length > 0) + { + console.error('TODO ERROR'); + } + else + { + this._attemptWorkflowRunCreation(); + } + } + + /** + * Handle request show Resource assignment view. + */ + _handleRequestShowResourceAssignmentView(options) + { + // Create views. + var inputPort = options.inputport; + var assignedResources = this._getResourceAssignments(inputPort.get('url')); + var availableResources = this._getResourcesAvailable(inputPort); + var assignedResourceView = new ViewResourceCollectionModal({collection: assignedResources, + childView: ViewResourceCollectionModalItemAssigned, + childViewOptions: {requestdata: {workflow: options.workflow, inputport: inputPort}, + moveup: RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_UP, + movedown: RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_DOWN, + unassignrequest: RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNASSIGN_RESOURCE}}); + var resourceListView = new ViewResourceCollectionModal({collection: availableResources, + childView: ViewResourceCollectionModalItem, + childViewOptions: {assigned: false, + requestdata: {workflow: options.workflow, inputport: inputPort}, + assignrequest: RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ASSIGN_RESOURCE, + unassignrequest: RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNASSIGN_RESOURCE}}); + + // Show the layout view. + var view = new LayoutViewResourceAssignment({viewavailableresources: resourceListView, viewassignedresources: assignedResourceView}); + let title = inputPort.get('label').length > 0 ? inputPort.get('label') : ''; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Input Port: ' + title}); + } + + /** + * Handles success of workflow fetch. + */ + _handleWorkflowLoadSuccess(workflow) + { + this._processWorkflow(workflow); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_LOADED_WORKFLOW, {workflow: workflow}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle request add workflow job. + */ + _handleRequestAddWorkflowJob(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOB_CREATE, {job: options.job, workflow: options.workflow, addports: this._addPorts}); + Radio.channel('rodan').once(RODAN_EVENTS.EVENT__WORKFLOWJOB_CREATED, + () => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: options.workflow})); + } + + /** + * Handle command delete WorkflowJob. + */ + _handleRequestDeleteWorkflowJob(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOB_DELETE, {workflowjob: options.workflowjob, workflow: options.workflow}); + Radio.channel('rodan').once(RODAN_EVENTS.EVENT__WORKFLOWJOB_DELETED, + () => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: options.workflow})); + } + + /** + * Handle command delete WorkflowJobGroup. + */ + _handleRequestDeleteWorkflowJobGroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_DELETE, {workflowjobgroup: options.workflowjobgroup, workflow: options.workflow}); + Radio.channel('rodan').once(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_DELETED, () => this._handleEventWorkflowJobGroupDelete(options.workflowjobgroup, options.workflow)); + } + + /** + * Handle request delete Connection. + */ + _handleRequestDeleteConnection(options) + { + options.connection.destroy({success: (model) => this._handleConnectionDeletionSuccess(options.connection, options.workflow)}); + } + + /** + * Handle request import Workflow. + */ + _handleRequestImportWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_IMPORT, {origin: options.origin, target: options.target}); + Radio.channel('rodan').once(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_IMPORTED, + () => Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_LOAD_WORKFLOW, {workflow: options.target})); + } + + /** + * Handle add connection. + */ + _handleCommandAddConnection(options) + { + this._createConnection(options.outputport, options.inputport, options.workflow); + } + + /** + * Create input port + */ + _handleCommandAddInputPort(options) + { + var port = new InputPort({input_port_type: options.inputporttype.get('url'), workflow_job: options.workflowjob.get('url')}); + port.save({}, {success: (model) => this._handleInputPortCreationSuccess(port, options.workflow, options.workflowjob)}); + } + + /** + * Create output port + */ + _handleCommandAddOutputPort(options) + { + var port = new OutputPort({output_port_type: options.outputporttype.get('url'), workflow_job: options.workflowjob.get('url')}); + port.save({}, {success: (model) => this._handleOutputPortCreationSuccess(port, options.workflow, options.workflowjob, options.targetinputports)}); + } + + /** + * Delete input port + */ + _handleCommandDeleteInputPort(options) + { + options.inputport.destroy({success: (model) => this._handleInputPortDeletionSuccess(model, options.workflow, options.workflowjob)}); + } + + /** + * Delete output port + */ + _handleCommandDeleteOutputPort(options) + { + options.outputport.destroy({success: (model) => this._handleOutputPortDeletionSuccess(model, options.workflow, options.workflowjob)}); + } + + /** + * Handle request load Workflow. + */ + _handleEventLoadWorkflow(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Loading Workflow', content: 'Please wait...'}); + options.workflow.fetch({'success': (workflow) => this._handleWorkflowLoadSuccess(workflow)}); + } + + /** + * Handle request validate Workflow. + */ + _handleRequestValidateWorkflow(options) + { + this._validateWorkflow(options.workflow); + } + + /** + * Handle request create distributor. + */ + _handleRequestCreateDistributor(options) + { + var requiredResourceTypes = this._getCompatibleResourceTypeURLs(options.inputports); + if (requiredResourceTypes.length > 0) + { + var jobs = this._getCandidateResourceDistributorJobs(requiredResourceTypes); + if (jobs.length > 0) + { + // TODO - offer list + var targetInputPorts = []; + for (var index in options.inputports) + { + var inputPort = options.inputports[index]; + targetInputPorts.push(options.workflow.get('workflow_input_ports').get(inputPort.id)); + } + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOB_CREATE, {job: jobs[0], + workflow: options.workflow, + addports: true, + targetinputports: targetInputPorts}); + } + } + } + + /** + * Handle request WorkflowJobGroup ungroup. + */ + _handleRequestWorkflowJobGroupUngroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_DELETE, {workflowjobgroup: options.workflowjobgroup, workflow: options.workflow}); + } + + /** + * Handle request add WorkflowJobGroup. + */ + _handleRequestAddWorkflowJobGroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_CREATE, {workflowjobs: options.workflowjobs, workflow: options.workflow}); + } + + /** + * Handle request assign Resource to InputPort. + */ + _handleRequestAssignResource(options) + { + var url = options.inputport.get('url'); + var resourcesAssigned = this._getResourceAssignments(url); + resourcesAssigned.add(options.resource); + } + + /** + * Handle request unassigne Resource from InputPort. + */ + _handleRequestUnassignResource(options) + { + var resourcesAssigned = this._getResourceAssignments(options.inputport.get('url')); + resourcesAssigned.remove(options.resource); + } + + /** + * Handle the moving up of an assigned resource. + */ + _handleMoveUpAssignedResource(options) + { + var url = options.inputport.get('url'); + var resourcesAssigned = this._getResourceAssignments(url); + var index1 = resourcesAssigned.indexOf(options.resource); + var index2 = Math.max(0, index1 - 1); + resourcesAssigned.swapItems(index1, index2); + } + + /** + * Handle the moving down of an assigned resource. + */ + _handleMoveDownAssignedResource(options) + { + var url = options.inputport.get('url'); + var resourcesAssigned = this._getResourceAssignments(url); + var index1 = resourcesAssigned.indexOf(options.resource); + var index2 = Math.min(index1 + 1, resourcesAssigned.length - 1); + resourcesAssigned.swapItems(index1, index2); + } + + /** + * Handle request get Resource assignments. + */ + _handleRequestGetResourceAssignments(options) + { + return this._getResourceAssignments(options.inputport.get('url')); + } + + /** + * Handle request get Workflow view. + */ + _handleRequestShowWorkflowView(options) + { + var view = new ViewWorkflow({template: _.template($('#template-main_workflow_individual_edit').text()), model: options.workflow}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Workflow'}); + } + + /** + * Handle request get WorkflowJob view. + */ + _handleRequestShowWorkflowJobView(options) + { + var view = new ViewControlWorkflowJob({model: options.workflowjob, workflow: options.workflow}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: options.workflowjob.get('name')}); + } + + /** + * Handle request show Job collection view. + */ + _handleRequestShowJobCollectionView(options) + { + var collection = new JobCollection(); + collection.fetch(); + var view = new ViewJobCollection({collection: collection, childViewOptions: {workflow: options.workflow}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Jobs'}); + } + + /** + * Handle request show Workflow collection view. + */ + _handleRequestShowWorkflowCollectionView(options) + { + var collection = new WorkflowCollection(); + collection.fetch({data: {/*project: project.id, */valid: 'True'}}); + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + var view = new ViewWorkflowCollection({collection: collection, + childView: ViewWorkflowCollectionImportItem, + template: _.template($('#template-main_workflow_collection_import').text()), + childViewOptions: {workflow: options.workflow}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Workflows'}); + } + + /** + * Handle request show WorkflowJobGroup view. + */ + _handleRequestShowWorkflowJobGroupView(options) + { + var view = new ViewWorkflowJobGroup({workflow: options.workflow, workflowjobgroup: options.workflowjobgroup}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'Workflow Job Group'}); + } + + /** + * Handle request show WorkflowJob ports view. + */ + _handleRequestShowWorkflowJobPortsView(options) + { + var view = new LayoutViewControlPorts(options); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'WorkflowJob Ports'}); + } + + /** + * Handle request show WorkflowJob settings view. + */ + _handleRequestShowWorkflowJobSettingsView(options) + { + var view = new ViewSettings({workflow: options.workflow, model: options.workflowjob}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {content: view, title: 'WorkflowJob Settings'}); + } + + /** + * Handle WorkflowJobGroup delete success. This will remove associated WorkflowJobs. + */ + _handleEventWorkflowJobGroupDelete(workflowJobGroup, workflow) + { + var workflowJobs = workflowJobGroup.get('workflow_jobs'); + for (var index in workflowJobs) + { + var workflowJob = workflow.get('workflow_jobs').findWhere({url: workflowJobs[index]}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB, {workflowjob: workflowJob, workflow: workflow}); + } + } + + /** + * Handle request get satisfying InputPorts. + */ + _handleRequestGetSatisfyingInputPorts(options) + { + var outputPort = options.outputport; + var workflow = options.workflow; + return this._getSatisfiableInputPorts(outputPort, workflow); + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - REST response handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle ResourceList creation success. + */ + _handleResourceListCreationSuccess(model, inputPortUrl) + { + this._workflowRunOptions.assignments[inputPortUrl] = [model.get('url')]; + this._attemptWorkflowRunCreation(); + } + + /** + * Handle ResourceList creation error. + */ + _handleResourceListCreationError() + { + // todo - need something here + } + + /** + * Handle InputPort creation success. + */ + _handleInputPortCreationSuccess(model, workflow, workflowJob) + { + workflow.get('workflow_input_ports').add(model); + workflowJob.get('input_ports').add(model); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle OutputPort creation success. + */ + _handleOutputPortCreationSuccess(model, workflow, workflowJob, targetInputPorts) + { + workflow.get('workflow_output_ports').add(model); + workflowJob.get('output_ports').add(model); + for (var index in targetInputPorts) + { + this._createConnection(model, targetInputPorts[index], workflow); + } + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handles success of Connection creation. + */ + _handleConnectionCreationSuccess(model, workflow, inputPort, outputPort) + { + workflow.get('connections').add(model); + inputPort.fetch(); // to get populated Connection array + outputPort.fetch(); // to get populated Connection array + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle InputPort deletion success. + */ + _handleInputPortDeletionSuccess(model, workflow, workflowJob) + { + workflowJob.get('input_ports').remove(model); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle OutputPort deletion success. + */ + _handleOutputPortDeletionSuccess(model, workflow, workflowJob) + { + workflowJob.get('output_ports').remove(model); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle Connection deletion success. + */ + _handleConnectionDeletionSuccess(model, workflow) + { + workflow.get('connections').remove(model); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + + /** + * Handle validation failure. + */ + _handleValidationFailure(model, response, options) + { + model.set({'valid': false}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_VALIDATED_WORKFLOW, {workflow: model}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Create connection. + */ + _createConnection(outputPort, inputPort, workflow) + { + var connection = new Connection({input_port: inputPort.get('url'), output_port: outputPort.get('url')}); + connection.save({}, {success: (model) => this._handleConnectionCreationSuccess(model, workflow, inputPort, outputPort)}); + } + + /** + * Process workflow for GUI. + */ + _processWorkflow(workflow) + { + // Process all WorkflowJobs and their associated ports. + var connections = {}; + var workflowJobs = workflow.get('workflow_jobs'); + if (workflowJobs !== undefined) + { + for (var i = 0; i < workflowJobs.length; i++) + { + // Create WorkflowJob item then process connections. + var workflowJob = workflowJobs.at(i); + var tempConnections = this._processWorkflowJob(workflowJob); + + // For the connections returned, merge them into our master list. + for (var connectionUrl in tempConnections) + { + var connection = tempConnections[connectionUrl]; + if (connections.hasOwnProperty(connectionUrl)) + { + connections[connectionUrl].inputPort = + connections[connectionUrl].inputPort === null ? connection.inputPort : connections[connectionUrl].inputPort; + connections[connectionUrl].outputPort = + connections[connectionUrl].outputPort === null ? connection.outputPort : connections[connectionUrl].outputPort; + } + else + { + connections[connectionUrl] = connection; + } + } + } + } + + // Process connections. + for (var connectionUrl in connections) + { + var connection = connections[connectionUrl]; + var connectionModel = new Connection({input_port: connection.inputPort.get('url'), + output_port: connection.outputPort.get('url'), + url: connectionUrl}); + + // TODO - better way to get connections? + var connectionId = connectionModel.parseIdFromUrl(connectionUrl); + connectionModel.set({uuid: connectionId}); + connectionModel.fetch(); + workflow.get('connections').add(connectionModel); + } + + // Finally inport the WorkflowJobGroups. + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_LOAD_COLLECTION, {workflow: workflow}); + } + + /** + * Process workflow job for GUI. + */ + _processWorkflowJob(model) + { + // We want to keep track of what connections need to be made and return those. + var connections = {}; + + // Process input ports. + var inputPorts = model.get('input_ports'); + if (inputPorts !== undefined) + { + for (var i = 0; i < inputPorts.length; i++) + { + var inputPort = inputPorts.at(i); + + // Get connections. + var inputPortConnections = inputPort.get('connections'); + for (var k = 0; k < inputPortConnections.length; k++) + { + var connection = inputPortConnections[k]; + connections[connection] = {'inputPort': inputPort, 'outputPort': null}; + } + } + } + + // Process output ports. + var outputPorts = model.get('output_ports'); + if (outputPorts !== undefined) + { + for (var j = 0; j < outputPorts.length; j++) + { + var outputPort = outputPorts.at(j); + + // Get connections. + var outputPortConnections = outputPort.get('connections'); + for (var k = 0; k < outputPortConnections.length; k++) + { + var connection = outputPortConnections[k]; + connections[connection] = {'inputPort': null, 'outputPort': outputPort}; + } + } + } + + return connections; + } + + /** + * Attempts to validate Workflow. + */ + _validateWorkflow(workflow) + { + workflow.save({valid: true}, {patch: true, + success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_VALIDATED_WORKFLOW, {workflow: model}), + error: (model, response, options) => this._handleValidationFailure(model, response, options)}); + } + + /** + * Given an array of InputPorts, returns an array of ResourceType URLs that + * would satisfy the InputPorts. + */ + _getCompatibleResourceTypeURLs(inputPorts) + { + var resourceTypes = []; + var inputPortTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_INPUTPORTTYPE_COLLECTION); + for (var index in inputPorts) + { + // Get the available resource types. + var inputPort = inputPorts[index]; + var inputPortTypeURL = inputPort.get('input_port_type'); + var inputPortType = inputPortTypes.findWhere({url: inputPortTypeURL}); + var inputPortResourceTypes = inputPortType.get('resource_types'); + + // If this is the first iteration, set the array. Else, do an intersection. + if (resourceTypes.length === 0) + { + resourceTypes = inputPortResourceTypes; + } + resourceTypes = _.intersection(resourceTypes, inputPortResourceTypes); + } + return resourceTypes; + } + + /** + * Given an OutputPort, returns an array of ResourceType URLs that would satisfy it. + */ + _getOutputPortResourceTypeURLs(outputPort) + { + var resourceTypes = []; + var outputPortTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_OUTPUTPORTTYPE_COLLECTION); + var outputPortTypeURL = outputPort.get('output_port_type'); + var outputPortType = outputPortTypes.findWhere({url: outputPortTypeURL}); + var outputPortResourceTypes = outputPortType.get('resource_types'); + return outputPortResourceTypes; + } + + /** + * Given an array of ResourceType URLs, finds jobs that both give at least one and take at least + * one of the ResourceTypes. The returned array {job: Job, inputporttypes: URL strings, outputporttypes: URL string}. + * The port types are those ports of the associated Job that will satisfy the resource requirements. + */ + _getCandidateResourceDistributorJobs(resourceTypes) + { + var jobs = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOB_COLLECTION).where({category: Configuration.RESOURCE_DISTRIBUTOR_CATEGORY}); + var satisfiableJobs = []; + for (var i = 0; i < jobs.length; i++) + { + var job = jobs[i]; + var inputPortType = job.get('input_port_types').at(0); + var outputPortType = job.get('output_port_types').at(0); + + // Intersect against InputPortType ResourceTypes. + var intersect = _.intersection(resourceTypes, inputPortType.get('resource_types')); + if (intersect.length === 0) + { + continue; + } + + intersect = _.intersection(resourceTypes, outputPortType.get('resource_types')); + if (intersect.length === 0) + { + continue; + } + + // We want to keep this job. + satisfiableJobs.push(job); + } + return satisfiableJobs; + } + + /** + * DEPRECATED + * Return InputPort URL that has multiple assignments. + * Returns null if DNE. + */ + _getInputPortURLWithMultipleAssignments() + { + for (var inputPortUrl in this._resourceAssignments) + { + var resourceAssignments = this._getResourceAssignments(inputPortUrl); + if (resourceAssignments.length > 1) + { + return inputPortUrl; + } + } + return null; + } + + /** + * Returns resource assignment for given InputPort url. + */ + _getResourceAssignments(inputPortUrl) + { + if (!this._resourceAssignments[inputPortUrl]) + { + this._resourceAssignments[inputPortUrl] = new BaseCollection(null, {model: Resource}); + } + return this._resourceAssignments[inputPortUrl]; + } + + /** + * Returns resources available for given InputPort. + */ + _getResourcesAvailable(inputPort) + { + if (!this._resourcesAvailable[inputPort.get('url')]) + { + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + var resourceTypeURLs = this._getCompatibleResourceTypeURLs([inputPort]); + var data = {project: project.id, resource_type__in: ''}; + var globalResourceTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + var first = true; + for (var index in resourceTypeURLs) + { + var idString = null; + if (first) + { + first = false; + idString = globalResourceTypes.findWhere({url: resourceTypeURLs[index]}).id; + } + else + { + idString = ',' + globalResourceTypes.findWhere({url: resourceTypeURLs[index]}).id; + } + data.resource_type__in = data.resource_type__in + idString; + } + this._resourcesAvailable[inputPort.get('url')] = new ResourceCollection(); + this._resourcesAvailable[inputPort.get('url')].fetch({data: data}); + } + this._resourcesAvailable[inputPort.get('url')].syncCollection(); + return this._resourcesAvailable[inputPort.get('url')]; + } + + /** + * Check WorkflowRun Resource assignments. + * + * This method checks if any Resource assignments are ResourceLists. + * If there are and the ResourceList has no ID, it saves the list and waits for a response. + * If it has an ID, it replaces the object with the URL for that ResourceList. + * If a reference is just to an array of REsource refs, it is ignored. + * + * If everything checks out create the WorkflowRun and return true. Else return false. + */ + _attemptWorkflowRunCreation() + { + for (var inputPortUrl in this._workflowRunOptions.assignments) + { + var assignments = this._workflowRunOptions.assignments[inputPortUrl]; + if (assignments instanceof ResourceList && !assignments.id) + { + // TODO - shitty way to do this; once I do a "save", I don't do another; this ensures that 'inputPortUrl' + // doesn't get set to the last one in the loop + assignments.save({}, {success: (model) => this._handleResourceListCreationSuccess(model, inputPortUrl), + error: () => this._handleResourceListCreationError()}); + return false; + } + } + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWRUN_CREATE, this._workflowRunOptions); + return true; + } + + /** + * Given a WorkflowJob, returns array of all InputPorts. + */ + _getInputPorts(workflowJobs) + { + var inputPorts = []; + for (var i = 0; i < workflowJobs.length; i++) + { + var workflowJob = workflowJobs[i]; + inputPorts.push(workflowJob.get('input_ports').models()); + } + return inputPorts; + } + + /** + * Given an OutputPort, return an array of those InputPort URLs that would be satisfied by the OutputPort. + */ + _getSatisfiableInputPorts(outputPort, workflow) + { + var outputPortResourceTypes = this._getOutputPortResourceTypeURLs(outputPort); + var inputPortTypes = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_INPUTPORTTYPE_COLLECTION); + var inputPorts = []; + var workflowJobs = workflow.get('workflow_jobs').models; + for (var i = 0; i < workflowJobs.length; i++) + { + // Get WorkflowJob. + var workflowJob = workflowJobs[i]; + if (workflowJob.get('url') === outputPort.get('workflow_job')) + { + continue; + } + + // For each InputPort, get ResourceType URL. + var possibleInputPorts = workflowJob.get('input_ports').models; + for (var j = 0; j < possibleInputPorts.length; j++) + { + var inputPort = possibleInputPorts[j]; + var inputPortType = inputPortTypes.findWhere({url: inputPort.get('input_port_type')}); + var inputPortResourceTypes = inputPortType.get('resource_types'); + var resourceTypes = _.intersection(outputPortResourceTypes, inputPortResourceTypes); + if (resourceTypes.length > 0) + { + inputPorts.push(inputPort.get('url')); + } + } + } + return inputPorts; + } +} diff --git a/rodan-client/code/src/js/Controllers/ControllerWorkflowJob.js b/rodan-client/code/src/js/Controllers/ControllerWorkflowJob.js new file mode 100755 index 000000000..f48a08ed7 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerWorkflowJob.js @@ -0,0 +1,149 @@ +import BaseController from 'js/Controllers/BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import WorkflowJob from 'js/Models/WorkflowJob'; + +/** + * Controller for WorkflowJobs. + */ +export default class ControllerWorkflowJob extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Initialization +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWJOB_DELETED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWJOB_SAVED, options => this._handleSuccessGeneric(options)); + + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOB_CREATE, options => this._handleRequestCreateWorkflowJob(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOB_DELETE, options => this._handleRequestDeleteWorkflowJob(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOB_SAVE, options => this._handleRequestSaveWorkflowJob(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Create WorkflowJob. + * + * If ports are to be automatically generated, we add a success function that adds them. + */ + _handleRequestCreateWorkflowJob(options) + { + var workflowJob = new WorkflowJob({job: options.job.get('url'), workflow: options.workflow.get('url')}); + var addPorts = options.addports ? options.addports : false; + var targetInputPorts = options.targetinputports ? options.targetinputports : []; + workflowJob.save({}, {success: (model) => this._handleWorkflowJobCreationSuccess(model, + options.workflow, + addPorts, + targetInputPorts)}); + } + + /** + * Delete WorkflowJob + */ + _handleRequestDeleteWorkflowJob(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Workflow Job', content: 'Please wait...'}); + options.workflowjob.destroy({success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOB_DELETED, {workflowjob: model})}); + } + + /** + * Handle save WorkflowJob. + */ + _handleRequestSaveWorkflowJob(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Workflow Job', content: 'Please wait...'}); + options.workflowjob.save(options.workflowjob.changed, {patch: true, success: (model) => this._handleWorkflowJobSaveSuccess(model, options.workflow)}); + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - REST handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle WorkflowJob creation success. + */ + _handleWorkflowJobCreationSuccess(model, workflow, addPorts, targetInputPorts) + { + workflow.get('workflow_jobs').add(model); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOB_CREATED, {workflowjob: model}); + if (addPorts) + { + this._addRequiredPorts(model, targetInputPorts, workflow); + } + } + + /** + * Handle save success. + */ + _handleWorkflowJobSaveSuccess(workflowJob, workflow) + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOB_SAVED, {workflowjob: workflowJob}); + if (workflow) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW, {workflow: workflow}); + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Given a WorkflowJob, adds ports that must be present. + * This method assumes that the WorkflowJob has NO ports to begin with. + * The InputPorts in targetInputPorts will be automatically connected to IFF the resulting + * WorkflowJob has one OutputPort. + */ + _addRequiredPorts(workflowJob, targetInputPorts, workflow) + { + var jobCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOB_COLLECTION); + var job = jobCollection.get(workflowJob.getJobUuid()); + var outputPortTypes = job.get('output_port_types'); + var inputPortTypes = job.get('input_port_types'); + + this._addInputPorts(workflowJob, inputPortTypes, workflow); + this._addOutputPorts(workflowJob, outputPortTypes, targetInputPorts, workflow); + } + + /** + * Adds InputPorts. + */ + _addInputPorts(workflowJob, inputPortTypes, workflow) + { + inputPortTypes.forEach(function(inputPortType) + { + for (var i = 0; i < inputPortType.get('minimum');i ++) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_INPUTPORT, {inputporttype: inputPortType, workflowjob: workflowJob, workflow: workflow}); + } + }); + } + + /** + * Adds OutputPorts. + */ + _addOutputPorts(workflowJob, outputPortTypes, targetInputPorts, workflow) + { + var sendTargetInputPorts = outputPortTypes.length === 1 && outputPortTypes.at(0).get('minimum') === 1 ? targetInputPorts : []; + outputPortTypes.forEach(function(outputPortType) + { + for (var i = 0; i < outputPortType.get('minimum'); i++) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_OUTPUTPORT, + {outputporttype: outputPortType, workflowjob: workflowJob, targetinputports: targetInputPorts, workflow: workflow}); + } + }); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerWorkflowJobGroup.js b/rodan-client/code/src/js/Controllers/ControllerWorkflowJobGroup.js new file mode 100755 index 000000000..4e7f02ca1 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerWorkflowJobGroup.js @@ -0,0 +1,221 @@ +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import WorkflowJobGroup from 'js/Models/WorkflowJobGroup'; +import WorkflowJobGroupCollection from 'js/Collections/WorkflowJobGroupCollection'; + +/** + * Controller for WorkflowJobGroups. + */ +export default class ControllerWorkflowJobGroup extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this._collection = new WorkflowJobGroupCollection(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_DELETED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_IMPORTED, options => this._handleSuccessGeneric(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_SAVED, options => this._handleSuccessGeneric(options)); + + // Requests. + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_CREATE, (options) => this._handleRequestCreateWorkflowJobGroup(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_DELETE, (options) => this._handleRequestDeleteWorkflowJobGroup(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_GET_PORTS, (options) => this._handleRequestGetPorts(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_IMPORT, (options) => this._handleRequestImportWorkflowJobGroup(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_LOAD_COLLECTION, (options) => this._handleRequestWorkflowJobGroupLoadCollection(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_SAVE, (options) => this._handleRequestSaveWorkflowJobGroup(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle WorkflowJobGroup creation. + */ + _handleRequestCreateWorkflowJobGroup(options) + { + var urls = []; + var workflowJobs = options.workflowjobs; + var workflow = options.workflow; + for (var index in workflowJobs) + { + urls.push(workflowJobs[index].get('url')); + } + var workflowJobGroup = new WorkflowJobGroup({workflow_jobs: urls, workflow: workflow}); + workflowJobGroup.save({}, {success: (model) => this._handleWorkflowJobGroupCreationSuccess(model)}); + } + + /** + * Handle WorkflowJobGroup save. + */ + _handleRequestSaveWorkflowJobGroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Workflow Job Group', content: 'Please wait...'}); + options.workflowjobgroup.save(options.workflowjobgroup.changed, {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_SAVED, {workflowjobgroup: model})}); + } + + /** + * Handle WorkflowJobGroup load. + */ + _handleRequestWorkflowJobGroupLoadCollection(options) + { + this._collection.fetch({data: {'workflow': options.workflow.get('uuid')}}); + } + + /** + * Handle WorkflowJobGroup delete. + */ + _handleRequestDeleteWorkflowJobGroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Workflow Job Group', content: 'Please wait...'}); + options.workflowjobgroup.destroy({success: (model) => this._handleWorkflowJobGroupDeleteSuccess(options.workflowjobgroup)}); + } + + /** + * Handle request import Workflow. + */ + _handleRequestImportWorkflowJobGroup(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Importing Workflow', content: 'Please wait...'}); + var workflow = options.target; + var originWorkflow = options.origin; + var newGroup = new WorkflowJobGroup({'workflow': workflow.get('url'), 'origin': originWorkflow.get('url')}); + newGroup.save({}, {success: (model) => this._handleWorkflowJobGroupCreationSuccess(model)}); + } + + /** + * Handle request get ports. + */ + _handleRequestGetPorts(options) + { + var workflowJobGroup = this._collection.findWhere({url: options.url}); + return this._getExposedPorts(workflowJobGroup, options.workflow); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - REST handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle import success. + */ + _handleWorkflowJobGroupCreationSuccess(model) + { + this._collection.set(model, {remove: false}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_IMPORTED, {workflowjobgroup: model}); + } + + /** + * Handle ungroup success. + */ + _handleWorkflowJobGroupDeleteSuccess(workflowJobGroup) + { + this._collection.remove(workflowJobGroup); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWJOBGROUP_DELETED, {workflowjobgroup: workflowJobGroup}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Determine which ports should be kept exposed for the provided WorkflowJobs. + * + * It should be exposed if: + * - it does not have an associated Connection + * - it is connected to a port outside of the WorkflowJobs + */ + _getExposedPorts(workflowJobGroup, workflow) + { + var object = {inputports: {}, outputports: {}}; + var connections = {}; + var workflowJobUrls = workflowJobGroup.get('workflow_jobs'); + + // Go through the WorkflowJobs. For each InputPort: + // - add it to the return list + // - if it has Connections, add that Connection and the associated InputPort to the Connections list + for (var index in workflowJobUrls) + { + var workflowJobUrl = workflowJobUrls[index]; + var workflowJob = workflow.get('workflow_jobs').findWhere({url: workflowJobUrl}); + if (!workflowJob) + { + return null; + } + + var inputPorts = workflowJob.get('input_ports'); + for (var i = 0; i < inputPorts.length; i++) + { + var inputPort = inputPorts.at(i); + object.inputports[inputPort.get('url')] = inputPort; + if (inputPort.get('connections').length !== 0) + { + var connection = inputPort.get('connections')[0]; + connections[connection] = {inputPort: inputPort}; + } + } + } + + // Go through the WorkflowJobs. For each OutputPort: + // - if it doesn't have Connections, add it to the return list + // - if it has Connections: + // -- if the Connection exists in the Connection list, remove the InputPort from reeturn list and + // remove the Connection from the Connection list + // -- else, the OutputPort is added to the return list + for (var index in workflowJobUrls) + { + var workflowJobUrl = workflowJobUrls[index]; + var workflowJob = workflow.get('workflow_jobs').findWhere({url: workflowJobUrl}); + + // Get unsatisfied OutputPorts and also collect OutputPorts with Connections. + var outputPorts = workflowJob.get('output_ports'); + for (var i = 0; i < outputPorts.length; i++) + { + var outputPort = outputPorts.at(i); + if (outputPort.get('connections').length === 0) + { + object.outputports[outputPort.get('url')] = outputPort; + continue; + } + else + { + for (var j = 0; j < outputPort.get('connections').length; j++) + { + var connection = outputPort.get('connections')[j]; + if (connection in connections) + { + delete object.inputports[connections[connection].inputPort.get('url')]; + delete connections[connection]; + } + else + { + object.outputports[outputPort.get('url')] = outputPort; + } + } + } + } + } + return object; + } + + /** + * Handle generic success. + */ + _handleSuccessGeneric(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ControllerWorkflowRun.js b/rodan-client/code/src/js/Controllers/ControllerWorkflowRun.js new file mode 100755 index 000000000..90a08d6d3 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ControllerWorkflowRun.js @@ -0,0 +1,246 @@ +import BaseController from './BaseController'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewIndividualWorkflowRun from 'js/Views/Master/Main/WorkflowRun/Individual/LayoutViewIndividualWorkflowRun'; +import Radio from 'backbone.radio'; +import ViewWorkflowRunCollection from 'js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollection'; +import WorkflowRun from 'js/Models/WorkflowRun'; +import WorkflowRunCollection from 'js/Collections/WorkflowRunCollection'; + +/** + * Controller for WorkflowRun. + */ +export default class ControllerWorkflowRun extends BaseController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Initialize +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + // Events. + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_CREATED, options => this._handleEventWorkflowRunStartResponse(options)/*this._handleEventWorkflowRunCreationResponse(options)*/); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_FAILED_TO_CREATE, options => this._handleEventWorkflowRunFailToStartResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_DELETED, options => this._handleEventWorkflowRunDeleteResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_SAVED, options => this._handleEventWorkflowRunSaveResponse(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_STARTED, options => this._handleEventWorkflowRunStartResponse(options)); + + // Requests. + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options), this); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED, options => this._handleEventItemSelected(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWRUN_CREATE, options => this._handleRequestWorkflowRunCreate(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWRUN_DELETE, options => this._handleRequestWorkflowRunDelete(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWRUN_SAVE, options => this._handleRequestWorkflowRunSave(options), this); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__WORKFLOWRUN_START, options => this._handleRequestWorkflowRunStart(options), this); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event WorkflowRun create response. + */ + _handleEventWorkflowRunCreationResponse(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWRUN_START, {workflowrun: options.workflowrun}); + } + + /** + * Handle event WorkflowRun delete response. + */ + _handleEventWorkflowRunDeleteResponse(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED_COLLECTION, {project: project}); + } + + /** + * Handle event WorkflowRun save response. + */ + _handleEventWorkflowRunSaveResponse(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + } + + /** + * Handle item selection. + */ + _handleEventItemSelected(options) + { + // Get required collections. + var runJobs = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RUNJOBS_LOAD, {data: {workflow_run: options.workflowrun.id}}); + var resources = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCES_LOAD, {data: {result_of_workflow_run: options.workflowrun.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [runJobs, resources]}); + + // Create view and show. + this._viewItem = new LayoutViewIndividualWorkflowRun({runjobs: runJobs, resources: resources, model: options.workflowrun}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: this._viewItem}); + } + + /** + * Handle collection selection. + */ + _handleEventCollectionSelected(options) + { + var collection = new WorkflowRunCollection(); + collection.fetchSort(false, 'created', {data: {project: options.project.id}}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, {collections: [collection]}); + var view = new ViewWorkflowRunCollection({collection: collection}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: view}); + } + + /** + * Handle event WorkflowRun start response. + */ + _handleEventWorkflowRunStartResponse(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED_COLLECTION, {project: project}); + } + + /** + * Handle event WorkflowRun fail to start response. + */ + _handleEventWorkflowRunFailToStartResponse(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + + // TODO: move this logic as a utility function + /* + Translate Django error message into list display. + HTML structure: +
    +
    Resource Assignments
    +
    +
    InputPort X
    + + ... +
    + ... +
    + */ + function getErrorListDisplay(errorList) { + var fragment = ''; + return fragment; + } + + var html = '
    '; + var errors = options.errors; + for (var fieldName in errors) { + if (errors.hasOwnProperty(fieldName)) { + var fieldNameDisplay = (fieldName === 'resource_assignments') ? "Resource Assignment" : fieldName; + html += '
    ' + fieldNameDisplay + '
    '; + + html += '
    ' + if (fieldName === 'resource_assignments') { + var errorMap = errors[fieldName]; + for (var inputPortUrl in errorMap) { + if (errorMap.hasOwnProperty(inputPortUrl)) { + html += '
    InputPort ' + inputPortUrl + '
    '; + html += getErrorListDisplay(errorMap[inputPortUrl]); + } + } + } else { + html += getErrorListDisplay(errors[fieldName]); + } + html += '
    ' + } + } + html += '
    ' + + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, { + title: 'Error', + content: html + }); + } + + /** + * Handle request create WorkflowRun. + */ + _handleRequestWorkflowRunCreate(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Creating Workflow Run', content: 'Please wait...'}); + var name = options.workflow.get('name'); + var description = 'Run of Workflow "' + name + '"\n\n' + this._getResourceAssignmentDescription(options.assignments); + var workflowRun = new WorkflowRun({workflow: options.workflow.get('url'), + resource_assignments: options.assignments, + name: name, + description: description}); + workflowRun.save({}, { + success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_CREATED, {workflowrun: model}), + error: (model, response) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_FAILED_TO_CREATE, {workflowrun: model, errors: response.responseJSON}) + }); + } + + /** + * Handle request delete WorkflowRun. + */ + _handleRequestWorkflowRunDelete(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Deleting Workflow Run', content: 'Please wait...'}); + options.workflowrun.destroy({success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_DELETED, {workflowrun: model})}); + } + + /** + * Handle request save WorkflowRun. + */ + _handleRequestWorkflowRunSave(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Saving Workflow Run', content: 'Please wait...'}); + options.workflowrun.save(options.workflowrun.changed, + {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_SAVED, {workflowrun: model})}); + } + + /** + * Handle request start WorkflowRun. + */ + _handleRequestWorkflowRunStart(options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW_IMPORTANT, {title: 'Starting Workflow Run', content: 'Please wait...'}); + options.workflowrun.set({status: 21}); + options.workflowrun.save(options.workflowrun.changed, + {patch: true, success: (model) => Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_STARTED, {workflowrun: model})}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Given resource assignments, provides descriptive info. + */ + _getResourceAssignmentDescription(assignments) + { + var text = ''; + for (var inputPortUrl in assignments) + { + var resourceUrls = assignments[inputPortUrl]; + for (var index in resourceUrls) + { + text += '- ' + resourceUrls[index] + '\n'; + } + text += '\n'; + } + return text; + } + + /** + * Handle sync of WorkflowRun elements. + */ + _handleSyncWorkflowRun(runJobs, resources) + { + runJobs.syncCollection(); + resources.syncCollection(); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Controllers/ItemController.js b/rodan-client/code/src/js/Controllers/ItemController.js new file mode 100755 index 000000000..e47234b59 --- /dev/null +++ b/rodan-client/code/src/js/Controllers/ItemController.js @@ -0,0 +1,521 @@ +import BaseItem from '../Items/BaseItem'; +import ConnectionItem from '../Items/ConnectionItem'; +import GUI_EVENTS from '../Shared/Events'; +import InputPortItem from '../Items/InputPortItem'; +import LineItem from '../Items/LineItem'; +import OutputPortItem from '../Items/OutputPortItem'; +import paper from 'paper'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; +import WorkflowJobGroupItem from '../Items/WorkflowJobGroupItem'; +import WorkflowJobItem from '../Items/WorkflowJobItem'; + +/** + * Controls management of items. + */ +class ItemController +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Basic constructor + */ + constructor() + { + this._selectedItems = {}; + this._selectingMultiple = false; + this._overItem = null; + this._outputPortItem = null; + this._candidateInputPortItems = {}; + + this._initializeRadio(); + this._createSegments(); + } + + /** + * Handles MouseEvent on item. + */ + handleMouseEvent(mouseEvent) + { + var item = mouseEvent.target; + this._overItem = mouseEvent.type === 'mouseenter' ? item : mouseEvent.type === 'mouseleave' ? null : item; + if (mouseEvent.type === 'mousedown') + { + this._handleEventMouseDown(mouseEvent); + } + else if (mouseEvent.type === 'mouseup') + { + } + } + + /** + * Returns current item mouse is over (or null). + */ + getMouseOverItem() + { + return this._overItem; + } + + /** + * Saves item positions. + */ + saveSelectedItemPositions() + { + for (var itemIndex in this._selectedItems) + { + var item = this._selectedItems[itemIndex]; + item.updatePositionToServer(); + } + } + + /** + * Move item positions. + */ + moveSelectedItems(delta) + { + for (var itemIndex in this._selectedItems) + { + var item = this._selectedItems[itemIndex]; + if (item.isMoveable()) + { + item.move(delta); + } + } + } + + /** + * Selects the given item. + */ + selectItem(item) + { + this._selectedItems[item.id] = item; + item.setHighlight(true); + } + + /** + * Unselects the given item. + */ + unselectItem(item) + { + delete this._selectedItems[item.id]; + item.setHighlight(false); + } + + /** + * Clears selection. + */ + clearSelected() + { + for (var itemIndex in this._selectedItems) + { + var item = this._selectedItems[itemIndex]; + this.unselectItem(item); + } + this._selectedItems = {}; // TODO memory leak? + this._outputPortItem = null; + } + + /** + * Return true if item is selected. + */ + isSelected(item) + { + return this._selectedItems.hasOwnProperty(item.id); + } + + /** + * Returns number of selected items. + */ + getSelectedCount() + { + return Object.keys(this._selectedItems).length; + } + + /** + * Returns array of keys of selected items. + */ + getSelectedItemKeys() + { + return Object.keys(this._selectedItems); + } + + /** + * Returns selected item at key + */ + getSelectedItem(key) + { + return this._selectedItems[key]; + } + + /** + * Returns true if we can group the selected items. + */ + canGroupSelectedItems() + { + if (Object.keys(this._selectedItems).length > 1) + { + for (var itemIndex in this._selectedItems) + { + var item = this._selectedItems[itemIndex]; + if (!(item instanceof WorkflowJobItem)) + { + return false; + } + } + return true; + } + return false; + } + + /** + * Return OutputPortItem flagged for Connection creation (null if none). + */ + getOutputPortItemForConnection() + { + return this._outputPortItem; + } + + /** + * Returns a line item. + */ + createLineItem(startPoint) + { + return new LineItem({segments: this._segments.connection, startPoint: startPoint}); + } + + /** + * Set selecting multiple. + */ + setSelectingMultiple(selectingMultiple) + { + this._selectingMultiple = selectingMultiple; + } + + /** + * Return true if selecting multiple. + */ + selectingMultiple() + { + return this._selectingMultiple; + } + + /** + * Attempts to create a connection. + */ + createConnection(outputPortItem, inputPortItem, workflow) + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_CONNECTION, {inputport: inputPortItem.getModel(), + outputport: outputPortItem.getModel(), + workflow: workflow}); + } + + /** + * Given InputPort URLs, sets them as candidates for satisfying OutputPort. + */ + setInputPortCandidates(inputPortUrls) + { + this.clearInputPortCandidates(); + if (inputPortUrls) + { + for (var i = 0; i < inputPortUrls.length; i++) + { + var item = BaseItem.getAssociatedItem(inputPortUrls[i]); + item.setTemporaryColor(Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].INPUTPORT_COLOR_CANDIDATE); + this._candidateInputPortItems[inputPortUrls[i]] = item; + } + } + } + + /** + * Returns true if provided InputPortItem represents a candidate InputPort. + */ + isInputPortCandidate(item) + { + var url = item.getModel().get('url'); + return this._candidateInputPortItems.hasOwnProperty(url); + } + + /** + * Clears candidate InputPortItems. + */ + clearInputPortCandidates() + { + var keys = Object.keys(this._candidateInputPortItems); + for (var i = 0; i < keys.length; i++) + { + var item = this._candidateInputPortItems[keys[i]]; + item.clearTemporaryColor(); + } + this._candidateInputPortItems = {}; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Initializers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize radio. + */ + _initializeRadio() + { + this.guiChannel = Radio.channel('rodan-client_gui'); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_SELECTED_WORKFLOWJOBS, () => this._handleRequestGetSelectedWorkflowJobs()); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ADD_RESOURCEDISTRIBUTOR, () => this._handleRequestAddResourceDistributor()); + + this.rodanChannel = Radio.channel('rodan'); + this.rodanChannel.on(Rodan.RODAN_EVENTS.EVENT__COLLECTION_ADD, options => this._handleEventModelSync(options)); + this.rodanChannel.on(Rodan.RODAN_EVENTS.EVENT__MODEL_SYNC, options => this._handleEventModelSync(options)); + } + + /** + * Create segment definitions. + */ + _createSegments() + { + var canvasWidth = paper.view.viewSize.width; + var canvasHeight = paper.view.viewSize.height; + var workflowJobItemWidth = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].WORKFLOWJOB_WIDTH; + var workflowJobItemHeight = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].WORKFLOWJOB_HEIGHT; + var portItemWidth = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].PORT_WIDTH; + var portItemHeight = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].PORT_HEIGHT; + this._segments = { + workflowJobItem: [ + new paper.Point(0, 0), + new paper.Point(workflowJobItemWidth, 0), + new paper.Point(workflowJobItemWidth, workflowJobItemHeight), + new paper.Point(0, workflowJobItemHeight), + new paper.Point(0, 0) + ], + portItem: [ + new paper.Point(0, 0), + new paper.Point(portItemWidth, 0), + new paper.Point(portItemWidth, portItemHeight), + new paper.Point(0, portItemHeight), + new paper.Point(0, 0) + ], + listInputportItem: [ + new paper.Point(0, 0), + new paper.Point(portItemWidth, 0), + new paper.Point(portItemWidth / 2, portItemHeight), + new paper.Point(0, 0) + ], + listOutputPortItem: [ + new paper.Point(portItemWidth / 2, 0), + new paper.Point(portItemWidth, portItemHeight), + new paper.Point(0, portItemHeight), + new paper.Point(portItemWidth / 2, 0) + ], + connection: [new paper.Point(0, 0), new paper.Point(1, 0)] + }; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - REST handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event model sync. + * + * We check if an item exists for this model. If it does, don't do anything - the + * model will take care of itself. If it doesn't, we create a new model. + */ + _handleEventModelSync(options) + { + if (options.model) + { + var item = BaseItem.getAssociatedItem(options.model.get('url')); + if (!item) + { + switch (options.model.constructor.name) + { + case 'WorkflowJob': + { + var item = new WorkflowJobItem({segments: this._segments.workflowJobItem, model: options.model, text: true}); + var position = new paper.Point(paper.view.size.width * paper.view.zoom / 2, paper.view.size.height * paper.view.zoom / 2); + item.setPosition(position); + break; + } + + case 'InputPort': + { + var item = new InputPortItem({segments: this._segments.portItem, model: options.model, workflowjoburl: options.model.get('workflow_job')}); + break; + } + + case 'OutputPort': + { + var item = new OutputPortItem({segments: this._segments.portItem, model: options.model, workflowjoburl: options.model.get('workflow_job')}); + break; + } + + case 'Connection': + { + var item = new ConnectionItem({segments: this._segments.connection, + model: options.model, + inputporturl: options.model.get('input_port'), + outputporturl: options.model.get('output_port')}); + break; + } + + case 'WorkflowJobGroup': + { + var item = new WorkflowJobGroupItem({segments: this._segments.workflowJobItem, model: options.model, text: true}); + var position = new paper.Point(paper.view.size.width * paper.view.zoom / 2, paper.view.size.height * paper.view.zoom / 2); + item.setPosition(position); + break; + } + + default: + { + break; + } + } + } + else if (options.options.task === 'destroy') + { + this.unselectItem(item); + } + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - MouseEvent handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event mousedown. + */ + _handleEventMouseDown(mouseEvent) + { + // Handle selection first. + var item = mouseEvent.target; + if (!this._selectingMultiple) + { + if (!this.isSelected(item)) + { + this.clearSelected(); + this.selectItem(item); + } + } + else + { + if (!this.isSelected(item)) + { + this.selectItem(item); + } + else + { + this.unselectItem(item); + } + } + + // Next, what kind of button was it. + switch (mouseEvent.event.button) + { + case 0: + { + this._handleEventMouseDownMain(mouseEvent); + break; + } + + default: + { + this._handleEventMouseDownSecondary(mouseEvent); + break; + } + } + } + + /** + * Handle main button mousedown. + */ + _handleEventMouseDownMain(mouseEvent) + { + // Check if we can start making a connection. + var item = mouseEvent.target; + if (this.getSelectedCount() === 1 && item instanceof OutputPortItem) + { + this._outputPortItem = item; + } + } + + /** + * Handle secondary button mousedown. + */ + _handleEventMouseDownSecondary(mouseEvent) + { + var itemClass = this._getSelectionItemType(); + var contextMenuData = []; + if (this.getSelectedCount() === 1) + { + var item = mouseEvent.target; + contextMenuData = item.getContextMenuDataSingle(); + } + else + { + contextMenuData = itemClass.getContextMenuDataMultiple(); + } + + if (contextMenuData && contextMenuData.length > 0) + { + Radio.channel('rodan').request(Rodan.RODAN_EVENTS.REQUEST__CONTEXTMENU_SHOW, {items: contextMenuData, + top: mouseEvent.event.pageY, + left: mouseEvent.event.pageX}); + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle request for all selected WorkflowJobs. + */ + _handleRequestGetSelectedWorkflowJobs() + { + var workflowJobs = []; + for (var itemIndex in this._selectedItems) + { + workflowJobs.push(this._selectedItems[itemIndex].getModel()); + } + return workflowJobs; + } + + /** + * Handle add resource distributor for selected InputPorts. + */ + _handleRequestAddResourceDistributor(options) + { + var keys = this.getSelectedItemKeys(); + var inputPorts = []; + for (var index in keys) + { + var item = this.getSelectedItem(keys[index]); + inputPorts.push(item.getModel()); + } + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_DISTRIBUTOR, {inputports: inputPorts, workflow: workflow}); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns item type (class constructor) of multiple selection. + * If mixed, returns BaseItem. Returns null if none. + */ + _getSelectionItemType() + { + var keys = this.getSelectedItemKeys(); + var itemType = null; + var urls = []; + for (var index in keys) + { + var item = this.getSelectedItem(keys[index]); + if (itemType === null) + { + itemType = item.constructor; + } + } + return itemType; + } +} + +export default ItemController; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/BaseItem.js b/rodan-client/code/src/js/Items/BaseItem.js new file mode 100755 index 000000000..6576a7ac2 --- /dev/null +++ b/rodan-client/code/src/js/Items/BaseItem.js @@ -0,0 +1,555 @@ +import $ from 'jquery'; +import GUI_EVENTS from '../Shared/Events'; +import paper from 'paper'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; + +let itemMap = null; + +/** + * Base Item in WorkflowBuilder + */ +class BaseItem extends paper.Path +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC STATIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns associated item given a URL. + */ + static getAssociatedItem(url) + { + if (!itemMap) + { + itemMap = {}; + } + return itemMap[url]; + } + + /** + * Associates given item with URL. + */ + static associateItemWithUrl(item, url) + { + if (!itemMap) + { + itemMap = {}; + } + itemMap[url] = item; + } + + /** + * Removes item from map with he provided URL. + */ + static removeItemFromMap(url) + { + if (!itemMap) + { + itemMap = {}; + } + if (itemMap[url]) + { + delete itemMap[url]; + } + } + + /** + * Update all items. + */ + static updateItems() + { + if (!itemMap) + { + itemMap = {}; + } + for (var url in itemMap) + { + var item = itemMap[url]; + item.update(); + } + } + + /** + * Clears the map. + */ + static clearMap() + { + itemMap = {}; + } + + /** + * Returns context menu data for multiple items of this class. + */ + static getContextMenuDataMultiple() + { + return [{channel: 'rodan-client_gui', label: 'Cancel', radiorequest: GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_HIDE_CONTEXTMENU}]; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options.segments); + this._initializeRadio(options); + this._initializeAppearance(options); + this._initializeModelBinding(options); + this._initializeText(options); + this._initializeInputEventHandlers(options); + } + + /** + * Returns associated model. + */ + getModel() + { + return this._model; + } + + /** + * Returns context menu data for single item of this class. + */ + getContextMenuDataSingle() + { + var menuItems = []; + if (this.menuItems) + { + menuItems = this.menuItems; + } + return menuItems; + } + + /** + * Return true if this item can be moved by itself. + */ + isMoveable() + { + return true; + } + + /** + * Moves the item. + */ + move(delta) + { + this.position.x += delta.x; + this.position.y += delta.y; + if (this._text !== null) + { + this._text.position = this.bounds.center; + } + this._hasMoved = true; + } + + /** + * Set position. + */ + setPosition(point) + { + this.position = point; + if (this._text !== null) + { + this._text.position = this.bounds.center; + } + this._hasMoved = true; + } + + /** + * Set visibility. + */ + setVisible(visible) + { + this.visible = visible; + this._text.visible = this._useText && this.visible; + } + + /** + * Destroy. + */ + destroy() + { + BaseItem.removeItemFromMap(this._modelURL); + this._text.remove(); + this.remove(); + } + + /** + * Updates the position to the server. + */ + updatePositionToServer() + { + if (this.isMoveable() && this._hasMoved) + { + // If an ID exists, we know it exists on the server, so we can patch it. + // Else if we haven't tried saving it before, do it. This should create + // a new model on the server. + if (this._modelId || !this._coordinateSetSaveAttempted) + { + this._coordinateSetSaveAttempted = true; + var x = this.position.x / paper.view.zoom / paper.view.size.width; + var y = this.position.y / paper.view.zoom / paper.view.size.height; + var coordinates = {x: x, y: y}; + this._model.set({'appearance': coordinates}); + this._model.save(); + this._hasMoved = false; + } + } + } + + /** + * Gets coordinates from server. + */ + loadCoordinates() + { + // Create callback. + var callback = (coordinates) => this._handleCoordinateLoadSuccess(coordinates); + + // Fetch. + var query = {}; + query[this.coordinateSetInfo['url']] = this._modelId; + this._model.fetch({data: query, success: callback, error: callback}); + } + + /** + * Returns associated model ID. + */ + getModelID() + { + return this._modelId; + } + + /** + * Returns associated model URL. + */ + getModelURL() + { + return this._modelURL; + } + + /** + * Highlights this object. + */ + setHighlight(highlighted) + { + this.strokeColor = highlighted ? Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_COLOR_SELECTED : Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_COLOR; + this.strokeWidth = highlighted ? Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_WIDTH_SELECTED : Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_WIDTH; + } + + /** + * Gets description. + */ + getDescription() + { + if (this._description && this._description !== '') + { + return this._description; + } + else + { + return 'no description available'; + } + } + + /** + * Sets temporary color. + */ + setTemporaryColor(color) + { + this._temporaryColor = color; + } + + /** + * Clears temporary color. + */ + clearTemporaryColor() + { + this._temporaryColor = null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// ABSTRACT METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Abstract method. Update. + */ + update() + { + // TODO - better way to do abstract methods + console.error('This must be defined in sub-class.'); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Backbone event handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event model sync. + */ + _handleEventModelSync(options) + { + this._model = options.model; + switch (options.options.task) + { + case 'save': + { + this._text.content = this._model.get('name'); + this._description = this._model.getDescription(); + break; + } + + case 'destroy': + { + this.destroy(); + break; + } + + default: + { + break; + } + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize hover. + */ + _initializeHover(options) + { + this._timerEvent = null; + this._popup = new paper.PointText(new paper.Point(0, 0)); + } + + /** + * Initialize appearance. + */ + _initializeAppearance(options) + { + this.strokeColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_COLOR; + this.strokeJoin = 'round'; + this.strokeWidth = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_WIDTH; + this.fillColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].FILL_COLOR; + this._temporaryColor = null; + } + + /** + * Initialize model binding. + */ + _initializeModelBinding(options) + { + this._model = options.model ? options.model: null; + this._modelId = options.model ? options.model.id : null; + this._modelURL = options.model ? options.model.get('url') : null; + this._description = options.model ? options.model.getDescription() : null; + BaseItem.associateItemWithUrl(this, this._modelURL); + + // This is the coordinate set model settings. Should be overridden if want to save. + this._coordinateSetSaveAttempted = false; + } + + /** + * Initialize event handlers. + */ + _initializeInputEventHandlers(options) + { + this.onMouseDown = event => this._handleMouseEvent(event); + this.onMouseUp = event => this._handleMouseEvent(event); + this.onClick = event => this._handleMouseEvent(event); + this.onMouseEnter = event => this._handleMouseEvent(event); + this.onMouseLeave = event => this._handleMouseEvent(event); + this.onDoubleClick = event => this._handleMouseEvent(event); + this._text.onMouseDown = event => this._handleMouseEvent(event); + this._text.onMouseUp = event => this._handleMouseEvent(event); + this._text.onClick = event => this._handleMouseEvent(event); + this._text.onMouseEnter = event => this._handleMouseEvent(event); + this._text.onMouseLeave = event => this._handleMouseEvent(event); + this._text.onDoubleClick = event => this._handleMouseEvent(event); + } + + /** + * Initialize text. + */ + _initializeText(options) + { + this._useText = (options.hasOwnProperty('text') && options.text === true); + this._text = new paper.PointText(new paper.Point(0, 0)); + this._text.justification = 'center'; + this._text.fillColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_COLOR; + this._text.fontSize = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].FONT_SIZE; + this._text.content = ''; + this._text.position = this.bounds.center; + this.addChild(this._text); + if (options.model) + { + this._text.content = options.model.get('name'); + } + } + + /** + * Initialize radio. + */ + _initializeRadio(options) + { + this.guiChannel = Radio.channel('rodan-client_gui'); + this.rodanChannel = Radio.channel('rodan'); + if (options && options.model) + { + this.rodanChannel.on(Rodan.RODAN_EVENTS.EVENT__MODEL_SYNC + options.model.get('url'), options => this._handleEventModelSync(options)); + } + } + + /** + * Handle coordinate load success. + */ + _handleCoordinateLoadSuccess(model) + { + var coordinates = model.get("appearance"); + if (coordinates) + { + this.position = new paper.Point(coordinates.x * paper.view.size.width * paper.view.zoom, + coordinates.y * paper.view.size.height * paper.view.zoom); + } + } + + /** + * Shows popup. + */ + _showPopup(event) + { + if ($('div#canvas-tooltip')) + { + var description = this.getDescription(); + var tooltip = $('div#canvas-tooltip'); + tooltip.css('visibility', 'visible'); + tooltip.css('top', event.event.clientY); + tooltip.css('left', event.event.clientX); + tooltip.text(description); + } + } + + /** + * Hide popup. + */ + _hidePopup() + { + if ($('div#canvas-tooltip')) + { + $('div#canvas-tooltip').css('visibility', 'hidden'); + } + } + + /** + * Handle mouse event. + */ + _handleMouseEvent(event) + { + // We do this because paperjs doesn't bubble up events. + // This line guarantees that events caught by the TEXT actually get to the parent base item. + event.target = this; + + switch (event.type) + { + case 'mouseenter': + { + this._timerEvent = setTimeout(() => this._showPopup(event), Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].HOVER_TIME); + paper.handleMouseEvent(event); + break; + } + + case 'mouseleave': + { + this._hidePopup(); + clearTimeout(this._timerEvent); + paper.handleMouseEvent(event); + break; + } + + case 'mouseup': + { + this._handleMouseUp(event); + break; + } + + case 'mousedown': + { + this._handleMouseDown(event); + break; + } + + case 'click': + { + this._handleClick(event); + break; + } + + case 'doubleclick': + { + this._handleDoubleClick(event); + break; + } + + default: + { + paper.handleMouseEvent(event); + break; + } + } + } + + /** + * Handle mouse enter. + */ + _handleMouseEnter(mouseEvent) + { + this._timerEvent = setTimeout(() => this._showPopup(mouseEvent), Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].HOVER_TIME); + paper.handleMouseEvent(mouseEvent); + } + + /** + * Handle mouse leave. + */ + _handleMouseLeave(mouseEvent) + { + this._hidePopup(); + clearTimeout(this._timerEvent); + paper.handleMouseEvent(mouseEvent); + } + + /** + * Handle mouse up. + */ + _handleMouseUp(mouseEvent) + { + paper.handleMouseEvent(mouseEvent); + } + + /** + * Handle mouse down. + */ + _handleMouseDown(mouseEvent) + { + paper.handleMouseEvent(mouseEvent); + } + + /** + * Handle mouse click. + */ + _handleClick(mouseEvent) + { + paper.handleMouseEvent(mouseEvent); + } + + /** + * Handle mouse double click. + */ + _handleDoubleClick(mouseEvent) + { + paper.handleMouseEvent(mouseEvent); + } +} + +export default BaseItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/BasePortItem.js b/rodan-client/code/src/js/Items/BasePortItem.js new file mode 100755 index 000000000..285dc3b1f --- /dev/null +++ b/rodan-client/code/src/js/Items/BasePortItem.js @@ -0,0 +1,117 @@ +import BaseItem from './BaseItem'; + +/** + * BasePortItem item. + */ +class BasePortItem extends BaseItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this._workflowJobUrl = options.workflowjoburl; + this._ownerUrl = this._workflowJobUrl; + this._ownerItem = null; + this.onDoubleClick = event => this._handleDoubleClick(event); + } + + /** + * Return true if this item can be moved by itself. + */ + isMoveable() + { + return false; + } + + /** + * Destroy cleanup. + */ + destroy() + { + if (this._ownerItem) + { + this.removeFromOwner(this._ownerItem); + } + super.destroy(); + } + + /** + * Return menu items. + */ + getContextMenuDataSingle() + { + return this._menuItems; + } + + /** + * Returns associated WorkflowJobItem. + */ + getWorkflowJobItem() + { + return BaseItem.getAssociatedItem(this._workflowJobUrl); + } + + /** + * Update. + */ + update() + { + this.updateOwnership(); + } + + /** + * Resets the owner to the WorkflowJobItem. + */ + resetOwner() + { + this._ownerUrl = this._workflowJobUrl; + } + + /** + * Sets the owner URL. + */ + setOwner(url) + { + this._ownerUrl = url; + } + + /** + * Updates ownership. It makes sure that the associated ownerItem (the one positioning it and setting the visibility) is set. + * If it is NOT set, it looks for it. When found, it adds itself as a child. + */ + updateOwnership() + { + this._ownerItem = BaseItem.getAssociatedItem(this._ownerUrl); + if (this._ownerItem) + { + this.addToOwner(this._ownerItem); + } + } + + /** + * Add this item to the owner. + * Must be implemented by inheriting class. + */ + addToOwner(ownerItem) + { + // TODO - better way to do abstract methods + console.error('This must be defined in sub-class.'); + } + + /** + * Remove this item from the owner. + * Must be implemented by inheriting class. + */ + removeFromOwner(ownerItem) + { + // TODO - better way to do abstract methods + console.error('This must be defined in sub-class.'); + } +} + +export default BasePortItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/BaseWorkflowJobItem.js b/rodan-client/code/src/js/Items/BaseWorkflowJobItem.js new file mode 100755 index 000000000..7c712f34c --- /dev/null +++ b/rodan-client/code/src/js/Items/BaseWorkflowJobItem.js @@ -0,0 +1,154 @@ +import BaseItem from './BaseItem'; +import paper from 'paper'; + +/** + * BaseWorkflowJob item. + */ +class BaseWorkflowJobItem extends BaseItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this._paperGroupInputPorts = new paper.Group(); + this.addChild(this._paperGroupInputPorts); + this._paperGroupOutputPorts = new paper.Group(); + this.addChild(this._paperGroupOutputPorts); + this.onDoubleClick = event => this._handleDoubleClick(event); + } + + /** + * Update. + */ + update() + { + if (this.visible) + { + this.bounds.width = this._text.bounds.width + 10; + this._text.position = this.bounds.center; + this._paperGroupInputPorts.position = this.bounds.topCenter; + this._paperGroupOutputPorts.position = this.bounds.bottomCenter; + this._positionPortItems(this._paperGroupInputPorts, this.bounds.top); + this._positionPortItems(this._paperGroupOutputPorts, this.bounds.bottom); + } + this._updatePortItemVisibility(this._paperGroupInputPorts); + this._updatePortItemVisibility(this._paperGroupOutputPorts); + } + + /** + * Adds input port item. + */ + addInputPortItem(inputPortItem) + { + this._paperGroupInputPorts.addChild(inputPortItem); + } + + /** + * Adds output port item. + */ + addOutputPortItem(outputPortItem) + { + this._paperGroupOutputPorts.addChild(outputPortItem); + } + + /** + * Deletes input port item. + */ + deleteInputPortItem(inputPortItem) + { + this._deletePortItem(this._paperGroupInputPorts, inputPortItem); + } + + /** + * Deletes output port item. + */ + deleteOutputPortItem(outputPortItem) + { + this._deletePortItem(this._paperGroupOutputPorts, outputPortItem); + } + + /** + * Destroy cleanup. + */ + destroy() + { + super.destroy(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Positions ports. + */ + _positionPortItems(group, positionY) + { + if (group.isEmpty()) + { + return; + } + + // Get port width and height. + var portWidth = group.children[0].bounds.width; + var portHeight = group.children[0].bounds.height; + var groupWidth = group.children.length * portWidth; + + // Get position parameters. + var offsetX = group.children[0].bounds.width; + var farLeft = this.position.x - (groupWidth / 2); + + for (var i = 0; i < group.children.length; i++) + { + var port = group.children[i]; + var positionX = (farLeft + (offsetX * (i + 1))) - (group.children[i].bounds.width / 2); + var newPosition = new paper.Point(positionX, positionY); + port.position = newPosition; + } + } + + /** + * Updates port item visibility. + */ + _updatePortItemVisibility(group) + { + for (var i = 0; i < group.children.length; i++) + { + var port = group.children[i]; + group.children[i].setVisible(this.visible); + } + } + + /** + * Deletes a port item. + */ + _deletePortItem(group, portItem) + { + for (var i = 0; i < group.children.length; i++) + { + if (portItem === group.children[i]) + { + group.removeChildren(i, i + 1); + return; + } + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle double click. + */ + _handleDoubleClick(mouseEvent) + { + // TODO - better way to do abstract methods + console.error('This must be defined in sub-class.'); + } +} + +export default BaseWorkflowJobItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/ConnectionItem.js b/rodan-client/code/src/js/Items/ConnectionItem.js new file mode 100755 index 000000000..087fecb23 --- /dev/null +++ b/rodan-client/code/src/js/Items/ConnectionItem.js @@ -0,0 +1,111 @@ +import paper from 'paper'; +import BaseItem from './BaseItem'; +import GUI_EVENTS from '../Shared/Events'; +import Rodan from 'rodan'; + +/** + * Connection item. + */ +class ConnectionItem extends BaseItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.menuItems = [{label: 'Delete', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_CONNECTION, options: {connection: options.model, workflow: workflow}}]; + + this.strokeWidth = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_WIDTH; + this._inputPortItem = null; + this._outputPortItem = null; + this._inputPortUrl = options.inputporturl; + this._outputPortUrl = options.outputporturl; + + // We'll put a small circle in the middle of our connection so it's easier to select. + var circleCenter = new paper.Point(0, 0); + this._circle = new paper.Shape.Circle(circleCenter, Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].CONNECTION_CIRCLE_RADIUS); + this._circle.fillColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].STROKE_COLOR; + this._circle.onMouseDown = event => this._handleMouseEvent(event); + this._circle.onMouseUp = event => this._handleMouseEvent(event); + this._circle.onClick = event => this._handleMouseEvent(event); + this._circle.onMouseEnter = event => this._handleMouseEvent(event); + this._circle.onMouseLeave = event => this._handleMouseEvent(event); + this.addChild(this._circle); + } + + /** + * Return true if this item can be moved by itself. + */ + isMoveable() + { + return false; + } + + /** + * Update. + */ + update() + { + // We do this in case the InputPortItem was created AFTER this ConnectionItem. + if (!this._inputPortItem) + { + this._inputPortItem = BaseItem.getAssociatedItem(this._inputPortUrl); + if (this._inputPortItem) + { + this._inputPortItem.setConnectionItem(this); + } + } + + // We do this in case the OutputPortItem was created AFTER this port. + if (!this._outputPortItem) + { + this._outputPortItem = BaseItem.getAssociatedItem(this._outputPortUrl); + if (this._outputPortItem) + { + this._outputPortItem.addConnectionItem(this); + } + } + + if (this._inputPortItem && this._outputPortItem) + { + this._circle.visible = this.visible; + this.firstSegment.point.x = this._outputPortItem.position.x; + this.firstSegment.point.y = this._outputPortItem.bounds.bottom; + this.lastSegment.point.x = this._inputPortItem.position.x; + this.lastSegment.point.y = this._inputPortItem.bounds.top; + this._circle.position.x = this.firstSegment.point.x + ((this.lastSegment.point.x - this.firstSegment.point.x) / 2); + this._circle.position.y = this.firstSegment.point.y + ((this.lastSegment.point.y - this.firstSegment.point.y) / 2); + } + } + + /** + * Destroy cleanup. + */ + destroy() + { + this._circle.remove(); + if (this._inputPortItem) + { + this._inputPortItem.setConnectionItem(null); + } + this._inputPortItem = null; + if (this._outputPortItem) + { + this._outputPortItem.removeConnectionItem(this); + } + this._outputPortItem = null; + super.destroy(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// +} + +export default ConnectionItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/InputPortItem.js b/rodan-client/code/src/js/Items/InputPortItem.js new file mode 100755 index 000000000..6095708ad --- /dev/null +++ b/rodan-client/code/src/js/Items/InputPortItem.js @@ -0,0 +1,148 @@ +import BasePortItem from './BasePortItem'; +import GUI_EVENTS from '../Shared/Events'; +import Rodan from 'rodan'; + +/** + * InputPort item. + */ +class InputPortItem extends BasePortItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC STATIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns context menu data for multiple items of this class. + * Takes in URLs of multiple selections. + * + * The menu data is simply an array of objects. Objects should be: + * + * { + * label: [string] // The text that should appear + * radiorequest: Rodan.RODAN_EVENTS.? // The Request to make. NOT A RADIO EVENT, rather a REQUEST. + * options: Object holding any options for Event + * } + */ + static getContextMenuDataMultiple() + { + return [{channel: 'rodan-client_gui', label: 'Create Resource Distributor', radiorequest: GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ADD_RESOURCEDISTRIBUTOR}]; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this._connectionItem = null; + } + + /** + * Sets associated connection item. + */ + setConnectionItem(item) + { + this._connectionItem = item; + } + + /** + * Return true if has connection item. + */ + hasConnectionItem() + { + return this._connectionItem !== null; + } + + /** + * Return true if satisfied. + */ + isSatisfied() + { + var resourceAssignments = this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_GET_RESOURCEASSIGNMENTS, {inputport: this.getModel()}); + return this.hasConnectionItem() || resourceAssignments.length > 0; + } + + /** + * Update. + */ + update() + { + super.update(); + if (this._temporaryColor) + { + this.fillColor = this._temporaryColor; + } + else + { + this.fillColor = this.isSatisfied() ? Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].INPUTPORT_COLOR_SATISFIED : + Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].INPUTPORT_COLOR_UNSATISFIED; + } + if (this._connectionItem !== null) + { + this._connectionItem.setVisible(this.visible); + } + } + + /** + * Destroy cleanup. + */ + destroy() + { + if (this.hasConnectionItem()) + { + this._connectionItem.destroy(); + this._connectionItem = null; + } + super.destroy(); + } + + /** + * Returns context menu data for single item of this class. + * We override as some things should not be visible. + */ + getContextMenuDataSingle() + { + var menuItems = []; + if (!this.hasConnectionItem()) + { + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + menuItems.push({label: 'Assign Resources', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_RESOURCEASSIGNMENT_VIEW, options: {inputport: this.getModel(), workflow: workflow}}); + } + return menuItems; + } + + /** + * Override. + */ + addToOwner(ownerItem) + { + ownerItem.addInputPortItem(this); + } + + /** + * Override. + */ + removeFromOwner(ownerItem) + { + ownerItem.deleteInputPortItem(this); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle double click. + */ + _handleDoubleClick(mouseEvent) + { + if (!this.hasConnectionItem()) + { + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_RESOURCEASSIGNMENT_VIEW, {inputport: this.getModel(), workflow: workflow}); + } + } +} + +export default InputPortItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/LineItem.js b/rodan-client/code/src/js/Items/LineItem.js new file mode 100755 index 000000000..90bfe1f5b --- /dev/null +++ b/rodan-client/code/src/js/Items/LineItem.js @@ -0,0 +1,35 @@ +import BaseItem from './BaseItem'; + +/** + * Line item. + */ +class LineItem extends BaseItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this.firstSegment.point = options.startPoint; + } + + /** + * Sets endpoint. + */ + setEndPoint(point) + { + this.lastSegment.point = point; + } + + /** + * Update (dummy). + */ + update() + {} +} + +export default LineItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/OutputPortItem.js b/rodan-client/code/src/js/Items/OutputPortItem.js new file mode 100755 index 000000000..666c7eb73 --- /dev/null +++ b/rodan-client/code/src/js/Items/OutputPortItem.js @@ -0,0 +1,93 @@ +import BasePortItem from './BasePortItem'; +import Rodan from 'rodan'; + +/** + * OutputPort item. + */ +class OutputPortItem extends BasePortItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this.fillColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].OUTPUTPORT_COLOR; + this._connectionItems = []; + } + + /** + * Adds associated connection item. + */ + addConnectionItem(item) + { + this._connectionItems.push(item); + } + + /** + * Removes connection item. + */ + removeConnectionItem(item) + { + for (var i = 0; i < this._connectionItems.length; i++) + { + if (this._connectionItems[i] === item) + { + this._connectionItems.splice(i, 1); + } + } + } + + /** + * Destroy cleanup. + */ + destroy() + { + this._destroyConnections(); + super.destroy(); + } + + /** + * Override. + */ + addToOwner(ownerItem) + { + ownerItem.addOutputPortItem(this); + } + + /** + * Override. + */ + removeFromOwner(ownerItem) + { + ownerItem.deleteOutputPortItem(this); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Destroys connections. + */ + _destroyConnections() + { + while (this._connectionItems.length > 0) + { + this._connectionItems[0].destroy(); + } + this._connectionItems = []; + } + + /** + * Handle click. + */ + _handleClick(event) + { + super._handleClick(event); + } +} + +export default OutputPortItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Items/WorkflowJobGroupItem.js b/rodan-client/code/src/js/Items/WorkflowJobGroupItem.js new file mode 100755 index 000000000..025f7d16d --- /dev/null +++ b/rodan-client/code/src/js/Items/WorkflowJobGroupItem.js @@ -0,0 +1,122 @@ +import BaseItem from './BaseItem'; +import BaseWorkflowJobItem from './BaseWorkflowJobItem'; +import GUI_EVENTS from '../Shared/Events'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; + +/** + * WorkflowJobGroup item. + */ +class WorkflowJobGroupItem extends BaseWorkflowJobItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + this._workflowJobUrls = options.model.get('workflow_jobs'); + var workflow = Radio.channel('rodan-client_gui').request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.menuItems = [{label: 'Edit', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOBGROUP_VIEW, options: {workflow: workflow, workflowjobgroup: this.getModel()}}, + {label: 'Ungroup', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNGROUP_WORKFLOWJOBGROUP, options: {workflowjobgroup: this.getModel(), workflow: workflow}}, + {label: 'Delete', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOBGROUP, options: {workflow: workflow, workflowjobgroup: this.getModel()}}]; + + this.coordinateSetInfo = []; + this.coordinateSetInfo['url'] = 'workflow_job_group'; + this.loadCoordinates(); + this.fillColor = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].WORKFLOWJOBGROUP_FILL_COLOR; + this._gotPorts = false; + } + + /** + * Update. + */ + update() + { + // Make sure WorkflowJobItems are hidden. + this._setWorkflowJobVisibility(false); + + // We need to get the associated ports. + if (!this._gotPorts) + { + this._getAssociatedPorts(); + } + + super.update(); + } + + /** + * Destroy cleanup. + */ + destroy() + { + this._setWorkflowJobVisibility(true); + var inputPortItems = this._paperGroupInputPorts.removeChildren(); + var outputPortItems = this._paperGroupOutputPorts.removeChildren(); + for (var index in inputPortItems) + { + inputPortItems[index].resetOwner(); + } + for (var index in outputPortItems) + { + outputPortItems[index].resetOwner(); + } + super.destroy(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle double click. + */ + _handleDoubleClick(mouseEvent) + { + var workflow = Radio.channel('rodan-client_gui').request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOBGROUP_VIEW, {workflowjobgroup: this.getModel(), workflow: workflow}); + } + + /** + * Set visibility of associated WorkflowJobItems. + */ + _setWorkflowJobVisibility(visible) + { + for (var index in this._workflowJobUrls) + { + var item = BaseItem.getAssociatedItem(this._workflowJobUrls[index]); + if (item) + { + item.setVisible(visible); + } + } + } + + /** + * Get associated ports. + */ + _getAssociatedPorts() + { + var workflow = Radio.channel('rodan-client_gui').request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + var ports = this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_GET_PORTS, {url: this._modelURL, workflow: workflow}); + if (ports) + { + for (var index in ports.inputports) + { + var inputPortItem = BaseItem.getAssociatedItem(ports.inputports[index].get('url')); + inputPortItem.setOwner(this._modelURL); + } + + for (index in ports.outputports) + { + var outputPortItem = BaseItem.getAssociatedItem(ports.outputports[index].get('url')); + outputPortItem.setOwner(this._modelURL); + } + this._gotPorts = true; + } + } +} + +export default WorkflowJobGroupItem; diff --git a/rodan-client/code/src/js/Items/WorkflowJobItem.js b/rodan-client/code/src/js/Items/WorkflowJobItem.js new file mode 100755 index 000000000..04dd1a6f7 --- /dev/null +++ b/rodan-client/code/src/js/Items/WorkflowJobItem.js @@ -0,0 +1,90 @@ +import BaseWorkflowJobItem from './BaseWorkflowJobItem'; +import GUI_EVENTS from '../Shared/Events'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; + +/** + * WorkflowJob item. + */ +class WorkflowJobItem extends BaseWorkflowJobItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC STATIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns context menu data for multiple items of this class. + * Takes in URLs of multiple selections. + * + * The menu data is simply an array of objects. Objects should be: + * + * { + * label: [string] // The text that should appear + * radiorequest: Rodan.RODAN_EVENTS.? // The Request to make. NOT A RADIO EVENT, rather a REQUEST. + * options: Object holding any options for Event + * } + */ + static getContextMenuDataMultiple() + { + var workflowJobs = Radio.channel('rodan-client_gui').request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_SELECTED_WORKFLOWJOBS); + var workflow = Radio.channel('rodan-client_gui').request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + return [{channel: 'rodan', label: 'Group', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOBGROUP, options: {workflowjobs: workflowJobs, workflow: workflow}}]; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + super(options); + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.menuItems = [{label: 'Edit', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_VIEW, options: {workflowjob: this.getModel(), workflow: workflow}}, + {label: 'Settings', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_SETTINGS_VIEW, options: {workflowjob: this.getModel(), workflow: workflow}}, + {label: 'Ports', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_PORTS_VIEW, options: {workflowjob: this.getModel(), workflow: workflow}}, + {label: 'Delete', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB, options: {workflowjob: this.getModel(), workflow: workflow}}]; + var model = this.getModel(); + if (!model.hasSettings()) + { + this.menuItems.splice(1, 1); + } + this.coordinateSetInfo = []; + this.coordinateSetInfo['url'] = 'workflow_job'; + this.loadCoordinates(); + } + + /** + * Destroy cleanup. + */ + destroy() + { + var inputPortItems = this._paperGroupInputPorts.removeChildren(); + var outputPortItems = this._paperGroupOutputPorts.removeChildren(); + for (var index in inputPortItems) + { + var port = inputPortItems[index]; + port.destroy(); + } + for (index in outputPortItems) + { + port = outputPortItems[index]; + port.destroy(); + } + super.destroy(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle double click. + */ + _handleDoubleClick(mouseEvent) + { + var workflow = this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_VIEW, {workflowjob: this.getModel(), workflow: workflow}); + } +} + +export default WorkflowJobItem; \ No newline at end of file diff --git a/rodan-client/code/src/js/Managers/ErrorManager.js b/rodan-client/code/src/js/Managers/ErrorManager.js new file mode 100755 index 000000000..c4db53c48 --- /dev/null +++ b/rodan-client/code/src/js/Managers/ErrorManager.js @@ -0,0 +1,98 @@ +import Backbone from 'backbone'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * General error manager. + */ +export default class ErrorHandler +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor() + { + window.onerror = (errorText, url, lineNumber, columnNumber, error) => this._handleJavaScriptError(errorText, url, lineNumber, columnNumber, error); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, (options) => this._handleError(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles Javscript error. + */ + _handleJavaScriptError(errorText, url, lineNumber, columnNumber, error) + { + var text = 'Rodan Client has encountered an unexpected error.

    '; + text += 'text: ' + errorText + '
    '; + text += 'url: ' + url + '
    '; + text += 'line: ' + lineNumber + '
    '; + text += 'column: ' + columnNumber; + this._showError(text, error); + } + + /** + * Handle error. + */ + _handleError(options) + { + var response = options.response; + var responseTextObject = response.responseText !== '' ? JSON.parse(response.responseText) : null; + if (responseTextObject !== null) + { + if (responseTextObject.hasOwnProperty('error_code')) + { + var error = options.response.responseJSON + var text = error.error_code + '
    '; + text += error.details[0]; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__SERVER_ERROR, {json: error}); + } + else + { + var response = options.response; + var responseTextObject = JSON.parse(response.responseText); + var message = 'An unknown error occured.'; + + // Look for message in options first. + if (options.hasOwnProperty('message')) + { + message = options.message; + } + + // Go through the response text. + var first = true; + for(var property in responseTextObject) + { + if (responseTextObject.hasOwnProperty(property)) + { + message += '\n'; + if (first) + { + message += '\n'; + first = false; + } + message += responseTextObject[property]; + } + } + this._showError(message, null); + } + } + else + { + this._showError(response.statusText, null); + } + } + + /** + * Show error. + */ + _showError(text, error) + { + console.error(error); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_ERROR, {content: text, title: 'Error'}); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Managers/TransferManager.js b/rodan-client/code/src/js/Managers/TransferManager.js new file mode 100755 index 000000000..5be5aff24 --- /dev/null +++ b/rodan-client/code/src/js/Managers/TransferManager.js @@ -0,0 +1,145 @@ +import Backbone from 'backbone'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * File transfer manager. This manages all file (i.e. Resource) uploads and downloads. + */ +export default class TransferManager +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor() + { + this._initializeRadio(); + this._uploadsPending = new Backbone.Collection(); + this._uploadsFailed = new Backbone.Collection(); + this._uploadsCompleted = new Backbone.Collection(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_DOWNLOAD, options => this._handleRequestDownload(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_GET_UPLOAD_COUNT, () => this._handleRequestGetUploadCount()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD, options => this._handleRequestMonitorUpload(options)); + } + + /** + * Handle download request. + */ + _handleRequestDownload(options) + { + var request = new XMLHttpRequest(); + request.open('GET', options.url, true); + request.responseType = 'blob'; + request.onreadystatechange = (event) => this._handleStateChange(event, options.filename, options.mimetype); + request.onprogress = (event) => this._handleDownloadProgress(event); + request.send(); + } + + /** + * Return upload count. + */ + _handleRequestGetUploadCount() + { + return {pending: this._uploadsPending.length, completed: this._uploadsCompleted.length, failed: this._uploadsFailed.length}; + } + + /** + * Handle request monitor upload. + */ + _handleRequestMonitorUpload(options) + { + var request = options.request; + request.id = this._getRandomId(); + options.id = request.id; + this._uploadsPending.add(options); + request.done((response, code, jqXHR) => this._handleUploadSuccess(response, code, jqXHR)); + request.fail((jqXHR, code, error) => this._handleUploadFail(jqXHR, code, error)); + } + + /** + * Handle upload success. + */ + _handleUploadSuccess(response, code, jqXHR) + { + var upload = this._uploadsPending.remove(jqXHR.id); + this._uploadsCompleted.add(upload); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__TRANSFERMANAGER_UPLOAD_SUCCEEDED, {request: upload.jqXHR, file: upload.file}); + } + + /** + * Handle upload fail. + */ + _handleUploadFail(jqXHR, code, error) + { + var upload = this._uploadsPending.remove(jqXHR.id); + this._uploadsFailed.add(upload); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__TRANSFERMANAGER_UPLOAD_FAILED, {request: upload.jqXHR, file: upload.file}); + } + + /** + * Handle request state change. + */ + _handleStateChange(request, filename, mimetype) + { + switch (request.currentTarget.readyState) + { + case 0: //UNSENT + { + break; + } + + case 1: //OPENED + { + break; + } + + case 2: //HEADERS_RECEIVED + { + break; + } + + case 3: //LOADING + { + break; + } + + case 4: + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__DOWNLOAD_START, {data: request.currentTarget.response, filename: filename, mimetype: mimetype}); + break; + } + + default: + { + break; + } + } + } + + /** + * Handle download progress. + */ + _handleDownloadProgress(event) + { + } + + /** + * Returns random 8-digit ID. + */ + _getRandomId() + { + return Math.floor((1 + Math.random()) * 10000000); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Managers/UpdateManager.js b/rodan-client/code/src/js/Managers/UpdateManager.js new file mode 100755 index 000000000..48ad16587 --- /dev/null +++ b/rodan-client/code/src/js/Managers/UpdateManager.js @@ -0,0 +1,59 @@ +import Configuration from 'js/Configuration'; +import PollUpdater from 'js/Updater/PollUpdater'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import SocketUpdater from 'js/Updater/SocketUpdater'; + +/** + * This manages how updates are handled. + */ +export default class UpdateManager +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor() + { + this._updater = null; + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__CONFIGURATION_LOADED, () => this._handleEventConfigurationLoaded()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__UPDATER_SET_COLLECTIONS, (options) => this._handleRequestUpdateSetFunction(options)); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__UPDATER_CLEAR, () => this._handleRequestUpdateClear()); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle config load. Reads the configuration and check for socket setting. + */ + _handleEventConfigurationLoaded() + { + if (Configuration.SERVER_SOCKET_AVAILABLE) + { + this._updater = new SocketUpdater(); + } + else + { + this._updater = new PollUpdater({frequency: Configuration.EVENT_TIMER_FREQUENCY}); + } + } + + /** + * Handle request Update set function. + */ + _handleRequestUpdateSetFunction(options) + { + this._updater.setCollections(options.collections); + } + + /** + * Handle request Update clear. + */ + _handleRequestUpdateClear(options) + { + this._updater.clear(); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/BaseModel.js b/rodan-client/code/src/js/Models/BaseModel.js new file mode 100755 index 000000000..2e50fa61d --- /dev/null +++ b/rodan-client/code/src/js/Models/BaseModel.js @@ -0,0 +1,189 @@ +import Backbone from 'backbone'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Base model. + */ +export default class BaseModel extends Backbone.Model +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + * + * @param {object} options initialization parameters for Backbone.Model + */ + constructor(options) + { + super(options); + this.on('change', (model, options) => this._onChange(model, options)); + this.on('sync', (model, response, options) => this._onSync(model, response, options)); + } + + /** + * URL override to add trailing slash. Also, the URL will depend if this model instance has been saved or not. + * If not saved, we have to use the plural route for the model to save it. + * That's the way Rodan works. :) + * + * @return {string} URL of Resource with trailing slash + */ + url() + { + var original_url = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_GET_ROUTE, this.routeName); + if (typeof this.get('uuid') !== 'undefined') + { + original_url = this.get('url'); + } + var parsed_url = original_url + ( original_url.charAt( original_url.length - 1 ) === '/' ? '' : '/' ); + return parsed_url; + } + + /** + * Override of destroy to allow for generic handling. + * + * @param {object} options Backbone.Model.destroy options object + */ + destroy(options) + { + options = this._applyResponseHandlers(options); + options.task = 'destroy'; + super.destroy(options); + } + + /** + * Override of save to allow for generic handling. + * + * @param {object} attributes attributes to change in model + * @param {object} options Backbone.Model.save options object + */ + save(attributes, options) + { + options = this._applyResponseHandlers(options); + options.task = 'save'; + return super.save(attributes, options); + } + + /** + * Override of fetch to allow for generic handling. + * + * @param {object} options Backbone.Model.fetch options object + */ + fetch(options) + { + options = this._applyResponseHandlers(options); + options.task = 'fetch'; + super.fetch(options); + } + + /** + * Returns descriptive string for model. This should be overridden by sub-classes. + * + * @return {string} returns 'no description available' unless overridden by subclass + */ + getDescription() + { + return 'no description available'; + } + + /** + * Parses ID out of resource type URL. + * + * @param {string} url URL with UUID at end + * @return {string} UUID + * @todo this should be in a utility file + */ + parseIdFromUrl(url) + { + var lastSlash = url.lastIndexOf('/'); + var subString = url.substring(0, lastSlash); + var secondLastSlash = subString.lastIndexOf('/'); + return url.substring(secondLastSlash + 1, lastSlash); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * On change handler. + */ + _onChange(model, response, options) + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__MODEL_CHANGE, {model: model, options: options}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__MODEL_CHANGE + model.get('url'), {model: model, options: options}); + } + + /** + * On sync handler. + */ + _onSync(model, response, options) + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__MODEL_SYNC, {model: model, response: response, options: options}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__MODEL_SYNC + model.get('url'), {model: model, response: response, options: options}); + } + + /** + * Applies response handlers. + */ + _applyResponseHandlers(options) + { + // Check if options are defined. + if (options === undefined) + { + options = {}; + } + + // Success. + var genericSuccessFunction = (model, response, options) => this._handleSuccessResponse(model, response, options); + if (!options.hasOwnProperty('success')) + { + options.success = (model, response, options) => this._handleSuccessResponse(model, response, options); + } + else + { + var customSuccessFunction = options.success; + options.success = function(model, response, options) + { + customSuccessFunction(model, response, options); + genericSuccessFunction(model, response, options); + }; + } + + // Error. + var genericErrorFunction = (model, response, options) => this._handleErrorResponse(model, response, options); + if (!options.hasOwnProperty('error')) + { + options.error = (model, response, options) => this._handleErrorResponse(model, response, options); + } + else + { + var customErrorFunction = options.error; + options.error = function(model, response, options) + { + customErrorFunction(model, response, options); + genericErrorFunction(model, response, options); + }; + } + + return options; + } + + /** + * Handle success response. + */ + _handleSuccessResponse(model, response, options) + { + } + + /** + * Handle error response. + */ + _handleErrorResponse(model, response, options) + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SYSTEM_HANDLE_ERROR, {model: model, + response: response, + options: options}); + } +} +BaseModel.prototype.idAttribute = 'uuid'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Connection.js b/rodan-client/code/src/js/Models/Connection.js new file mode 100755 index 000000000..7b6c9d930 --- /dev/null +++ b/rodan-client/code/src/js/Models/Connection.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * Connection. + */ +export default class Connection extends BaseModel {} +Connection.prototype.routeName = 'connections'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/InputPort.js b/rodan-client/code/src/js/Models/InputPort.js new file mode 100755 index 000000000..adbbb2d13 --- /dev/null +++ b/rodan-client/code/src/js/Models/InputPort.js @@ -0,0 +1,31 @@ +import BaseModel from './BaseModel'; + +/** + * InputPort. + */ +export default class InputPort extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Override of Backbone.Model.defaults. Sets default label to null. + * + * @return {object} defaults + */ + defaults() + { + return {label: null}; + } + + /** + * Returns human-readable descriptive text. + * + * @return {string} 'label' property + */ + getDescription() + { + return this.get('label'); + } +} +InputPort.prototype.routeName = 'inputports'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/InputPortType.js b/rodan-client/code/src/js/Models/InputPortType.js new file mode 100755 index 000000000..9c7effcc5 --- /dev/null +++ b/rodan-client/code/src/js/Models/InputPortType.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * InputPortType. + */ +export default class InputPortType extends BaseModel {} +InputPortType.prototype.routeName = 'inputporttypes'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Job.js b/rodan-client/code/src/js/Models/Job.js new file mode 100755 index 000000000..e2749720a --- /dev/null +++ b/rodan-client/code/src/js/Models/Job.js @@ -0,0 +1,48 @@ +import BaseModel from './BaseModel'; +import InputPortTypeCollection from 'js/Collections/InputPortTypeCollection'; +import OutputPortTypeCollection from 'js/Collections/OutputPortTypeCollection'; + +/** + * Job. + */ +export default class Job extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the model. Upon initialization the 'input_port_types' and 'output_port_types' will be set as Backbone.Collections. + * + * @param {object} options Backbone.Model options object; 'options.input_port_types' and 'options.output_port_types' may be given + */ + initialize(options) + { + this.set('input_port_types', new InputPortTypeCollection(options.input_port_types)); + this.set('output_port_types', new OutputPortTypeCollection(options.output_port_types)); + } + + /** + * Override of Backbone.Model.defaults. Sets 'input_port_types' and 'output_port_types' to null. + * + * @todo is this needed? + * @return {object} default properties + */ + defaults() + { + return {input_port_types: null, output_port_types: null}; + } + + /** + * Override of Backbone.Model.parse. The 'input_port_types' and 'output_port_types' will be set as Backbone.Collections. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + response.input_port_types = new InputPortTypeCollection(response.input_port_types); + response.output_port_types = new OutputPortTypeCollection(response.output_port_types); + return response; + } +} +Job.prototype.routeName = 'jobs'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/OutputPort.js b/rodan-client/code/src/js/Models/OutputPort.js new file mode 100755 index 000000000..31d3de49b --- /dev/null +++ b/rodan-client/code/src/js/Models/OutputPort.js @@ -0,0 +1,31 @@ +import BaseModel from './BaseModel'; + +/** + * InputPort. + */ +export default class OutputPort extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Override of Backbone.Model.defaults. Sets default label to null. + * + * @return {object} default properties + */ + defaults() + { + return {label: null}; + } + + /** + * Returns human-readable descriptive text. + * + * @return {string} 'label' property + */ + getDescription() + { + return this.get('label'); + } +} +OutputPort.prototype.routeName = 'outputports'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/OutputPortType.js b/rodan-client/code/src/js/Models/OutputPortType.js new file mode 100755 index 000000000..bc09706be --- /dev/null +++ b/rodan-client/code/src/js/Models/OutputPortType.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * OutputPortType. + */ +export default class OutputPortType extends BaseModel {} +OutputPortType.prototype.routeName = 'outputporttypes'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Pagination.js b/rodan-client/code/src/js/Models/Pagination.js new file mode 100755 index 000000000..b32a2db8a --- /dev/null +++ b/rodan-client/code/src/js/Models/Pagination.js @@ -0,0 +1,21 @@ +import BaseModel from './BaseModel'; + +/** + * Pagination. Note that this has no 'routeName' since pagination is stored within a Collection. This model is simply here for convenience. + */ +export default class Pagination extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Set defaults. + * + * @return {object} default properties + */ + defaults() + { + return {count: 0, next: '#', previous: '#', current: 1, total: 1}; + } +} +Pagination.prototype.routeName = null; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Project.js b/rodan-client/code/src/js/Models/Project.js new file mode 100755 index 000000000..944c0c169 --- /dev/null +++ b/rodan-client/code/src/js/Models/Project.js @@ -0,0 +1,43 @@ +import BaseModel from './BaseModel'; + +/** + * Project model. + */ +export default class Project extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Override of Backbone.Model.parse. This sets the 'workflow_count' if not provided by the server. + * + * @param {object} response JSON response from server + * @return {object} response object + * @todo why is it not being provided by the server? + */ + parse(response) + { + response = super.parse(response); + if (!response.hasOwnProperty('workflow_count')) + { + response.workflow_count = response.workflows.length; + } + return response; + } + + /** + * Return defaults. + * + * @return {object} default properties + */ + defaults() + { + return {creator: {username: null}, + created: null, + updated: null, + workflow_count: null, + resource_count: null, + name: 'untitled'}; + } +} +Project.prototype.routeName = 'projects'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Resource.js b/rodan-client/code/src/js/Models/Resource.js new file mode 100755 index 000000000..0f357b13f --- /dev/null +++ b/rodan-client/code/src/js/Models/Resource.js @@ -0,0 +1,199 @@ +import Backbone from 'backbone'; +import Radio from 'backbone.radio'; +import _ from 'underscore'; + +import BaseModel from './BaseModel'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * Resource. + */ +export default class Resource extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + this._updateResourceTypeFull(); + this.set('download', this._getDownloadUrl()); + this.on('change:resource_type', () => { this._updateResourceTypeFull(); this._updateResourceLabelsFull() }); + this.on('change:resource_file', () => this.set('download', this._getDownloadUrl())); + + this._updateResourceLabelsFull(); + this.on('change:labels', () => this._updateResourceLabelsFull()); + + // If the creator is null (i.e. was not uploaded by a person), inject a dummy. + if (this.get('creator') === null) + { + this.set('creator', 'generated result'); + } + } + + /** + * Override of Backbone.Model.parse. If the 'creator' is null it gets set to 'generated result'. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + if (response.creator === null) + { + response.creator = 'generated result'; + } + return response; + } + + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return { + creator: {first_name: null, last_name: null, username: null}, + created: null, + updated: null, + labels: [], + resource_label_full: '' + }; + } + + /** + * Override of Backbone.Model.sync. This is done to facilitate file uploads. + * + * @param {string} method synce method (@see Backbone.sync) + * @param {object} model JavaScript object that holds properties for Resource + * @param {object} options options to be passed to the AJAX call + * @return {object} XmlHttpRequest instance + */ + sync(method, model, options) + { + if (method === 'create') + { + var formData = new FormData(); + formData.append('project', model.get('project')); + formData.append('files', model.get('file')); + formData.append('label_names', model.get('label_names')); + if (model.has('resource_type')) + { + formData.append('type', model.get('resource_type')); + } + if (model.has('label_names')) + { + formData.append('label_names', model.get('label_names')); + model.unset('label_names'); + } + if (model.has('label_uuids')) + { + formData.append('label_uuids', model.get('label_uuids')); + model.unset('label_uuids'); + } + + // Set processData and contentType to false so data is sent as FormData + _.defaults(options || (options = {}), { + url: this.url(), + data: formData, + processData: false, + contentType: false + }); + } + return Backbone.sync.call(this, method, model, options); + } + + /** + * Returns UUID of associated ResourceType. + * + * @return {string} UUID of associated ResourceType; null if DNE + */ + getResourceTypeUuid() + { + if (this.get('resource_type') !== undefined) + { + var lastSlash = this.get('resource_type').lastIndexOf('/'); + var subString = this.get('resource_type').substring(0, lastSlash); + var secondLastSlash = subString.lastIndexOf('/'); + return this.get('resource_type').substring(secondLastSlash + 1, lastSlash); + } + return null; + } + + /** + * Returns UUID from a ResourceLabel URL. + * + * @return {string} UUID of a ResourceLabel. + */ + getResourceLabelUuid(url) + { + var lastSlash = url.lastIndexOf('/'); + var subString = url.substring(0, lastSlash); + var secondLastSlash = subString.lastIndexOf('/'); + return url.substring(secondLastSlash + 1, lastSlash); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Updates full description of resource type. + */ + _updateResourceTypeFull() + { + var resourceTypeCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + var resourceTypeId = this.getResourceTypeUuid(); + var jsonString = {}; + if (resourceTypeId !== null) + { + jsonString = resourceTypeCollection.get(resourceTypeId).toJSON(); + } + this.set('resource_type_full', jsonString); + } + + /** + * Updates label names. + */ + _updateResourceLabelsFull() + { + var resourceLabelCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABEL_COLLECTION); + let success = () => { + let jsonStrings = []; + let resourceLabelIds = this.get('labels').map(url => this.getResourceLabelUuid(url)); + resourceLabelIds.forEach(id => { + let val = resourceLabelCollection.get(id); + if (val) + { + jsonStrings.push(val.toJSON()); + } + else + { + console.warn("skipping label with id " + id); + } + }); + this.set('resource_label_full', jsonStrings); + }; + resourceLabelCollection.fetch({ + data: { + disable_pagination: true + }, + success: success.bind(this) + }); + } + + /** + * Returns download URL. + */ + _getDownloadUrl() + { + if (this.get('resource_file')) + { + return this.get('resource_file'); + } + return null; + } +} +Resource.prototype.routeName = 'resources'; diff --git a/rodan-client/code/src/js/Models/ResourceLabel.js b/rodan-client/code/src/js/Models/ResourceLabel.js new file mode 100644 index 000000000..c1a70892f --- /dev/null +++ b/rodan-client/code/src/js/Models/ResourceLabel.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * ResourceLabel + */ +export default class ResourceLabel extends BaseModel {} +ResourceLabel.prototype.routeName = 'labels'; diff --git a/rodan-client/code/src/js/Models/ResourceList.js b/rodan-client/code/src/js/Models/ResourceList.js new file mode 100755 index 000000000..f504100fa --- /dev/null +++ b/rodan-client/code/src/js/Models/ResourceList.js @@ -0,0 +1,95 @@ +import BaseModel from './BaseModel'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ResourceCollection from 'js/Collections/ResourceCollection'; + +/** + * ResourceList. + */ +export default class ResourceList extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Backbone.Model options object + */ + initialize(options) + { + this._updateResourceTypeFull(); + this.on('change:resource_type', () => this._updateResourceTypeFull()); + + // If the creator is null (i.e. was not uploaded by a person), inject a dummy. + if (this.get('creator') === null) + { + this.set('creator', 'generated result'); + } + } + + /** + * Override of Backbone.Model.parse. If the 'creator' is null it gets set to 'generated result'. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + if (response.creator === null) + { + response.creator = 'generated result'; + } + return response; + } + + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return { + creator: {first_name: null, last_name: null, username: null}, + created: null, + updated: null + }; + } + + /** + * Returns UUID of associated ResourceType. + * + * @return {string} UUID of associated ResourceType; null if DNE + */ + getResourceTypeUuid() + { + if (this.get('resource_type')) + { + var lastSlash = this.get('resource_type').lastIndexOf('/'); + var subString = this.get('resource_type').substring(0, lastSlash); + var secondLastSlash = subString.lastIndexOf('/'); + return this.get('resource_type').substring(secondLastSlash + 1, lastSlash); + } + return null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Updates full description of resource type. + */ + _updateResourceTypeFull() + { + var resourceTypeId = this.getResourceTypeUuid(); + var jsonString = {}; + if (resourceTypeId !== null) + { + var resourceTypeCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + jsonString = resourceTypeCollection.get(resourceTypeId).toJSON(); + } + this.set('resource_type_full', jsonString); + } +} +ResourceList.prototype.routeName = 'resourcelists'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/ResourceType.js b/rodan-client/code/src/js/Models/ResourceType.js new file mode 100755 index 000000000..16aac2978 --- /dev/null +++ b/rodan-client/code/src/js/Models/ResourceType.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * ResourceType + */ +export default class ResourceType extends BaseModel {} +ResourceType.prototype.routeName = 'resourcetypes'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/RunJob.js b/rodan-client/code/src/js/Models/RunJob.js new file mode 100755 index 000000000..a3d43d1ad --- /dev/null +++ b/rodan-client/code/src/js/Models/RunJob.js @@ -0,0 +1,113 @@ +import BaseModel from './BaseModel'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * RunJob. + */ +export default class RunJob extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + this.set('statusText', this._getStatusText(this.get('status'))); + this.set('available', this.available()); + } + + /** + * Return true if the current user can lock as a manual RunJob. + * + * @return {boolean} true if the current user can lock as a manual RunJob + */ + available() + { + var currentUser = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_USER); + if (this.get('interactive_acquire') !== null && this.get('status') === 2) + { + var serverDate = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_DATE); + var expiryDate = new Date(this.get('working_user_expiry')); + if (this.get('working_user') === null || + this.get('working_user') === currentUser.get('url') || + serverDate.getTime() > expiryDate.getTime()) + { + return true; + } + } + return false; + } + + /** + * Override of Backbone.Model.parse. Sets the 'statusText' field. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + response.statusText = this._getStatusText(response.status); + return response; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Return text based on status. + */ + _getStatusText(status) + { + switch(status) + { + case -1: + { + return 'Failed'; + } + + case 0: + { + return 'Scheduled'; + } + + case 1: + { + return 'Processing'; + } + + case 2: + { + return 'Waiting for input'; + } + + case 4: + { + return 'Finished'; + } + + case 8: + { + return 'Expired'; + } + + case 9: + { + return 'Cancelled'; + } + + case 11: + { + return 'Retrying'; + } + + default: + { + return 'Unknown status'; + } + } + } +} +RunJob.prototype.routeName = 'runjobs'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/User.js b/rodan-client/code/src/js/Models/User.js new file mode 100755 index 000000000..1462ed28c --- /dev/null +++ b/rodan-client/code/src/js/Models/User.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * User. + */ +export default class User extends BaseModel {} +User.prototype.routeName = 'users'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/UserPreference.js b/rodan-client/code/src/js/Models/UserPreference.js new file mode 100755 index 000000000..b69ed6eaa --- /dev/null +++ b/rodan-client/code/src/js/Models/UserPreference.js @@ -0,0 +1,7 @@ +import BaseModel from './BaseModel'; + +/** + * UserPreference. + */ +export default class UserPreference extends BaseModel {} +UserPreference.prototype.routeName = 'userpreferences'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/Workflow.js b/rodan-client/code/src/js/Models/Workflow.js new file mode 100755 index 000000000..f2bf65901 --- /dev/null +++ b/rodan-client/code/src/js/Models/Workflow.js @@ -0,0 +1,78 @@ +import BaseModel from './BaseModel'; +import ConnectionCollection from 'js/Collections/ConnectionCollection'; +import InputPortCollection from 'js/Collections/InputPortCollection'; +import OutputPortCollection from 'js/Collections/OutputPortCollection'; +import WorkflowJobCollection from 'js/Collections/WorkflowJobCollection'; +import WorkflowRunCollection from 'js/Collections/WorkflowRunCollection'; + +/** + * Workflow. + */ +export default class Workflow extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize + * + * @param {object} options Backbone.Model options object; 'options.connections' (ConnectionCollection or associated Backbone.Collection raw-object representation), 'options.workflow_input_ports' (InputPortCollection or associated Backbone.Collection raw-object representation), 'options.workflow_output_ports' (OutputPortCollection or associated Backbone.Collection raw-object representation), 'options.workflow_jobs' (WorkflowJobCollection or associated Backbone.Collection raw-object representation), and 'options.workflow_runs' (WorkflowRunCollection or associated Backbone.Collection raw-object representation) must also be provided + */ + initialize(options) + { + this.set('connections', new ConnectionCollection(options.connections)); + this.set('workflow_input_ports', new InputPortCollection(options.workflow_input_ports)); + this.set('workflow_output_ports', new OutputPortCollection(options.workflow_output_ports)); + this.set('workflow_jobs', new WorkflowJobCollection(options.workflow_jobs)); + this.set('workflow_runs', new WorkflowRunCollection(options.workflow_runs)); + } + + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return {description: null, name: null, created: null, updated: null, valid: false}; + } + + /** + * Override of Backbone.Model.parse. This will populate 'workflow_runs', 'workflow_jobs', 'workflow_input_ports', and 'workflow_output_ports' with the appropriate models. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + for (var i in response.workflow_runs) + { + var modelClass = this.get('workflow_runs').model; + var model = new modelClass(response.workflow_runs[i]); + this.get('workflow_runs').add(model, {merge: true}); + } + response.workflow_runs = this.get('workflow_runs'); + + for (var i in response.workflow_jobs) + { + var modelClass = this.get('workflow_jobs').model; + var model = new modelClass(response.workflow_jobs[i]); + this.get('workflow_jobs').add(model, {merge: true}); + } + response.workflow_jobs = this.get('workflow_jobs'); + + this.get('workflow_input_ports').set(response.workflow_input_ports, {merge: true, remove: true}); + response.workflow_input_ports = this.get('workflow_input_ports'); + + for (var i in response.workflow_output_ports) + { + var modelClass = this.get('workflow_output_ports').model; + var model = new modelClass(response.workflow_output_ports[i]); + this.get('workflow_output_ports').add(model, {merge: true}); + } + response.workflow_output_ports = this.get('workflow_output_ports'); + + return response; + } +} +Workflow.prototype.routeName = 'workflows'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/WorkflowJob.js b/rodan-client/code/src/js/Models/WorkflowJob.js new file mode 100755 index 000000000..cafd59578 --- /dev/null +++ b/rodan-client/code/src/js/Models/WorkflowJob.js @@ -0,0 +1,100 @@ +import $ from 'jquery'; +import BaseModel from './BaseModel'; +import InputPortCollection from 'js/Collections/InputPortCollection'; +import OutputPortCollection from 'js/Collections/OutputPortCollection'; + +/** + * WorkflowJob. + */ +export default class WorkflowJob extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Backbone.Model options object; 'options.input_ports' (InputPortCollection or associated Backbone.Collection raw-object representation) and 'options.output_ports' (OutputPortCollection or associated Backbone.Collection raw-object representation) must also be provided + */ + initialize(options) + { + var inputPortCollection = new InputPortCollection(); + var outputPortCollection = new OutputPortCollection(); + inputPortCollection.set(options.input_ports); + outputPortCollection.set(options.output_ports); + this.set('input_ports', inputPortCollection); + this.set('output_ports', outputPortCollection); + } + + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return {input_ports: null, output_ports: null, job_name: null, job_description: null}; + } + + /** + * Override of Backbone.Model.parse. This will populate 'input_ports' and 'output_ports' with associated models. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + for (var i in response.input_ports) + { + var ModelClass = this.get('input_ports').model; + var model = new ModelClass(response.input_ports[i]); + this.get('input_ports').add(model, {merge: true}); + } + response.input_ports = this.get('input_ports'); + + for (i in response.output_ports) + { + var ModelClass = this.get('output_ports').model; + var model = new ModelClass(response.output_ports[i]); + this.get('output_ports').add(model, {merge: true}); + } + response.output_ports = this.get('output_ports'); + + return response; + } + + /** + * Returns UUID of associated Job. + * + * @return {string} UUID of associated Job + */ + getJobUuid() + { + var lastSlash = this.get('job').lastIndexOf('/'); + var subString = this.get('job').substring(0, lastSlash); + var secondLastSlash = subString.lastIndexOf('/'); + return this.get('job').substring(secondLastSlash + 1, lastSlash); + } + + /** + * Returns human-readable descriptive text. + * + * @return {string} 'name' and 'job_description' (from associated Job) + */ + getDescription() + { + var string = this.get('name') + ': ' + this.get('job_description'); + return string; + } + + /** + * Returns true if this WorkflowJob has settings. + * + * @return {boolean} true if this WorkflowJob has settings + */ + hasSettings() + { + return !$.isEmptyObject(this.get('job_settings')); + } +} +WorkflowJob.prototype.routeName = 'workflowjobs'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/WorkflowJobGroup.js b/rodan-client/code/src/js/Models/WorkflowJobGroup.js new file mode 100755 index 000000000..6361d1eb7 --- /dev/null +++ b/rodan-client/code/src/js/Models/WorkflowJobGroup.js @@ -0,0 +1,21 @@ +import BaseModel from './BaseModel'; + +/** + * WorkflowJobGroup. + */ +export default class WorkflowJobGroup extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return {name: 'untitled'}; + } +} +WorkflowJobGroup.prototype.routeName = 'workflowjobgroups'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Models/WorkflowRun.js b/rodan-client/code/src/js/Models/WorkflowRun.js new file mode 100755 index 000000000..c2318c714 --- /dev/null +++ b/rodan-client/code/src/js/Models/WorkflowRun.js @@ -0,0 +1,98 @@ +import BaseModel from './BaseModel'; + +/** + * WorkflowRun. + */ +export default class WorkflowRun extends BaseModel +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + this.set('statusText', this._getStatusText(this.get('status'))); + } + + /** + * Returns defaults. + * + * @return {object} object holding default values + */ + defaults() + { + return {created: null, updated: null}; + } + + /** + * Override of Backbone.Model.parse. This will populate 'statusText' from the existing status. + * + * @param {object} response JSON response from server + * @return {object} response object + */ + parse(response) + { + this.set('statusText', this._getStatusText(response.status)); + return response; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Return text based on status. + */ + _getStatusText(status) + { + switch(status) + { + case -1: + { + return 'Failed'; + } + + case 0: + { + return 'Scheduled'; + } + + case 1: + { + return 'Processing'; + } + + case 2: + { + return 'Waiting for input'; + } + + case 4: + { + return 'Finished'; + } + + case 8: + { + return 'Expired'; + } + + case 9: + { + return 'Cancelled'; + } + + case 11: + { + return 'Retrying'; + } + + default: + { + return 'Unknown status'; + } + } + } +} +WorkflowRun.prototype.routeName = 'workflowruns'; \ No newline at end of file diff --git a/rodan-client/code/src/js/Plugins.js b/rodan-client/code/src/js/Plugins.js new file mode 100644 index 000000000..658593b5f --- /dev/null +++ b/rodan-client/code/src/js/Plugins.js @@ -0,0 +1 @@ +console.log("Plugins loaded.") diff --git a/rodan-client/code/src/js/Shared/Cookie.js b/rodan-client/code/src/js/Shared/Cookie.js new file mode 100755 index 000000000..55ef4f2d9 --- /dev/null +++ b/rodan-client/code/src/js/Shared/Cookie.js @@ -0,0 +1,88 @@ +/** + * ES6 Port of the Cappuccino CPCookie Class. + */ +export default class Cookie +{ + /** + * Constructor. + * + * @param {string} name name of cookie + */ + constructor(name) + { + this._cookieName = name; + this._cookieValue = this._readCookieValue(); + this._expires = null; + } + + /** + * Saves provided info as cookie. + * + * @param {string} name name of cookie + * @param {string} value value of cookie + * @param {integer} days days until expiration of cookie + */ + static saveCookie(name, value, days) + { + var date = new Date(); + date.setTime(date.getTime() + (days * 86400000)); + var expires = 'expires=' + date.toUTCString(); + document.cookie = name + '=' + value + '; ' + expires; + } + + /** + * Returns name. + * + * @return {string} name + */ + get name() + { + return this._cookieName; + } + + /** + * Returns value. + * + * @return {string} value + */ + get value() + { + return this._cookieValue; + } + + /** + * Returns expiration date. + * + * @return {Date} expiration date + */ + get expires() + { + return this._expires; + } + + /** + * Returns value of cookie. + * + * @return {string} value of cookie + */ + _readCookieValue() + { + var name = this._cookieName + '=', + ca = document.cookie.split(';'); + + for (var i = 0, len = ca.length; i < len; i++) + { + var c = ca[i]; + while (c.charAt(0) === ' ') + { + c = c.substring(1, c.length); + } + + if (c.indexOf(name) === 0) + { + return c.substring(name.length, c.length); + } + } + return ''; + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Shared/Environment.js b/rodan-client/code/src/js/Shared/Environment.js new file mode 100755 index 000000000..741178d80 --- /dev/null +++ b/rodan-client/code/src/js/Shared/Environment.js @@ -0,0 +1,82 @@ +let _os = null; +let _keyControls = { + 'Windows': { + 'range': 'shiftKey', + 'multiple': 'ctrlKey' + }, + 'MacOS': { + 'range': 'shiftKey', + 'multiple': 'metaKey' + }, + 'Linux': { + 'range': 'shiftKey', + 'multiple': 'ctrlKey' + }, + 'UNIX': { + 'range': 'shiftKey', + 'multiple': 'ctrlKey' + }, + 'Unknown OS': { + 'range': 'shiftKey', + 'multiple': 'ctrlKey' + } +}; + +/** + * Global environment constants. + */ +export default class Environment +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS - Static +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns string denoting detected operating system. + * + * @return {string} 'Windows', 'MacOS', 'UNIX', 'Linux', or 'Unknown OS' + */ + static getOS() + { + if (_os === null) + { + _os = 'Unknown OS'; + if (navigator.appVersion.indexOf('Win') !== -1) + { + _os='Windows'; + } + if (navigator.appVersion.indexOf('Mac') !== -1) + { + _os = 'MacOS'; + } + if (navigator.appVersion.indexOf('X11') !== -1) + { + _os = 'UNIX'; + } + if (navigator.appVersion.indexOf('Linux') !== -1) + { + _os = 'Linux'; + } + } + return _os; + } + + /** + * Get multiple selection key. + * + * @return {string} returns 'contol' or 'command', depending on OS + */ + static getMultipleSelectionKey() + { + return _keyControls[Environment.getOS()].multiple; + } + + /** + * Get range selection key. + * + * @return {string} returns range selection key (e.g. 'shift'), depending on OS + */ + static getRangeSelectionKey() + { + return _keyControls[Environment.getOS()].range; + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Shared/Events.js b/rodan-client/code/src/js/Shared/Events.js new file mode 100755 index 000000000..bbf2fc96c --- /dev/null +++ b/rodan-client/code/src/js/Shared/Events.js @@ -0,0 +1,15 @@ +/** + * Backbone.Radio events use in this GUI. + */ +var GUI_EVENTS = +{ + REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW: 'REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW', + EVENT__WORKFLOWBUILDER_GUI_DESTROY: 'EVENT__WORKFLOWBUILDER_GUI_DESTROY', // Called when WorkflowBuilder has been destroyed. + REQUEST__WORKFLOWBUILDER_GUI_ZOOM_IN: 'REQUEST__WORKFLOWBUILDER_GUI_ZOOM_IN', // Called when request workspace zoom in. + REQUEST__WORKFLOWBUILDER_GUI_ZOOM_OUT: 'REQUEST__WORKFLOWBUILDER_GUI_ZOOM_OUT', // Called when request workspace zoom out. + REQUEST__WORKFLOWBUILDER_GUI_ZOOM_RESET: 'REQUEST__WORKFLOWBUILDER_GUI_ZOOM_RESET', // Called when request workspace zoom reset. + REQUEST__WORKFLOWBUILDER_GUI_ADD_RESOURCEDISTRIBUTOR: 'REQUEST__WORKFLOWBUILDER_GUI_ADD_RESOURCEDISTRIBUTOR', + REQUEST__WORKFLOWBUILDER_GUI_GET_SELECTED_WORKFLOWJOBS: 'REQUEST__WORKFLOWBUILDER_GUI_GET_SELECTED_WORKFLOWJOBS' // Called when request list of all selected WorkflowJob IDs. +}; + +export default GUI_EVENTS; \ No newline at end of file diff --git a/rodan-client/code/src/js/Shared/RODAN_EVENTS.js b/rodan-client/code/src/js/Shared/RODAN_EVENTS.js new file mode 100755 index 000000000..05755970b --- /dev/null +++ b/rodan-client/code/src/js/Shared/RODAN_EVENTS.js @@ -0,0 +1,574 @@ +import Radio from 'backbone.radio'; + +// todo +// CONTROLLERS: workflowjob messages the builder and it shouldn't + +// TODO - in final docs, explain +// +// make model saves like workflowjob controller; only specify the "changed" fields +// server errors (json) +// explain options for route +// data: {query parameters} +// explain the "Global" collections +// difference between events and requests +// fields: {object with attributes to change} +// how configuration.js is used for some events +// why we use "Collection" and not "List" +// mark some of these as "hidden" or try to remove them + +let _instance = null; + +/** + * Backbone.Radio events use in the client. Do not instantiate this class. + */ +class RODAN_EVENTS +{ + /** @ignore */ + constructor() + { + if (_instance) + { + throw new Error('this class cannot be instantiated more than once'); + } + _instance = this; + + /** @ignore */ + this.REQUEST__RESOURCE_SHOWLAYOUTVIEW = 'REQUEST__RESOURCE_SHOWLAYOUTVIEW'; // Show LayoutView for Resource control (outside of the primary Resources view). This tells the ControllerResource which LayoutView to reference upon events. Takes {layoutView: LayoutView}. + /** @ignore */ + this.REQUEST__RUNJOB_SHOWLAYOUTVIEW = 'REQUEST__RUNJOB_SHOWLAYOUTVIEW'; // Show LayoutView for RunJob control (outside of the primary RunJobs view). This tells the ControllerRunJob which LayoutView to reference upon events. Takes {layoutView: LayoutView}. + /** @ignore */ + this.EVENT__SERVER_WENTAWAY = 'EVENT__SERVER_WENTAWAY'; // Called on server disconnect. No pass. + /** @ignore */ + this.EVENT__SERVER_PANIC = 'EVENT__SERVER_PANIC'; // Called when the app suspects that something went wrong. + /** @ignore */ + this.REQUEST__SYSTEM_HANDLE_ERROR = 'REQUEST__SYSTEM_HANDLE_ERROR'; // Sends error to error handler. Takes {model: BaseModel, response: HTTP response, option: associated options}. + + /////////////////////////////////////////////////////////////////////////////////////// + // Authentication + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when authentication error occurred with no other info. */ + this.EVENT__AUTHENTICATION_ERROR_NULL = 'EVENT__AUTHENTICATION_ERROR_NULL'; + /** Triggered on success of authentication check. Sends {user: User}. */ + this.EVENT__AUTHENTICATION_LOGIN_SUCCESS = 'EVENT__AUTHENTICATION_LOGIN_SUCCESS'; + /** Triggered after authentication attempt; user must log in. */ + this.EVENT__AUTHENTICATION_LOGINREQUIRED = 'EVENT__AUTHENTICATION_LOGINREQUIRED'; + /** Triggered on success of deauthentication. */ + this.EVENT__AUTHENTICATION_LOGOUT_SUCCESS = 'EVENT__AUTHENTICATION_LOGOUT_SUCCESS'; + /** Request check of authentication status. The client will make a request to the Rodan server. Upon response from the server, the client will fire one of the above AUTHENTICATION events. */ + this.REQUEST__AUTHENTICATION_CHECK = 'REQUEST__AUTHENTICATION_CHECK'; + /** Request login authentication. Takes {username: string, password: string}. Upon response from the server, the client will fire one of the above AUTHENTICATION events. */ + this.REQUEST__AUTHENTICATION_LOGIN = 'REQUEST__AUTHENTICATION_LOGIN'; + /** Request logout for currently logged in user. Upon response from the server, the client will fire one of the above AUTHENTICATION events. */ + this.REQUEST__AUTHENTICATION_LOGOUT = 'REQUEST__AUTHENTICATION_LOGOUT'; + /** Request currently logged in User. Returns User or null. */ + this.REQUEST__AUTHENTICATION_USER = 'REQUEST__AUTHENTICATION_USER'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Configuration + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when configuration file has been loaded. */ + this.EVENT__CONFIGURATION_LOADED = 'EVENT__CONFIGURATION_LOADED'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Context Menu + /////////////////////////////////////////////////////////////////////////////////////// + /** Request context menu be hidden. */ + this.REQUEST__CONTEXTMENU_HIDE = 'REQUEST__CONTEXTMENU_HIDE'; + /** Request context menu be shown. Takes {items: [{label: string, channel: string (Radio channel; default: 'rodan'), request: string (Radio request name), options: object (optional; options sent to Radio request)}], top: float (coordinate), left: float (coordinate)}. */ + this.REQUEST__CONTEXTMENU_SHOW = 'REQUEST__CONTEXTMENU_SHOW'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Download + /////////////////////////////////////////////////////////////////////////////////////// + /** Request a download to client machine be initiated. Takes {data: (data object/string/etc), mimetype: string (mime type), filename: string}. */ + this.REQUEST__DOWNLOAD_START = 'REQUEST__DOWNLOAD_START'; + + /////////////////////////////////////////////////////////////////////////////////////// + // General + /////////////////////////////////////////////////////////////////////////////////////// + /** Request "API" information to be show. */ + this.REQUEST__SHOW_API = 'REQUEST__SHOW_API', + /** Request last 100 Radio events. Returns [{name (string), event (string), options (object)}]. */ + this.REQUEST__LOG = 'REQUEST__LOG'; + /** Request "About" information be shown. */ + this.REQUEST__SHOW_ABOUT = 'REQUEST__SHOW_ABOUT'; + /** Request "Help" page be shown. */ + this.REQUEST__SHOW_HELP = 'REQUEST__SHOW_HELP'; + /** Request show pagination buttons in navigation view */ + this.REQUEST__SHOW_NAVIGATION_PAGINATION = 'REQUEST__SHOW_NAVIGATION_PAGINATION'; + /** Request update navigation pagination */ + this.REQUEST__UPDATE_NAVIGATION_PAGINATION = 'REQUEST__UPDATE_NAVIGATION_PAGINATION'; + /** Request pagination from navigation bar for first */ + this.REQUEST__NAVIGATION_PAGINATION_FIRST = 'REQUEST__NAVIGATION_PAGINATION_FIRST'; + /** Request pagination from navigation bar for previous */ + this.REQUEST__NAVIGATION_PAGINATION_PREVIOUS = 'REQUEST__NAVIGATION_PAGINATION_PREVIOUS'; + /** Request pagination from navigation bar for next */ + this.REQUEST__NAVIGATION_PAGINATION_NEXT = 'REQUEST__NAVIGATION_PAGINATION_NEXT'; + /** Request pagination from navigation bar for last */ + this.REQUEST__NAVIGATION_PAGINATION_LAST = 'REQUEST__NAVIGATION_PAGINATION_LAST'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Global Collections + // + // The 'LOAD' commands are not meant for general use. They are called on startup. + /////////////////////////////////////////////////////////////////////////////////////// + /** Request all InputPortTypes. Returns GlobalInputPortTypeCollection. */ + this.REQUEST__GLOBAL_INPUTPORTTYPE_COLLECTION = 'REQUEST__GLOBAL_INPUTPORTTYPE_COLLECTION'; + /** Request load of InputPortTypes from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_INPUTPORTTYPES_LOAD = 'REQUEST__GLOBAL_INPUTPORTTYPES_LOAD'; + /** Request all Jobs. Returns GlobalJobCollection. */ + this.REQUEST__GLOBAL_JOB_COLLECTION = 'REQUEST__GLOBAL_JOB_COLLECTION'; + /** Request load of Jobs from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_JOBS_LOAD = 'REQUEST__GLOBAL_JOBS_LOAD'; + /** Request all OutputPortTypes. Returns GlobalOutputPortTypeCollection. */ + this.REQUEST__GLOBAL_OUTPUTPORTTYPE_COLLECTION = 'REQUEST__GLOBAL_OUTPUTPORTTYPE_COLLECTION'; + /** Request load of OutputPortTypes from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_OUTPUTPORTTYPES_LOAD = 'REQUEST__GLOBAL_OUTPUTPORTTYPES_LOAD'; + /** Request all Projects. Returns GlobalProjectCollection. */ + this.REQUEST__GLOBAL_PROJECT_COLLECTION = 'REQUEST__GLOBAL_PROJECT_COLLECTION'; + /** Request load of Projects from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_PROJECTS_LOAD = 'REQUEST__GLOBAL_PROJECTS_LOAD'; + /** Request all ResourceTypes. Returns GlobalResourceTypeCollection. */ + this.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION = 'REQUEST__GLOBAL_RESOURCETYPE_COLLECTION'; + /** Request load of ResourceTypes from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_RESOURCETYPES_LOAD = 'REQUEST__GLOBAL_RESOURCETYPES_LOAD'; + /** Request all ResourceLabels. Returns GlobalResourceLabelCollection. */ + this.REQUEST__GLOBAL_RESOURCELABEL_COLLECTION = 'REQUEST__GLOBAL_RESOURCELABEL_COLLECTION'; + /** Request load of ResourceLabels from server. Takes {data: {query parameters}}. */ + this.REQUEST__GLOBAL_RESOURCELABELS_LOAD = 'REQUEST__GLOBAL_RESOURCELABELS_LOAD'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Main Region + /////////////////////////////////////////////////////////////////////////////////////// + /** Request main region be filled with provided Marionette View. Takes {view: Marionette.View}. */ + this.REQUEST__MAINREGION_SHOW_VIEW = 'REQUEST__MAINREGION_SHOW_VIEW'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Modal + /////////////////////////////////////////////////////////////////////////////////////// + /** Request an error be displayed. This is a "convenience" request -- if a modal is currently visible (which is probably related somehow to the error) the footer will be updated with the error message. If no modal visible, REQUEST__MODAL_SHOW will be called. Takes {content: Marionette.View OR string}. */ + this.REQUEST__MODAL_ERROR = 'REQUEST__MODAL_ERROR'; + /** Request modal window to hide/close. */ + this.REQUEST__MODAL_HIDE = 'REQUEST__MODAL_HIDE'; + /** Request modal window to show/open with provided Marionette View. If another modal is currently open the request will not show. Takes {content: string, title: string}. */ + this.REQUEST__MODAL_SHOW = 'REQUEST__MODAL_SHOW'; + /** Request the current modal window (if available) have the provided text set in the footer. If no modal is visible, will put message in REQUEST__MODAL_SHOW. Takes {content: Marionette.View OR string}. */ + this.REQUEST__MODAL_SHOW_IMPORTANT = 'REQUEST__MODAL_SHOW_IMPORTANT'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Model + // + // In addition to the three events below, each model will fire its own custom events: + // - EVENT__MODEL_CHANGE + // - EVENT__MODEL_SYNC + // + // These events are fired on the 'rodan' Radio channel. These are useful if you wish + // to listen only for events by specific models, but regardless of the encapsulating + // Backbone object. + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when an instance of BaseModel has been added to a Backbone.Collection. Sends {model: BaseModel, collection: BaseCollection, options: Javascript object}). */ + this.EVENT__COLLECTION_ADD = 'EVENT__COLLECTION_ADD'; + /** Triggered when an instance of BaseModel has changed (bound to 'change' event in Backbone). Sends {model: BaseModel, options: Javascript object}. */ + this.EVENT__MODEL_CHANGE = 'EVENT__MODEL_CHANGE'; + /** Triggered when an instance of BaseModel has been synced (bound to 'sync' event in Backbone). Sends {model: BaseModel, response: XMLHTTPRequest, options: Javascript object}. */ + this.EVENT__MODEL_SYNC = 'EVENT__MODEL_SYNC'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Project + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when User has been added as Project admin. Sends {project: Project}. */ + this.EVENT__PROJECT_ADDED_USER_ADMIN = 'EVENT__PROJECT_ADDED_USER_ADMIN', + /** Triggered when User has been added as Project worker. Sends {project: Project}. */ + this.EVENT__PROJECT_ADDED_USER_WORKER = 'EVENT__PROJECT_ADDED_USER_WORKER', + /** Triggered when Project has been created. Sends {project: Project}. */ + this.EVENT__PROJECT_CREATED = 'EVENT__PROJECT_CREATED'; + /** Triggered when Project has been deleted. Sends {project: Project}. */ + this.EVENT__PROJECT_DELETED = 'EVENT__PROJECT_DELETED'; + /** Triggered when User has been removed as Project admin. Sends {project: Project}. */ + this.EVENT__PROJECT_REMOVED_USER_ADMIN = 'EVENT__PROJECT_REMOVED_USER_ADMIN', + /** Triggered when User has been removed as Project worker. Sends {project: Project}. */ + this.EVENT__PROJECT_REMOVED_USER_WORKER = 'EVENT__PROJECT_REMOVED_USER_WORKER', + /** Triggered when Project has been saved. Sends {project: Project}. */ + this.EVENT__PROJECT_SAVED = 'EVENT__PROJECT_SAVED'; + /** Triggered when the user selects an individual Project. Sends {project: Project}. */ + this.EVENT__PROJECT_SELECTED = 'EVENT__PROJECT_SELECTED'; + /** Triggered when the user selects to see all available Projects. */ + this.EVENT__PROJECT_SELECTED_COLLECTION = 'EVENT__PROJECT_SELECTED_COLLECTION'; + /** Triggered when Project admin interface has been selected. Takes {project: Project}. */ + this.EVENT__PROJECT_USERS_SELECTED = 'EVENT__PROJECT_USERS_SELECTED'; + /** Request a User be added as Project admin. Takes {project: Project, username: string} */ + this.REQUEST__PROJECT_ADD_USER_ADMIN = 'REQUEST__PROJECT_ADD_USER_ADMIN', + /** Request a User be added as Project worker. Takes {project: Project, username: string} */ + this.REQUEST__PROJECT_ADD_USER_WORKER = 'REQUEST__PROJECT_ADD_USER_WORKER', + /** Request a Project be created. Takes {creator: User}. */ + this.REQUEST__PROJECT_CREATE = 'REQUEST__PROJECT_CREATE'; + /** Request a Project be deleted. Takes {project: Project}. */ + this.REQUEST__PROJECT_DELETE = 'REQUEST__PROJECT_DELETE'; + /** Request currently active/open Project. Returns Project (or null). */ + this.REQUEST__PROJECT_GET_ACTIVE = 'REQUEST__PROJECT_GET_ACTIVE'; + /** Request a User be removed as Project admin. Takes {project: Project, user: User} */ + this.REQUEST__PROJECT_REMOVE_USER_ADMIN = 'REQUEST__PROJECT_REMOVE_USER_ADMIN', + /** Request a User be removed as Project worker. Takes {project: Project, user: User} */ + this.REQUEST__PROJECT_REMOVE_USER_WORKER = 'REQUEST__PROJECT_REMOVE_USER_WORKER', + /** Request a Project be saved/updated. Takes {project: Project, fields: {object with attributes to change}}. */ + this.REQUEST__PROJECT_SAVE = 'REQUEST__PROJECT_SAVE'; + /** Request a Project be set as active Project. Takes {project: Project}. */ + this.REQUEST__PROJECT_SET_ACTIVE = 'REQUEST__PROJECT_SET_ACTIVE'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Resource + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when Resource created. Sends {resource: Resource}. */ + this.EVENT__RESOURCE_CREATED = 'EVENT__RESOURCE_CREATED'; + /** Triggered when Resource deleted. Sends {resource: Resource}. */ + this.EVENT__RESOURCE_DELETED = 'EVENT__RESOURCE_DELETED'; + /** Triggered when Resource saved. Sends {resource: Resource}. */ + this.EVENT__RESOURCE_SAVED = 'EVENT__RESOURCE_SAVED'; + /** Triggered when the user selects an individual Resource. Sends {resource: Resource}. */ + this.EVENT__RESOURCE_SELECTED = 'EVENT__RESOURCE_SELECTED'; + /** Triggered when the user selects to see all available Resources. Sends {project: Project (Project associated with ResourceCollection)}. */ + this.EVENT__RESOURCE_SELECTED_COLLECTION = 'EVENT__RESOURCE_SELECTED_COLLECTION'; + /** Request a Resource be created. Takes {project: Project, file: JavaScript File object}. */ + this.REQUEST__RESOURCE_CREATE = 'REQUEST__RESOURCE_CREATE'; + /** Request a Resource be deleted. Takes {resource: Resource}. */ + this.REQUEST__RESOURCE_DELETE = 'REQUEST__RESOURCE_DELETE'; + /** Request a Resource be downloaded. Takes {resource: Resource}. */ + this.REQUEST__RESOURCE_DOWNLOAD = 'REQUEST__RESOURCE_DOWNLOAD'; + /** Request a Resource be saved/updated. Takes {resource: Resource, fields: {object with attributes to change}}. */ + this.REQUEST__RESOURCE_SAVE = 'REQUEST__RESOURCE_SAVE'; + /** Request a viewer URL (with auth-token) for the provided Resource. Takes {resource: Resource}. */ + this.REQUEST__RESOURCE_VIEWER_ACQUIRE = 'REQUEST__RESOURCE_VIEWER_ACQUIRE'; + /** Request a ResourceCollection to be loaded. Takes {data: Object (query parameters)}. Returns ResourceCollection. */ + this.REQUEST__RESOURCES_LOAD = 'REQUEST__RESOURCES_LOAD'; + /** Request resource labels to be updated. */ + this.REQUEST__RESOURCES_UPDATE_LABELS = 'REQUEST__RESOURCES_UPDATE_LABELS'; + /** Request ResourceCollection without reloading if possible. */ + this.REQUEST__RESOURCES_CURRENT = 'REQUEST__RESOURCES_CURRENT'; + + /////////////////////////////////////////////////////////////////////////////////////// + // ResourceList + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when ResourceList has been created. Sends {resourcelist: ResourceList}. */ + this.EVENT__RESOURCELIST_CREATED = 'EVENT__RESOURCELIST_CREATED'; + /** Triggered when ResourceList deleted. Sends {resourcelist: ResourceList}. */ + this.EVENT__RESOURCELIST_DELETED = 'EVENT__RESOURCELIST_DELETED'; + /** Triggered when ResourceList saved. Sends {resourcelist: ResourceList}. */ + this.EVENT__RESOURCELIST_SAVED = 'EVENT__RESOURCELIST_SAVED'; + /** Triggered when the user selects an individual ResourceList. Sends {resourcelist: ResourceList}. */ + this.EVENT__RESOURCELIST_SELECTED = 'EVENT__RESOURCELIST_SELECTED'; + /** Triggered when the user selects to see all available ResourceLists. Sends {project: Project (Project associated with ResourceListCollection)}. */ + this.EVENT__RESOURCELIST_SELECTED_COLLECTION = 'EVENT__RESOURCELIST_SELECTED_COLLECTION'; + /** Request a Resource be added to a ResourceList. Takes {resource: Resource, resourcelist: ResourceList}. */ + this.REQUEST__RESOURCELIST_ADD_RESOURCE = 'REQUEST__RESOURCELIST_ADD_RESOURCE'; + /** Request a ResourceList be created. Takes {project: Project}. */ + this.REQUEST__RESOURCELIST_CREATE = 'REQUEST__RESOURCELIST_CREATE'; + /** Request a ResourceList be deleted. Takes {resourcelist: ResourceList}. */ + this.REQUEST__RESOURCELIST_DELETE = 'REQUEST__RESOURCELIST_DELETE'; + /** Request a ResourceList be downloaded. Takes {resourcelist: ResourceList}. */ + this.REQUEST__RESOURCELIST_DOWNLOAD = 'REQUEST__RESOURCELIST_DOWNLOAD'; + /** Request a Resource be removed from a ResourceList. Takes {resource: Resource, resourcelist: ResourceList}. */ + this.REQUEST__RESOURCELIST_REMOVE_RESOURCE = 'REQUEST__RESOURCELIST_REMOVE_RESOURCE'; + /** Request a ResourceList be saved/updated. Takes {resourcelist: ResourceList, fields: {object with attributes to change}}. */ + this.REQUEST__RESOURCELIST_SAVE = 'REQUEST__RESOURCELIST_SAVE'; + /** Request a resource assignment view be displayed for a ResourceList. Takes {resourcelist: ResourceList}. */ + this.REQUEST__RESOURCELIST_SHOW_RESOURCEASSIGNMENT_VIEW = 'REQUEST__RESOURCELIST_SHOW_RESOURCEASSIGNMENT_VIEW'; + /** Request a ResourceListCollection to be loaded. Takes {data: Object (query parameters)}. Returns ResourceListCollection. */ + this.REQUEST__RESOURCELISTS_LOAD = 'REQUEST__RESOURCELISTS_LOAD'; + + /////////////////////////////////////////////////////////////////////////////////////// + // RunJob + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when interactive RunJob has been acquired by the current user. Sends {runjob: RunJob}. */ + this.EVENT__RUNJOB_ACQUIRED = 'EVENT__RUNJOB_ACQUIRED'; + /** Triggered when the user selects an individual RunJob. Sends {runjob: RunJob}. */ + this.EVENT__RUNJOB_SELECTED = 'EVENT__RUNJOB_SELECTED'; + /** Triggered when the user selects to see RunJobs for a Project. */ + this.EVENT__RUNJOB_SELECTED_COLLECTION = 'EVENT__RUNJOB_SELECTED_COLLECTION'; + /** Request the provided RunJob be locked on the server for the current user. Takes {runjob: RunJob}. */ + this.REQUEST__RUNJOB_ACQUIRE = 'REQUEST__RUNJOB_ACQUIRE'; + /** Request a RunJobCollection to be loaded. Takes {data: Object (query parameters)}. Returns RunJobCollection. */ + this.REQUEST__RUNJOBS_LOAD = 'REQUEST__RUNJOBS_LOAD'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Server + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when server date has been updated. Sends {date: Date}. */ + this.EVENT__SERVER_DATE_UPDATED = 'EVENT__SERVER_DATE_UPDATED'; + /** Triggered on Rodan-based server errors. Sends {json: JSON object of error}. */ + this.EVENT__SERVER_ERROR = 'EVENT__SERVER_ERROR'; + /** Triggered when the client has no pending HTTP requests waiting to complete. Only fires if EVENT__SERVER_WAITING had previously been fired. */ + this.EVENT__SERVER_IDLE = 'EVENT__SERVER_IDLE'; + /** Triggered when there is an update to pending AJAX requests. Sends {pending: int >= 0}. */ + this.EVENT__SERVER_REQUESTS_PENDING_UPDATE = 'EVENT__SERVER_REQUESTS_PENDING_UPDATE'; + /** Triggered when server routes have been loaded. */ + this.EVENT__SERVER_ROUTESLOADED = 'EVENT__SERVER_ROUTESLOADED'; + /** Triggered when client has been waiting a predefined amount of time for 'complete' state (i.e. not waiting on server response). Sends {pending: int (number of pending AJAX responses)}*/ + this.EVENT__SERVER_WAITING = 'EVENT__SERVER_WAITING'; + /** Request server configuration. Returns object. */ + this.REQUEST__SERVER_CONFIGURATION = 'REQUEST__SERVER_CONFIGURATION'; + /** Request last known server date and time. Returns Date. */ + this.REQUEST__SERVER_DATE = 'REQUEST__SERVER_DATE'; + /** Request server hostname. Returns string (hostname). */ + this.REQUEST__SERVER_GET_HOSTNAME = 'REQUEST__SERVER_GET_HOSTNAME'; + /** Request server URL for route. Takes {route: string}. Returns string (URL). */ + this.REQUEST__SERVER_GET_ROUTE = 'REQUEST__SERVER_GET_ROUTE'; + /** Request options for server route. Takes {route: string}. Returns Javascript object with all options for route. */ + this.REQUEST__SERVER_GET_ROUTE_OPTIONS = 'REQUEST__SERVER_GET_ROUTE_OPTIONS'; + /** Request version of server. Returns string. */ + this.REQUEST__SERVER_GET_VERSION = 'REQUEST__SERVER_GET_VERSION'; + /** Request the client to load all routes. EVENT__SERVER_ROUTESLOADED is triggered on success. */ + this.REQUEST__SERVER_LOAD_ROUTES = 'REQUEST__SERVER_LOAD_ROUTES'; + /** Request the client to load all options for routes. Must authenticate prior to making this request. */ + this.REQUEST__SERVER_LOAD_ROUTE_OPTIONS = 'REQUEST__SERVER_LOAD_ROUTE_OPTIONS'; + /** Request a custom AJAX request to be sent. This ensures that the client response handlers (along with any custom handlers you define) are used, and that authentication is taken care of. Takes {settings: {jQuery.ajax settings}}. */ + this.REQUEST__SERVER_REQUEST_AJAX = 'REQUEST__SERVER_REQUEST_AJAX'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Transfer Manager + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when file upload fails. Sends {request: jQuery XMLHTTPRequest, file: Javascript file object}. */ + this.EVENT__TRANSFERMANAGER_UPLOAD_FAILED = 'EVENT__TRANSFERMANAGER_UPLOAD_FAILED'; + /** Triggered when file upload succeeds. Sends {request: jQuery XMLHTTPRequest, file: Javascript file object}. */ + this.EVENT__TRANSFERMANAGER_UPLOAD_SUCCEEDED = 'EVENT__TRANSFERMANAGER_UPLOAD_SUCCEEDED'; + /** Request download of a file from a URL. Takes {url: string (URL of file location), filename: string (name to give file when saving to local machine), mimetype: string (optional mimetype)}. */ + this.REQUEST__TRANSFERMANAGER_DOWNLOAD = 'REQUEST__TRANSFERMANAGER_DOWNLOAD'; + /** Request counts of uploads for this session. Returns {completed: int >= 0, failed: int >= 0, pending: int >= 0}. */ + this.REQUEST__TRANSFERMANAGER_GET_UPLOAD_COUNT = 'REQUEST__TRANSFERMANAGER_GET_UPLOAD_COUNT'; + /** Request the TransferManager to monitor a file upload. Takes {request: jQuery XMLHTTPRequest, file: Javascript file object}. */ + this.REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD = 'REQUEST__TRANSFERMANAGER_MONITOR_UPLOAD'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Updater + /////////////////////////////////////////////////////////////////////////////////////// + /** Request the Updater to clear registered update callback. Takes nothing. */ + this.REQUEST__UPDATER_CLEAR = 'REQUEST__UPDATER_CLEAR'; + /** Request a set of collections to be updated. Takes {collections: [BaseCollection]}. */ + this.REQUEST__UPDATER_SET_COLLECTIONS = 'REQUEST__UPDATER_SET_COLLECTIONS'; + + /////////////////////////////////////////////////////////////////////////////////////// + // User + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when User has changed password. */ + this.EVENT__USER_CHANGED_PASSWORD = 'EVENT__USER_CHANGED_PASSWORD'; + /** Triggered when UserPreference for current User has been loaded. Sends {user_preference: UserPreference}. */ + this.EVENT__USER_PREFERENCE_LOADED = 'EVENT__USER_PREFERENCE_LOADED'; + /** Triggered when UserPreference saved. Sends {user_preference: UserPreference}. */ + this.EVENT__USER_PREFERENCE_SAVED = 'EVENT__USER_PREFERENCE_SAVED'; + /** Triggered when User has been saved. Sends {user: User}. */ + this.EVENT__USER_SAVED = 'EVENT__USER_SAVED'; + /** Request current User's password be changed. Takes {currentpassword: string, newpassword: string}. */ + this.REQUEST__USER_CHANGE_PASSWORD = 'REQUEST__USER_CHANGE_PASSWORD'; + /** Request UserPreference for current User. Returns {user_preference: UserPreference (may be null if not yet loaded)}. */ + this.REQUEST__USER_PREFERENCE = 'REQUEST_USER_PREFERENCE'; + /** Request a UserPreference be saved/updated. Takes {fields: {object with attributes to change}}. */ + this.REQUEST__USER_PREFERENCE_SAVE = 'REQUEST__USER_PREFERENCE_SAVE'; + /** Request a User be saved/updated. Takes {user_preference: UserPreference}. */ + this.REQUEST__USER_SAVE = 'REQUEST__USER_SAVE'; + + /////////////////////////////////////////////////////////////////////////////////////// + // Workflow + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when Workflow has been created. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOW_CREATED = 'EVENT__WORKFLOW_CREATED'; + /** Triggered when Workflow has been deleted. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOW_DELETED = 'EVENT__WORKFLOW_DELETED'; + /** Triggered when Workflow has been saved. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOW_SAVED = 'EVENT__WORKFLOW_SAVED'; + /** Triggered when the user selects an individual Workflow. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOW_SELECTED = 'EVENT__WORKFLOW_SELECTED'; + /** Triggered when the user selects to see all available Workflows. Sends {project: Project (Project associated with WorkflowCollection)}. */ + this.EVENT__WORKFLOW_SELECTED_COLLECTION = 'EVENT__WORKFLOW_SELECTED_COLLECTION'; + /** Request a Workflow be created. Takes {project: Project}. */ + this.REQUEST__WORKFLOW_CREATE = 'REQUEST__WORKFLOW_CREATE'; + /** Request a Workflow be deleted. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOW_DELETE = 'REQUEST__WORKFLOW_DELETE'; + /** Request a Workflow be exported. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOW_EXPORT = 'REQUEST__WORKFLOW_EXPORT'; + /** Request a Workflow be imported. Takes {}. */ + this.REQUEST__WORKFLOW_IMPORT = 'REQUEST__WORKFLOW_IMPORT'; + /** Request a Workflow be saved/updated. Takes {workflow: Workflow, fields: {object with attributes to change}}. */ + this.REQUEST__WORKFLOW_SAVE = 'REQUEST__WORKFLOW_SAVE'; + + /////////////////////////////////////////////////////////////////////////////////////// + // WorkflowBuilder + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when the user selects an individual Workflow to edit. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOWBUILDER_SELECTED = 'EVENT__WORKFLOWBUILDER_SELECTED'; + /** Triggered when a Workflow is loaded into the WorkflowBuilder. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOWBUILDER_LOADED_WORKFLOW = 'EVENT__WORKFLOWBUILDER_LOADED_WORKFLOW'; + /** Triggered when a Workflow has been validated. Sends {workflow: Workflow}. */ + this.EVENT__WORKFLOWBUILDER_VALIDATED_WORKFLOW = 'EVENT__WORKFLOWBUILDER_VALIDATED_WORKFLOW'; + /** Request a Connection be added to a Workflow between two ports. Takes {inputport: InputPort, outputport: OutputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ADD_CONNECTION = 'REQUEST__WORKFLOWBUILDER_ADD_CONNECTION'; + /** Request a WorkflowJob be created from a Job of category Configuration.RESOURCE_DISTRIBUTOR_CATEGORY that can satisfy the provided InputPorts. Takes {inputports: [InputPort], workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ADD_DISTRIBUTOR = 'REQUEST__WORKFLOWBUILDER_ADD_DISTRIBUTOR'; + /** Request an InputPort be added to a WorkflowJob. Takes {inputporttype: InputPortType, workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ADD_INPUTPORT = 'REQUEST__WORKFLOWBUILDER_ADD_INPUTPORT'; + /** Request an OutputPort be added to a WorkflowJob. Takes {outputporttype: InputPortType, workflowjob: WorkflowJob, workflow: Workflow, targetinputports: [InputPort] (optional)}. If targetinputports is provided the WorkflowBuilder will attempt to create Connections between the created OutputPort and those InputPort. */ + this.REQUEST__WORKFLOWBUILDER_ADD_OUTPUTPORT = 'REQUEST__WORKFLOWBUILDER_ADD_OUTPUTPORT'; + /** Request a WorkflowJob be created from a Job. Takes {job: Job, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOB = 'REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOB'; + /** Request a WorkflowJobGroup be created for the provided WorkflowJobs. Takes {workflowjobs: [WorkflowJob], workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOBGROUP = 'REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOBGROUP'; + /** Request a Resource be assigned to an InputPort. Takes {resource: Resource, inputport: InputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ASSIGN_RESOURCE = 'REQUEST__WORKFLOWBUILDER_ASSIGN_RESOURCE'; + /** Request an assigned resource to move up. Takes {resource: Resource, inputport: InputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_UP = 'REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_UP'; + /** Request an assigned resource to move down. Takes {resource: Resource, inputport: InputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_DOWN = 'REQUEST__WORKFLOWBUILDER_ASSIGNED_RESOURCE_MOVE_DOWN'; + + /** Request a WorkflowRun be created. The WorkflowBuilder will use the known Resource assignments that have been made. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN = 'REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN'; + /** Request the Resources that are currently assigned to an InputPort. Takes {inputport: InputPort}. Returns [Resource]. */ + this.REQUEST__WORKFLOWBUILDER_GET_RESOURCEASSIGNMENTS = 'REQUEST__WORKFLOWBUILDER_GET_RESOURCEASSIGNMENTS'; + /** Request all InputPorts that could satisfy the provided OutputPort in the given Workflow. Takes {workflow: Workflow, outputport: OutputPort}. Returns [string] (InputPort URLs). */ + this.REQUEST__WORKFLOWBUILDER_GET_SATISFYING_INPUTPORTS = 'REQUEST__WORKFLOWBUILDER_GET_SATISFYING_INPUTPORTS'; + /** Request a Workflow (origin) be added to another Workflow (target). Takes {origin: Workflow, target: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_IMPORT_WORKFLOW = 'REQUEST__WORKFLOWBUILDER_IMPORT_WORKFLOW'; + /** Request a Workflow be fetched and loaded. If no Workflow has yet been loaded in the WorkflowBuilder, or the Workflow to be loaded differs from the one currently loaded in the WorkflowBuilder, the WorkflowBuilder will be initialized with the new Workflow. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_LOAD_WORKFLOW = 'REQUEST__WORKFLOWBUILDER_LOAD_WORKFLOW'; + /** Request a Connection be removed from a Workflow. Takes {connection: Connection, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_REMOVE_CONNECTION = 'REQUEST__WORKFLOWBUILDER_REMOVE_CONNECTION'; + /** Request an InputPort be removed from a WorkflowJob. Takes {inputport: InputPort, workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_REMOVE_INPUTPORT = 'REQUEST__WORKFLOWBUILDER_REMOVE_INPUTPORT'; + /** Request an OutputPort be removed from a WorkflowJob. Takes {outputport: OutputPort, workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_REMOVE_OUTPUTPORT = 'REQUEST__WORKFLOWBUILDER_REMOVE_OUTPUTPORT'; + /** Request a WorkflowJob be removed from a Workflow. Takes {workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB = 'REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB'; + /** Request a WorkflowJobGroup and all its associated WorkflowJobs be removed from a Workflow. Takes {workflowjobgroup: WorkflowJobGroup, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOBGROUP = 'REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOBGROUP'; + /** Request that future WorkflowJob creation automatically adds minimal ports. Takes {addports: boolean}. */ + this.REQUEST__WORKFLOWBUILDER_SET_ADDPORTS = 'REQUEST__WORKFLOWBUILDER_SET_ADDPORTS'; + /** Request a Job collection view be displayed for adding Jobs to the currently loaded Workflow. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_JOBCOLLECTION_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_JOBCOLLECTION_VIEW'; + /** Request a resource assignment view be displayed for an InputPort. Takes {inputport: InputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_RESOURCEASSIGNMENT_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_RESOURCEASSIGNMENT_VIEW'; + /** Request a Workflow data view be displayed for a Workflow. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOW_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOW_VIEW'; + /** Request a Workflow collection view be displayed for importing Workflows. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWCOLLECTION_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWCOLLECTION_VIEW'; + /** Request a port view for adding/deleting ports for a WorkflowJob be displayed. Takes {workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_PORTS_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_PORTS_VIEW'; + /** Request a WorkflowJob settings view be displayed for a WorkflowJob. Takes {workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_SETTINGS_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_SETTINGS_VIEW'; + /** Request a WorkflowJob data view be displayed for a WorkflowJob. Takes {workflowjob: WorkflowJob, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOB_VIEW'; + /** Request a WorkflowJobGroup data view be displayed for a WorkflowJobGroup. Takes {workflowjobgroup: WorkflowJobGroup, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOBGROUP_VIEW = 'REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWJOBGROUP_VIEW'; + /** Request a Resource be unassigned to an InputPort. Takes {resource: Resource, inputport: InputPort, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_UNASSIGN_RESOURCE = 'REQUEST__WORKFLOWBUILDER_UNASSIGN_RESOURCE'; + /** Request a WorkflowJobGroup be removed from a Workflow, but keep all associated WorkflowJobs, ports, and Connections. Takes {workflowjobgroup: WorkflowJobGroup, workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_UNGROUP_WORKFLOWJOBGROUP = 'REQUEST__WORKFLOWBUILDER_UNGROUP_WORKFLOWJOBGROUP'; + /** Request a Workflow be validated. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW = 'REQUEST__WORKFLOWBUILDER_VALIDATE_WORKFLOW'; + + /////////////////////////////////////////////////////////////////////////////////////// + // WorkflowJob + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when WorkflowJob created. Sends {workflowjob: WorkflowJob}. */ + this.EVENT__WORKFLOWJOB_CREATED = 'EVENT__WORKFLOWJOB_CREATED'; + /** Triggered when WorkflowJob deleted. Sends {workflowjob: WorkflowJob}. */ + this.EVENT__WORKFLOWJOB_DELETED = 'EVENT__WORKFLOWJOB_DELETED'; + /** Triggered when WorkflowJob saved. Sends {workflowjob: WorkflowJob}. */ + this.EVENT__WORKFLOWJOB_SAVED = 'EVENT__WORKFLOWJOB_SAVED'; + /** Request a WorkflowJob be created of a Job type and added to a Workflow. Takes {job: Job, workflow: Workflow, addports: boolean, targetinputports: [InputPort] (optional)}. The minimum required InputPorts will be created if addports is true. If targetinputports array of InputPorts is provided, Connections will be made to those InputPorts (from this WorkflowJob's OutputPort) if the WorkflowJob created has one and only one OutputPort. */ + this.REQUEST__WORKFLOWJOB_CREATE = 'REQUEST__WORKFLOWJOB_CREATE'; // + /** Request a WorkflowJob be deleted. Takes {workflowjob: WorkflowJob}. */ + this.REQUEST__WORKFLOWJOB_DELETE = 'REQUEST__WORKFLOWJOB_DELETE'; + /** Request a WorkflowJob be saved/updated. Takes {workflowjob: WorkflowJob, workflow: Workflow (optional)}. If a Workflow is passed the WorkflowJobController will request a validation for that Workflow after the save has completed. */ + this.REQUEST__WORKFLOWJOB_SAVE = 'REQUEST__WORKFLOWJOB_SAVE'; + + /////////////////////////////////////////////////////////////////////////////////////// + // WorkflowJobGroup + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when WorkflowJobGroup imported. Sends {workflowjobgroup: WorkflowJobGroup}. */ + this.EVENT__WORKFLOWJOBGROUP_IMPORTED = 'EVENT__WORKFLOWJOBGROUP_IMPORTED'; + /** Triggered when WorkflowJobGroup has been deleted. Sends {workflowjobgroup: WorkflowJobGroup}. */ + this.EVENT__WORKFLOWJOBGROUP_DELETED = 'EVENT__WORKFLOWJOBGROUP_DELETED'; + /** Triggered when WorkflowJobGroup saved. Sends {workflowjobgroup: WorkflowJobGroup}. */ + this.EVENT__WORKFLOWJOBGROUP_SAVED = 'EVENT__WORKFLOWJOBGROUP_SAVED'; + /** Request a WorkflowJobGroup be deleted. Takes {workflowjobgroup: WorkflowJobGroup}. */ + this.REQUEST__WORKFLOWJOBGROUP_DELETE = 'REQUEST__WORKFLOWJOBGROUP_DELETE'; + /** Request arrays of InputPort URLs and OutputPort URLs for the given WorkflowJobGroup. Takes {url: string (WorkflowJobGroup URL), workflow: Workflow}. Returns {inputports: [InputPort], outputports: [OutputPort]}. */ + this.REQUEST__WORKFLOWJOBGROUP_GET_PORTS = 'REQUEST__WORKFLOWJOBGROUP_GET_PORTS'; + /** Request a Workflow (origin) be imported into another Workflow (target) as a WorkflowJobGroup. Takes {target: Workflow, origin: Workflow}. */ + this.REQUEST__WORKFLOWJOBGROUP_IMPORT = 'REQUEST__WORKFLOWJOBGROUP_IMPORT'; + /** Request WorkflowJobGroups be loaded for a given Workflow. Takes {workflow: Workflow}. */ + this.REQUEST__WORKFLOWJOBGROUP_LOAD_COLLECTION = 'REQUEST__WORKFLOWJOBGROUP_LOAD_COLLECTION'; + /** Request a WorkflowJobGroup be saved/updated. Takes {workflowjobgroup: WorkflowJobGroup}. */ + this.REQUEST__WORKFLOWJOBGROUP_SAVE = 'REQUEST__WORKFLOWJOBGROUP_SAVE'; + + /////////////////////////////////////////////////////////////////////////////////////// + // WorkflowRun + /////////////////////////////////////////////////////////////////////////////////////// + /** Triggered when WorkflowRun created. Sends {workflowrun: WorkflowRun}. */ + this.EVENT__WORKFLOWRUN_CREATED = 'EVENT__WORKFLOWRUN_CREATED'; + /** Triggered when WorkflowRun failed to create. Sends {workflowrun: WorkflowRun, errors: object}. */ + this.EVENT__WORKFLOWRUN_FAILED_TO_CREATE = 'EVENT__WORKFLOWRUN_FAILED_TO_CREATE'; + /** Triggered when WorkflowRun deleted. Sends {workflowrun: WorkflowRun}. */ + this.EVENT__WORKFLOWRUN_DELETED = 'EVENT__WORKFLOWRUN_DELETED'; + /** Triggered when WorkflowRun saved. Sends {workflowrun: WorkflowRun}. */ + this.EVENT__WORKFLOWRUN_SAVED = 'EVENT__WORKFLOWRUN_SAVED'; + /** Triggered when WorkflowRun started. Sends {workflowrun: WorkflowRun}. */ + this.EVENT__WORKFLOWRUN_STARTED = 'EVENT__WORKFLOWRUN_STARTED'; + /** Triggered when the user selects an individual WorkflowRun. Sends {workflow: WorkflowRun}. */ + this.EVENT__WORKFLOWRUN_SELECTED = 'EVENT__WORKFLOWRUN_SELECTED'; + /** Triggered when the user selects to see all available WorkflowRuns. Sends {project: Project (Project associated with WorkflowRunCollection)}. */ + this.EVENT__WORKFLOWRUN_SELECTED_COLLECTION = 'EVENT__WORKFLOWRUN_SELECTED_COLLECTION'; + /** Request a WorkflowRun be created. Takes {workflow: Workflow, assignments: [string (Resource URLs or individual ResourceList URL)] (index by InputPort URLs)}. */ + this.REQUEST__WORKFLOWRUN_CREATE = 'REQUEST__WORKFLOWRUN_CREATE'; + /** Request a WorkflowRun be deleted. Takes {workflowrun: WorkflowRun}. */ + this.REQUEST__WORKFLOWRUN_DELETE = 'REQUEST__WORKFLOWRUN_DELETE'; + /** Request a WorkflowRun be saved/updated. Takes {model: WorkflowRun}. */ + this.REQUEST__WORKFLOWRUN_SAVE = 'REQUEST__WORKFLOWRUN_SAVE'; + /** Request a WorkflowRun be started. Takes {model: WorkflowRun}. */ + this.REQUEST__WORKFLOWRUN_START = 'REQUEST__WORKFLOWRUN_START'; + + /////////////////////////////////////////////////////////////////////////////////////// + // VERSION COMPATIBILITY CHECKS + // + // The following is a list of Radio event calls that are limited by Rodan version. + // The member name is the particular Event/Request. Its value is the minimum Rodan + // version it requires. + /////////////////////////////////////////////////////////////////////////////////////// + /** @ignore **/ + this.VERSION__COMPATIBILITY = + { + 'EVENT__PROJECT_USERS_SELECTED': '1.1.5' + }; + } + + /** @ignore **/ + enforceVersionCompatibility() + { + var serverVersionString = Radio.channel('rodan').request(this.REQUEST__SERVER_GET_VERSION); + var serverVersion = serverVersionString.split('.').map(Number); + for (var event in this.VERSION__COMPATIBILITY) + { + if (this[event]) + { + var requiredVersionString = this.VERSION__COMPATIBILITY[event]; + var requiredVersion = requiredVersionString.split('.').map(Number); + if ( + // 1) Rodan Major version is smaller + requiredVersion[0] > serverVersion[0] + // 2) Rodan Minor version is smaller, and Major + || (requiredVersion[1] > serverVersion[1] && requiredVersion[0] > serverVersion[0]) + // 3) Rodan Patch version is smaller, and minor, and Major + || (requiredVersion[2] > serverVersion[2] && requiredVersion[1] > serverVersion[1] && requiredVersion[0] > serverVersion[0]) + ) + { + var requiresEvent = 'EVENT__REQUIRES_RODAN_VERSION_' + serverVersionString; + this[event] = requiresEvent; + var messageString = 'This feature requires Rodan Server v' + requiredVersionString + '. The Rodan Server is currently v' + serverVersionString + '.'; + messageString += ' (' + event + ')'; + var modalOptions = {content: messageString}; + Radio.channel('rodan').on(requiresEvent, () => Radio.channel('rodan').request(this.REQUEST__MODAL_ERROR, modalOptions)); + Radio.channel('rodan').reply(requiresEvent, () => Radio.channel('rodan').request(this.REQUEST__MODAL_ERROR, modalOptions)); + } + } + } + } +} +/** @ignore */ +export default new RODAN_EVENTS(); diff --git a/rodan-client/code/src/js/Shared/Utilities.js b/rodan-client/code/src/js/Shared/Utilities.js new file mode 100755 index 000000000..89d31ccb9 --- /dev/null +++ b/rodan-client/code/src/js/Shared/Utilities.js @@ -0,0 +1,45 @@ +/** + * General utilities. + */ +export default class Utilities +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS - Static +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Copy text to clipboard. Returns true if "document.execCommand('copy')" is supported. + * + * @param {string} text string to copy to clipboard + * @return {boolean} returns true if no error on "document.execCommand('copy')" + */ + static copyTextToClipboard(text) + { + var returnValue = true; + var target = document.createElement("textarea"); + var targetId = "_hiddenCopyText_"; + target.style.position = "absolute"; + target.style.left = "-9999px"; + target.style.top = "0"; + target.id = targetId; + document.body.appendChild(target); + target.textContent = text; + var currentFocus = document.activeElement; + target.focus(); + target.setSelectionRange(0, target.value.length); + var succeed = false; + try + { + succeed = document.execCommand("copy"); + } + catch(e) + { + returnValue = false; + } + if (currentFocus && typeof currentFocus.focus === "function") + { + currentFocus.focus(); + } + document.body.removeChild(target); + return returnValue; + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Updater/AbstractUpdater.js b/rodan-client/code/src/js/Updater/AbstractUpdater.js new file mode 100755 index 000000000..285542eb7 --- /dev/null +++ b/rodan-client/code/src/js/Updater/AbstractUpdater.js @@ -0,0 +1,43 @@ +import Configuration from 'js/Configuration'; + +/** + * Base class for updaters. + */ +export default class AbstractUpdater +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Sets the collections that are to be updated. + * + * @param {[BaseCollection]} collections collections to be updated. + */ + setCollections(collections) + { + this.clear(); + this._collections = collections; + } + + /** + * Updates registered collections. + */ + update() + { + if (this._collections) + { + for (var i = 0; i < this._collections.length; i++) + { + this._collections[i].syncCollection(); + } + } + } + + /** + * Clears registered collections. + */ + clear() + { + this._collections = null; + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Updater/PollUpdater.js b/rodan-client/code/src/js/Updater/PollUpdater.js new file mode 100755 index 000000000..b9ab79c6d --- /dev/null +++ b/rodan-client/code/src/js/Updater/PollUpdater.js @@ -0,0 +1,21 @@ +import AbstractUpdater from './AbstractUpdater'; + +/** + * Updater that syncs collections by a timer. + */ +export default class PollUpdater extends AbstractUpdater +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor + * + * @param {options} options options.frequency is the update interval in milliseconds + */ + constructor(options) + { + super(options); + this._timer = setInterval(() => this.update(), options.frequency); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Updater/SocketUpdater.js b/rodan-client/code/src/js/Updater/SocketUpdater.js new file mode 100755 index 000000000..7372c3a86 --- /dev/null +++ b/rodan-client/code/src/js/Updater/SocketUpdater.js @@ -0,0 +1,83 @@ +import AbstractUpdater from './AbstractUpdater'; +import Configuration from 'js/Configuration'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * Updater that uses sockets to trigger collection updates. + */ +export default class SocketUpdater extends AbstractUpdater +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor() + { + super(); + var protocol = Configuration.SERVER_HTTPS ? 'wss' : 'ws'; + this._webSocket = new WebSocket(protocol + '://' + Configuration.SERVER_HOST + ':' + Configuration.SERVER_PORT + '/ws/rodan?subscribe-broadcast&publish-broadcast&echo'); + this._webSocket.onmessage = (event) => this._handleSocketMessage(event); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle login success. + */ + _handleEventLogoutSuccess() + { + this._webSocket.close(); + } + + /** + * Handle socket message. + */ + _handleSocketMessage(event) + { + // Output if debug socket. + if (Configuration.SERVER_SOCKET_DEBUG) + { + console.log(event.data); + } + + // Process. + if (event.data === '--heartbeat--') + { + // this._processHeartbeat(event); + } + else + { + this._processSocketMessage(JSON.parse(event.data)); + } + } + + /** + * Process socket message. + */ + _processSocketMessage(data) + { + // We definitely update if: + // + // - no model is specified + // - the model specified is a Project + // + // In these cases, the update is very general. + // Else, we have to check if the model is related to our active project somehow. + if (!data.model || data.model === 'project' || !data.project) + { + this.update(); + } + else if (data.project) + { + var activeProject = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + if (activeProject && data.project === activeProject.id) + { + this.update(); + } + } + } +} diff --git a/rodan-client/code/src/js/Utilities/PaperUtilities.js b/rodan-client/code/src/js/Utilities/PaperUtilities.js new file mode 100755 index 000000000..87b124efb --- /dev/null +++ b/rodan-client/code/src/js/Utilities/PaperUtilities.js @@ -0,0 +1,78 @@ +/** + * Draws a grid on the current viewport + * - If grid already exists, it removes and redraws it + * + * @param {Number} cellSize - Size of each cell in pixels + * + * Author: + * - Nicholas Kyriakides(@nicholaswmin, nik.kyriakides@gmail.com) + * + * License: + * - MIT + */ +export function drawGrid(options, paperScope) +{ + 'use strict'; + this.cellSize = options.DIMENSION; + this.gridColor = options.LINE_COLOR; + this.lineWidth = options.LINE_WIDTH; + + var self = this; + this.gridGroup; + + var boundingRect = paperScope.view.bounds; + var rectanglesX = paperScope.view.bounds.width / this.cellSize; + var rectanglesY = paperScope.view.bounds.height / this.cellSize; + + this.createGrid = function() { + + self.gridGroup = new paperScope.Group(); + + //Vertical Lines + for (var i = 0; i <= rectanglesX; i++) { + var correctedLeftBounds = Math.ceil(boundingRect.left / self.cellSize) * self.cellSize; + var xPos = correctedLeftBounds + i * self.cellSize; + var topPoint = new paperScope.Point(xPos, boundingRect.top); + var bottomPoint = new paperScope.Point(xPos, boundingRect.bottom); + var gridLine = new paperScope.Path.Line(topPoint, bottomPoint); + gridLine.strokeColor = self.gridColor; + gridLine.strokeWidth = self.lineWidth / paperScope.view.zoom; + + self.gridGroup.addChild(gridLine); + + } + + //Horizontal Lines + for (var i = 0; i <= rectanglesY; i++) { + var correctedTopBounds = Math.ceil(boundingRect.top / self.cellSize) * self.cellSize; + var yPos = correctedTopBounds + i * self.cellSize; + var leftPoint = new paperScope.Point(boundingRect.left, yPos); + var rightPoint = new paperScope.Point(boundingRect.right, yPos); + var gridLine = new paperScope.Path.Line(leftPoint, rightPoint); + + gridLine.strokeColor = self.gridColor; + gridLine.strokeWidth = self.lineWidth / paperScope.view.zoom; + + self.gridGroup.addChild(gridLine); + } + + self.gridGroup.sendToBack(); + paperScope.view.update(); + } + + //Removes the children of the gridGroup and discards the gridGroup itself + this.removeGrid = function() { + for (var i = 0; i <= gridGroup.children.length-1; i++) { + self.gridGroup.children[i].remove(); + } + self.gridGroup.remove(); + } + + //Initialization + if(typeof gridGroup === 'undefined') { + this.createGrid(); + } else { + this.removeGrid(); + this.createGrid(); + } +} \ No newline at end of file diff --git a/rodan-client/code/src/js/Views/LayoutViewWorkflowBuilder.js b/rodan-client/code/src/js/Views/LayoutViewWorkflowBuilder.js new file mode 100755 index 000000000..b49897ddd --- /dev/null +++ b/rodan-client/code/src/js/Views/LayoutViewWorkflowBuilder.js @@ -0,0 +1,198 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import GUI_EVENTS from '../Shared/Events'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; + +/** + * This class represents the controller for editing a Workflow. + */ +class LayoutViewWorkflowBuilder extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + this._initializeRadio(); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__UPDATER_CLEAR); + this._lastErrorCode = ''; + this._lastErrorDetails = ''; + } + + /** + * After render. + */ + onRender() + { + this._handleClickCheckboxAddPorts(); + } + + /** + * Unbind from events. + */ + onDestroy() + { + this.guiChannel.trigger(GUI_EVENTS.EVENT__WORKFLOWBUILDER_GUI_DESTROY); + + this.rodanChannel.off(null, null, this); + this.rodanChannel.stopReplying(null, null, this); + this.guiChannel.off(null, null, this); + this.guiChannel.stopReplying(null, null, this); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + this.rodanChannel = Radio.channel('rodan'); + this.guiChannel = Radio.channel('rodan-client_gui'); + this.rodanChannel.on(Rodan.RODAN_EVENTS.EVENT__SERVER_ERROR, options => this._handleEventRodanError(options), this); + } + + /** + * Handle button zoom in. + */ + _handleButtonZoomIn() + { + this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_IN); + } + + /** + * Handle button zoom out. + */ + _handleButtonZoomOut() + { + this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_OUT); + } + + /** + * Handle button zoom reset. + */ + _handleButtonZoomReset() + { + this.guiChannel.request(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_RESET); + } + + /** + * Handle button edit. + */ + _handleButtonEdit() + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOW_VIEW, {workflow: this.model}); + } + + /** + * Handle button add job. + */ + _handleButtonAddJob() + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_JOBCOLLECTION_VIEW, {workflow: this.model}); + } + + /** + * Handle button import workflow. + */ + _handleButtonImportWorkflow() + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWCOLLECTION_VIEW, {workflow: this.model}); + } + + /** + * Handle button run. + */ + _handleButtonRun() + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN, {workflow: this.model}); + } + + /** + * Handle event Workflow updated. + */ + _handleEventRodanError(options) + { + this._lastErrorCode = options.json.error_code; + this._lastErrorDetails = options.json.details[0]; + } + + /** + * Handle click data status. + */ + _handleClickDataStatus() + { + if (this._lastErrorCode !== '' || this._lastErrorDetails !== '') + { + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: "ERROR", content: "Error code: " + this._lastErrorCode + " " + this._lastErrorDetails}); + } + } + + /** + * Handle click on checkbox. + */ + _handleClickCheckboxAddPorts() + { + var checked = this.ui.checkboxAddPorts.is(':checked'); + this.rodanChannel.request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SET_ADDPORTS, {addports: checked}); + } + + /** + * Updates info of Workflow in view. + */ + _updateView(event, model) + { + if (this.model.get('valid')) + { + this._lastErrorCode = ''; + this._lastErrorDetails = ''; + this.ui.dataStatus.text('Workflow "' + this.model.get('name') + '" is valid'); + } + else + { + if (this._lastErrorCode == '' && this._lastErrorDetails == '') { + this.ui.dataStatus.text('Workflow "' + this.model.get('name') + '" setup is incomplete.'); + } else { + this.ui.dataStatus.text('Workflow "' + this.model.get('name') + '" is INVALID (click here for details)'); + } + } + } +} + +/////////////////////////////////////////////////////////////////////////////////////// +// PROTOTYPE +/////////////////////////////////////////////////////////////////////////////////////// +LayoutViewWorkflowBuilder.prototype.template = _.template($('#template-main_workflowbuilder').text()); +LayoutViewWorkflowBuilder.prototype.ui = { + buttonZoomIn: '#button-zoom_in', + buttonZoomOut: '#button-zoom_out', + buttonZoomReset: '#button-zoom_reset', + checkboxAddPorts: '#checkbox-add_ports', + dataStatus: '#data-workflow_status', + buttonEdit: '#button-edit', + buttonAddJob: '#button-add_job', + buttonImportWorkflow: '#button-import_workflow', + buttonRun: '#button-run' +}; +LayoutViewWorkflowBuilder.prototype.events = { + 'click @ui.buttonZoomIn': '_handleButtonZoomIn', + 'click @ui.buttonZoomOut': '_handleButtonZoomOut', + 'click @ui.buttonZoomReset': '_handleButtonZoomReset', + 'click @ui.dataStatus': '_handleClickDataStatus', + 'change @ui.checkboxAddPorts': '_handleClickCheckboxAddPorts', + 'click @ui.buttonEdit': '_handleButtonEdit', + 'click @ui.buttonAddJob': '_handleButtonAddJob', + 'click @ui.buttonImportWorkflow': '_handleButtonImportWorkflow', + 'click @ui.buttonRun': '_handleButtonRun' +}; +LayoutViewWorkflowBuilder.prototype.modelEvents = { + 'all': '_updateView' +}; + +export default LayoutViewWorkflowBuilder; diff --git a/rodan-client/code/src/js/Views/Master/Error/ViewError.js b/rodan-client/code/src/js/Views/Master/Error/ViewError.js new file mode 100755 index 000000000..44b926b33 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Error/ViewError.js @@ -0,0 +1,36 @@ +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Error view. + */ +export default class ViewError extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button. + */ + _handleButton() + { + // Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_LOGIN, {username: this.ui.textUsername.val(), password: this.ui.textPassword.val()}); + } +} +ViewError.prototype.ui = { + buttonSendError: '#button-send_error' +}; +ViewError.prototype.events = { + 'click @ui.buttonSendError': '_handleButton' +}; \ No newline at end of file diff --git a/rodan-client/code/src/js/Views/Master/LayoutViewMaster.js b/rodan-client/code/src/js/Views/Master/LayoutViewMaster.js new file mode 100755 index 000000000..ae4757e44 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/LayoutViewMaster.js @@ -0,0 +1,53 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import LayoutViewMain from './Main/LayoutViewMain'; +import LayoutViewNavigation from './Navigation/LayoutViewNavigation'; +import LayoutViewStatus from './Status/LayoutViewStatus'; +import Marionette from 'backbone.marionette'; + +/** + * Layout view for master work area. + */ +export default class LayoutViewMaster extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the view. + */ + initialize() + { + this.addRegions({ + regionMain: '#region-main', + regionNavigation: '#region-navigation', + regionStatus: '#region-status' + }); + this._initializeViews(); + + } + + /** + * Shows the main and navigation views. + */ + onRender() + { + this.showChildView('regionMain', this._layoutViewMain); + this.showChildView('regionNavigation', this._layoutViewNavigation); + this.showChildView('regionStatus', this._layoutViewStatus); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize all the views so they can respond to events. + */ + _initializeViews() + { + this._layoutViewNavigation = new LayoutViewNavigation(); + this._layoutViewMain = new LayoutViewMain(); + this._layoutViewStatus = new LayoutViewStatus(); + } +} +LayoutViewMaster.prototype.template = _.template($('#template-master').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/BaseViewCollection.js b/rodan-client/code/src/js/Views/Master/Main/BaseViewCollection.js new file mode 100755 index 000000000..31ed53e18 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/BaseViewCollection.js @@ -0,0 +1,9 @@ +import Marionette from 'backbone.marionette'; + +/** + * Base View for Collections. + */ +export default class BaseViewCollection extends Marionette.CollectionView {} +BaseViewCollection.prototype.modelEvents = { 'all': 'render' }; +BaseViewCollection.prototype.childViewContainer = 'tbody'; +BaseViewCollection.prototype.allowMultipleSelection = false; \ No newline at end of file diff --git a/rodan-client/code/src/js/Views/Master/Main/BaseViewCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/BaseViewCollectionItem.js new file mode 100755 index 000000000..d1f762703 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/BaseViewCollectionItem.js @@ -0,0 +1,27 @@ +import Marionette from 'backbone.marionette'; + +/** + * Base Collection Item view. + */ +export default class BaseViewCollectionItem extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Set description after render. + */ + onRender() + { + var description = 'no description available'; + if (this.model.has('description') && this.model.get('description') !== '') + { + description = this.model.get('description'); + } + this.$el.attr('title', description); + } +} +BaseViewCollectionItem.prototype.tagName = 'tr'; +BaseViewCollectionItem.prototype.modelEvents = { + 'change': 'render' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollection.js b/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollection.js new file mode 100755 index 000000000..5ce371317 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollection.js @@ -0,0 +1,9 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; + +/** + * View for InputPort Collection. + */ +export default class ViewInputPortCollection extends BaseViewCollection {} +ViewInputPortCollection.prototype.template = _.template($('#template-main_inputport_collection').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollectionItem.js new file mode 100755 index 000000000..6e96979c6 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/InputPort/ViewInputPortCollectionItem.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * InputPort Collection Item view. + */ +export default class ViewInputPortCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) and 'options.workflowjob' (WorkflowJob) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + this._workflowJob = options.workflowjob; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle delete. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_INPUTPORT, {inputport: this.model, workflow: this._workflow, workflowjob: this._workflowJob}); + } +} +ViewInputPortCollectionItem.prototype.ui = { + buttonDelete: '#button-delete' + }; +ViewInputPortCollectionItem.prototype.events = { + 'click @ui.buttonDelete': '_handleButtonDelete' + }; +ViewInputPortCollectionItem.prototype.template = _.template($('#template-main_inputport_collection_item').text()); +ViewInputPortCollectionItem.prototype.tagName = 'tr'; diff --git a/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollection.js b/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollection.js new file mode 100755 index 000000000..062f866cb --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollection.js @@ -0,0 +1,34 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ViewInputPortTypeCollectionItem from './ViewInputPortTypeCollectionItem'; + +/** + * InputPortType Collection view. + */ +export default class ViewInputPortTypeCollection extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflowjob' (WorkflowJob) must also be provided + */ + initialize(options) + { + var jobCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOB_COLLECTION); + var job = jobCollection.get(options.workflowjob.getJobUuid()); + /** @ignore */ + this.collection = job.get('input_port_types'); + } +} +ViewInputPortTypeCollection.prototype.modelEvents = { + 'all': 'render' +}; +ViewInputPortTypeCollection.prototype.template = _.template($('#template-main_inputporttype_collection').text()); +ViewInputPortTypeCollection.prototype.childView = ViewInputPortTypeCollectionItem; +ViewInputPortTypeCollection.prototype.childViewContainer = 'tbody'; diff --git a/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollectionItem.js new file mode 100755 index 000000000..a5ecaa6fb --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/InputPortType/ViewInputPortTypeCollectionItem.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * InputPortType Collection item view. + */ +export default class ViewInputPortTypeCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflowjob' (WorkflowJob) and 'options.workflow' (Workflow) must also be provided + */ + initialize(options) + { + this._workflowJob = options.workflowjob; + this._workflow = options.workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles input port add. + */ + _handleButtonNewInputPort() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_INPUTPORT, {inputporttype: this.model, workflowjob: this._workflowJob, workflow: this._workflow}); + } +} +ViewInputPortTypeCollectionItem.prototype.tagName = 'tr'; +ViewInputPortTypeCollectionItem.prototype.template = _.template($('#template-main_inputporttype_collection_item').text()); +ViewInputPortTypeCollectionItem.prototype.events = { + 'click @ui.buttonNewInputPort': '_handleButtonNewInputPort' +}; +ViewInputPortTypeCollectionItem.prototype.ui = { + buttonNewInputPort: '#button-new_inputport' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollection.js b/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollection.js new file mode 100755 index 000000000..6fecb49e9 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollection.js @@ -0,0 +1,19 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import ViewJobCollectionItem from './ViewJobCollectionItem'; + +/** + * View for Job Collection. + */ +export default class ViewJobCollection extends BaseViewCollection {} +ViewJobCollection.prototype.template = _.template($('#template-main_job_collection').text()); +ViewJobCollection.prototype.childView = ViewJobCollectionItem; +//let Behavior = BehaviorTable.extend({'table': '#table-jobs'}); +ViewJobCollection.prototype.behaviors = [ + { + behaviorClass: BehaviorTable, + table: '#table-jobs' + } +]; diff --git a/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollectionItem.js new file mode 100755 index 000000000..c43842590 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Job/Collection/ViewJobCollectionItem.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * View for Job item in Job Collection. + */ +export default class ViewJobCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) must also be provided for the associated Workflow + */ + initialize(options) + { + this._workflow = options.workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle add button. + */ + _handleClickButtonAdd() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_WORKFLOWJOB, {job: this.model, workflow: this._workflow}); + } +} +ViewJobCollectionItem.prototype.template = _.template($('#template-main_job_collection_item').text()); +ViewJobCollectionItem.prototype.tagName = 'tr'; +ViewJobCollectionItem.prototype.ui = { + buttonAdd: '#button-main_job_button_add' +}; +ViewJobCollectionItem.prototype.events = { + 'click @ui.buttonAdd': '_handleClickButtonAdd', + 'dblclick': '_handleClickButtonAdd' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/LayoutViewMain.js b/rodan-client/code/src/js/Views/Master/Main/LayoutViewMain.js new file mode 100755 index 000000000..ee498bd46 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/LayoutViewMain.js @@ -0,0 +1,65 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ViewLogin from './Login/ViewLogin'; + +/** + * Layout view for main work area. This is responsible for loading views within the main region. + */ +export default class LayoutViewMain extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this.addRegions({ + region: 'div' + }); + this._initializeRadio(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, options => this._handleCommandShow(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGOUT_SUCCESS, () => this._handleDeauthenticationSuccess()); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGINREQUIRED, () => this._handleAuthenticationLoginRequired()); + } + + /** + * Handles request for login. + */ + _handleAuthenticationLoginRequired() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: new ViewLogin()}); + } + + /** + * Handle show. + */ + _handleCommandShow(options) + { + /** @ignore */ + this.showChildView('region', options.view); + } + + /** + * Handle deauthentication success. + */ + _handleDeauthenticationSuccess() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: new ViewLogin()}); + } +} +LayoutViewMain.prototype.template = _.template($('#template-empty').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/LayoutViewModel.js b/rodan-client/code/src/js/Views/Master/Main/LayoutViewModel.js new file mode 100755 index 000000000..5b5e28503 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/LayoutViewModel.js @@ -0,0 +1,55 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; + +/** + * This is a layout to help render a Collection and a single item. + * We're using a LayoutView as opposed to a CompositeView because the single model + * that would be associated with the CompositveView is not initially known, so it can't + * rerender. + */ +export default class LayoutViewModel extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + this.addRegions({ + regionCollection: '#region-main_layoutview_model_collection', + regionItem: '#region-main_layoutview_model_item' + }); + } + + /** + * Show a Collection view. + * + * @param {Marionette.View} view Collection view to show + */ + showCollection(view) + { + this.showChildView('regionCollection', view); + } + + /** + * Show an item view. + * + * @param {Marionette.View} view item view to show + */ + showItem(view) + { + this.showChildView('regionItem', view); + } + + /** + * Clears item view. + */ + clearItemView() + { + this.getRegion('regionItem').empty(); + } +} +LayoutViewModel.prototype.template = _.template($('#template-main_layoutview_model').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/Login/ViewLogin.js b/rodan-client/code/src/js/Views/Master/Main/Login/ViewLogin.js new file mode 100755 index 000000000..4b47be0c2 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Login/ViewLogin.js @@ -0,0 +1,45 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Login view. + */ +export default class ViewLogin extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__UPDATER_CLEAR); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle login button. + */ + _handleButton() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_LOGIN, {username: this.ui.textUsername.val(), password: this.ui.textPassword.val()}); + } +} +ViewLogin.prototype.modelEvents = { + 'all': 'render' +}; +ViewLogin.prototype.ui = { + textUsername: '#text-login_username', + textPassword: '#text-login_password', + buttonLogin: '#button-login' +}; +ViewLogin.prototype.events = { + 'click @ui.buttonLogin': '_handleButton' +}; +ViewLogin.prototype.template = _.template($('#template-main_login').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollection.js b/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollection.js new file mode 100755 index 000000000..272add6e9 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollection.js @@ -0,0 +1,11 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import ViewOutputPortCollectionItem from './ViewOutputPortCollectionItem'; + +/** + * OutputPort Collection view. + */ +export default class ViewOutputPortCollection extends BaseViewCollection {} +ViewOutputPortCollection.prototype.template = _.template($('#template-main_outputport_collection').text()); +ViewOutputPortCollection.prototype.childView = ViewOutputPortCollectionItem; diff --git a/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollectionItem.js new file mode 100755 index 000000000..c10d50e80 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/OutputPort/ViewOutputPortCollectionItem.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * OutputPort Collection item view. + */ +export default class ViewOutputPortCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) and 'options.workflowjob' (WorkflowJob) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + this._workflowJob = options.workflowjob; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle delete. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_OUTPUTPORT, {outputport: this.model, workflow: this._workflow, workflowjob: this._workflowJob}); + } +} +ViewOutputPortCollectionItem.prototype.ui = { + buttonDelete: '#button-delete' +}; +ViewOutputPortCollectionItem.prototype.events = { + 'click @ui.buttonDelete': '_handleButtonDelete' +}; +ViewOutputPortCollectionItem.prototype.template = _.template($('#template-main_outputport_collection_item').text()); +ViewOutputPortCollectionItem.prototype.tagName = 'tr'; diff --git a/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollection.js b/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollection.js new file mode 100755 index 000000000..3b5d430ca --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollection.js @@ -0,0 +1,34 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewOutputPortTypeCollectionItem from './ViewOutputPortTypeCollectionItem'; + +/** + * OutputPortTYpe Collection view. + */ +export default class ViewOutputPortTypeCollection extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflowjob' (WorkflowJob) must also be provided + */ + initialize(options) + { + var jobCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOB_COLLECTION); + var job = jobCollection.get(options.workflowjob.getJobUuid()); + /** @ignore */ + this.collection = job.get('output_port_types'); + } +} +ViewOutputPortTypeCollection.prototype.modelEvents = { + 'all': 'render' +}; +ViewOutputPortTypeCollection.prototype.template = _.template($('#template-main_outputporttype_collection').text()); +ViewOutputPortTypeCollection.prototype.childView = ViewOutputPortTypeCollectionItem; +ViewOutputPortTypeCollection.prototype.childViewContainer = 'tbody'; diff --git a/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollectionItem.js new file mode 100755 index 000000000..29675235b --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollectionItem.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * OutputPortType Collection item view. + */ +export default class ViewOutputPortTypeCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflowjob' (WorkflowJob) and 'options.workflow' (Workflow) must also be provided + */ + initialize(options) + { + this._workflowJob = options.workflowjob; + this._workflow = options.workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles output port add. + */ + _handleButtonNewOutputPort() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_ADD_OUTPUTPORT, {outputporttype: this.model, workflowjob: this._workflowJob, workflow: this._workflow}); + } +} +ViewOutputPortTypeCollectionItem.prototype.tagName = 'tr'; +ViewOutputPortTypeCollectionItem.prototype.template = _.template($('#template-main_outputporttype_collection_item').text()); +ViewOutputPortTypeCollectionItem.prototype.events = { + 'click @ui.buttonNewOutputPort': '_handleButtonNewOutputPort' +}; +ViewOutputPortTypeCollectionItem.prototype.ui = { + buttonNewOutputPort: '#button-new_outputport' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollection.js b/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollection.js new file mode 100755 index 000000000..75680f460 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollection.js @@ -0,0 +1,34 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ViewProjectCollectionItem from './ViewProjectCollectionItem'; + +/** + * Project Collection view. + */ +export default class ViewProjectCollection extends BaseViewCollection +{ + _handleButtonNewProject() + { + var user = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_USER); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_CREATE, {creator: user}); + } +} + +ViewProjectCollection.prototype.ui = { + buttonNewProject: '#button-new_project' +}; +ViewProjectCollection.prototype.events = { + 'click @ui.buttonNewProject': '_handleButtonNewProject' +}; +ViewProjectCollection.prototype.template = _.template($('#template-main_project_collection').text()); +ViewProjectCollection.prototype.childView = ViewProjectCollectionItem; +ViewProjectCollection.prototype.behaviors = [ + { + behaviorClass: BehaviorTable, + table: '#table-projects' + } +]; diff --git a/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollectionItem.js new file mode 100755 index 000000000..8dfdccf59 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Project/Collection/ViewProjectCollectionItem.js @@ -0,0 +1,27 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Project Collection item view. + */ +export default class ViewProjectCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles double click. + */ + _handleDoubleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SELECTED, {project: this.model}); + } +} +ViewProjectCollectionItem.prototype.template = _.template($('#template-main_project_collection_item').text()); +ViewProjectCollectionItem.prototype.tagName = 'tr'; +ViewProjectCollectionItem.prototype.events = { + 'dblclick': '_handleDoubleClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Project/Individual/LayoutViewProjectUsers.js b/rodan-client/code/src/js/Views/Master/Main/Project/Individual/LayoutViewProjectUsers.js new file mode 100755 index 000000000..e8ad7ab40 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Project/Individual/LayoutViewProjectUsers.js @@ -0,0 +1,89 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * Project admin view. + */ +export default class LayoutViewProjectUsers extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.viewusers', 'options.viewprojectadmins' and 'options.viewprojectworkers' must be provided (each being Marionette.Views); also required is 'options.project' (Project) + */ + initialize(options) + { + this.addRegions({ + regionProjectAdmins: '#region-main_projectusers_admins', + regionProjectWorkers: '#region-main_projectusers_workers', + regionUsers: '#region-main_projectusers_users' + }); + this._viewProjectAdmins = options.viewprojectadmins; + this._viewProjectWorkers = options.viewprojectworkers; + this._viewUsers = options.viewusers; + this._project = options.project; + } + + /** + * Unbind from events. + */ + onDestroy() + { + Radio.channel('rodan').off(null, null, this); + Radio.channel('rodan').stopReplying(null, null, this); + } + + /** + * Before the view shows we make sure the subviews are shown. + */ + onRender() + { + this.showChildView('regionProjectAdmins', this._viewProjectAdmins); + this.showChildView('regionProjectWorkers', this._viewProjectWorkers); + this.showChildView('regionUsers', this._viewUsers); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button add admin. + */ + _handleButtonAddAdmin() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_ADD_USER_ADMIN, + {username: this._getSelectedUser(), project: this._project}); + } + + /** + * Handle button add worker. + */ + _handleButtonAddWorker() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_ADD_USER_WORKER, + {username: this._getSelectedUser(), project: this._project}); + } + + /** + * Get currently selected user. + */ + _getSelectedUser() + { + return $('#region-main_projectusers_users select').find(":selected").text().trim(); + } +} +LayoutViewProjectUsers.prototype.template = _.template($('#template-main_project_users').text()); +LayoutViewProjectUsers.prototype.ui = { + buttonAddAdmin: '#button-projectusers_add_admin', + buttonAddWorker: '#button-projectusers_add_worker' +}; +LayoutViewProjectUsers.prototype.events = { + 'click @ui.buttonAddAdmin': '_handleButtonAddAdmin', + 'click @ui.buttonAddWorker': '_handleButtonAddWorker' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Project/Individual/ViewProject.js b/rodan-client/code/src/js/Views/Master/Main/Project/Individual/ViewProject.js new file mode 100755 index 000000000..3a142617e --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Project/Individual/ViewProject.js @@ -0,0 +1,96 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Project view. + */ +export default class ViewProject extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle save button. + */ + _handleButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SAVE, + {project: this.model, + fields: {name: _.escape(this.ui.textName.val()), description: _.escape(this.ui.textDescription.val())}}); + } + + /** + * Handle delete button. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_DELETE, {project: this.model}); + } + + /** + * Handle RunJob button. + */ + _handleButtonRunJobs() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RUNJOB_SELECTED_COLLECTION, {project: this.model}); + } + + /** + * Handle click resource count. + */ + _handleClickResourceCount() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SELECTED_COLLECTION, {project: this.model}); + } + + /** + * Handle click workflow count. + */ + _handleClickWorkflowCount() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED_COLLECTION, {project: this.model}); + } + + /** + * Handle click button ResourceLists. + */ + _handleButtonResourceLists() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED_COLLECTION, {project: this.model}); + } + + /** + * Handle button Project users. + */ + _handleButtonProjectUsers() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_USERS_SELECTED, {project: this.model}); + } +} +ViewProject.prototype.modelEvents = { + 'all': 'render' + }; +ViewProject.prototype.ui = { + buttonSave: '#button-save_project', + buttonDelete: '#button-delete_project', + buttonResourceLists: '#button-resourcelists', + resourceCount: '#resource_count', + workflowCount: '#workflow_count', + buttonRunJobs: '#button-runjobs', + textName: '#text-project_name', + textDescription: '#text-project_description', + buttonUsers: '#button-project_users' + }; +ViewProject.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.buttonDelete': '_handleButtonDelete', + 'click @ui.resourceCount': '_handleClickResourceCount', + 'click @ui.workflowCount': '_handleClickWorkflowCount', + 'click @ui.buttonRunJobs': '_handleButtonRunJobs', + 'click @ui.buttonResourceLists': '_handleButtonResourceLists', + 'click @ui.buttonUsers': '_handleButtonProjectUsers' + }; +ViewProject.prototype.template = _.template($('#template-main_project_individual').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollection.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollection.js new file mode 100755 index 000000000..485ec078e --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollection.js @@ -0,0 +1,75 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import tagsInput from 'tags-input'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * View for Resource Collection. + */ +export default class ViewResourceCollection extends BaseViewCollection +{ + initialize(options) { + this.allowMultipleSelection = true; + this.octetStreamType = ''; + this.inputInitialized = false; + } + /** + * Handle file button. + */ + _handleClickButtonFile() + { + for (var i = 0; i < this.ui.fileInput[0].files.length; i++) + { + var file = this.ui.fileInput[0].files[i]; + var escapedFile = new File([file.slice(0, file.size)], _.escape(_.escape(file.name))); // This won't work with only one escape! + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_CREATE, + { + project: this.model, + file: escapedFile, + resourcetype: this.octetStreamType, + label_names: this.ui.labelInput[0].value + } + ); + } + this.ui.fileInput.replaceWith(this.ui.fileInput = this.ui.fileInput.clone(true)); + } + + /** + * On render populate the ResourceTypeList dropdown. + */ + onRender() + { + this.inputInitialized = false; + var resourceTypeCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + for (var i = 0; i < resourceTypeCollection.length; i++) + { + var resourceType = resourceTypeCollection.at(i); + if (resourceType.attributes.mimetype === 'application/octet-stream') { + this.octetStreamType = resourceType.attributes.url; + break; + } + } + } + + onAttach() + { + if (!this.inputInitalized && document.getElementById('label-input') !== null) { + tagsInput(document.getElementById('label-input')); + this.inputInitalized = true; + } + } +} +ViewResourceCollection.prototype.behaviors = [{behaviorClass: BehaviorTable, table: '#table-resources'}] +ViewResourceCollection.prototype.ui = { + fileInput: '#file-main_resource_file', + labelInput: '#label-input' +}; +ViewResourceCollection.prototype.events = { + 'change @ui.fileInput': '_handleClickButtonFile' +}; +ViewResourceCollection.prototype.filterTitles = { + 'creator__username': 'Creator' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionItem.js new file mode 100755 index 000000000..dd443c834 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionItem.js @@ -0,0 +1,43 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import Environment from 'js/Shared/Environment'; + +/** + * Item view for Resource Collection. + */ +export default class ViewResourceCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles click. + */ + _handleClick(event) + { + var multipleSelection = event[Environment.getMultipleSelectionKey()]; + var rangeSelection = event[Environment.getRangeSelectionKey()]; + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SELECTED, { + resource: this.model, + multiple: multipleSelection, + range: rangeSelection + }); + } + + /** + * Handles double click. + */ + _handleDblClick() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_DOWNLOAD, {resource: this.model}); + } +} +ViewResourceCollectionItem.prototype.template = _.template($('#template-main_resource_collection_item').text()); +ViewResourceCollectionItem.prototype.tagName = 'tr'; +ViewResourceCollectionItem.prototype.events = { + 'click': '_handleClick', + 'dblclick': '_handleDblClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModal.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModal.js new file mode 100755 index 000000000..4605585b4 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModal.js @@ -0,0 +1,12 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import ViewResourceCollection from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollection'; +import ViewResourceCollectionModalItem from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItem'; + +/** + * View for Resource Collection in modal view. + */ +export default class ViewResourceCollectionModal extends ViewResourceCollection {} +ViewResourceCollectionModal.prototype.allowMultipleSelection = true; +ViewResourceCollectionModal.prototype.template = _.template($('#template-modal_resource_collection').text()); +ViewResourceCollectionModal.prototype.childView = ViewResourceCollectionModalItem; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItem.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItem.js new file mode 100755 index 000000000..503ca95a7 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItem.js @@ -0,0 +1,49 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Resource item View for Collection in modal. + */ +export default class ViewResourceCollectionModalItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.assigned' (boolean; true if this item belongs to the "assigned" Collection), options.requestdata (object; data sent with requests), options.assignrequest (object; when item becomes assigned, this request is sent), options.unassignrequest (object; when item becomes unassigned, this request is sent) + */ + initialize(options) + { + this._assigned = options.assigned; + this._requestData = options.requestdata; + this._assignRequest = options.assignrequest; + this._unassignRequest = options.unassignrequest; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles double click. + */ + _handleDoubleClick() + { + this._requestData.resource = this.model; + if (this._assigned) + { + Radio.channel('rodan').request(this._unassignRequest, this._requestData); + } + else + { + Radio.channel('rodan').request(this._assignRequest, this._requestData); + } + } +} +ViewResourceCollectionModalItem.prototype.template = _.template($('#template-modal_resource_collection_item').text()); +ViewResourceCollectionModalItem.prototype.tagName = 'tr'; +ViewResourceCollectionModalItem.prototype.events = {'dblclick': '_handleDoubleClick'}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItemAssigned.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItemAssigned.js new file mode 100644 index 000000000..7b695cdb9 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Collection/ViewResourceCollectionModalItemAssigned.js @@ -0,0 +1,59 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Resource item View for Collection in modal to display assigned resources. + */ +export default class ViewResourceCollectionModalItemAssigned extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; options.requestdata (object; data sent with requests), options.unassignrequest (object; when item becomes unassigned, this request is sent), options.moveup (object; when item is to be moved up, this request is sent), options.movedown (object; when item is to be moved down, this request is sent) + */ + initialize(options) + { + this._requestData = options.requestdata; + this._unassignRequest = options.unassignrequest; + this._moveUp = options.moveup; + this._moveDown = options.movedown; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + _handleDoubleClick() + { + this._requestData.resource = this.model; + Radio.channel('rodan').request(this._unassignRequest, this._requestData); + } + + _handleMoveUp() + { + this._requestData.resource = this.model; + Radio.channel('rodan').request(this._moveUp, this._requestData); + } + + _handleMoveDown() + { + this._requestData.resource = this.model; + Radio.channel('rodan').request(this._moveDown, this._requestData); + } +} +ViewResourceCollectionModalItemAssigned.prototype.template = _.template($('#template-modal_resource_collection_item_assigned').text()); +ViewResourceCollectionModalItemAssigned.prototype.tagName = 'tr'; +ViewResourceCollectionModalItemAssigned.prototype.ui = { + moveUp: '.move-up', + moveDown: '.move-down', +}; +ViewResourceCollectionModalItemAssigned.prototype.events = { + 'dblclick': '_handleDoubleClick', + 'click @ui.moveUp': '_handleMoveUp', + 'click @ui.moveDown': '_handleMoveDown', +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResource.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResource.js new file mode 100755 index 000000000..0d1e0b477 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResource.js @@ -0,0 +1,137 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import tagsInput from 'tags-input'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewResourceLabel from 'js/Views/Master/Main/ResourceLabel/ViewResourceLabel'; +import ViewResourceTypeCollectionItem from 'js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem'; + +/** + * Resource view. + */ +export default class ViewResource extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + /** @ignore */ + this.collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + this.collection.each(function(model) { model.unset('selected'); }); + var resourceType = this.collection.findWhere({url: this.model.get('resource_type')}); + resourceType.set('selected', 'selected'); + } + + /** + * Initialize buttons after render. + */ + onRender() + { + var disabledDelete = this.model.get('origin') !== null; + $(this.ui.buttonDelete).attr('disabled', disabledDelete); + var disabledDownload = this.model.get('download') === null; + $(this.ui.buttonDownload).attr('disabled', disabledDownload); + var disableView = this.model.get('viewer_url') === null || disabledDownload; + $(this.ui.buttonView).attr('disabled', disableView); + + if (this.isAttached()) { + tagsInput(this.ui.resourceLabels[0]); + } + } + + /** + * Initialize label field after it's attached to the DOM + */ + onAttach() + { + tagsInput(this.ui.resourceLabels[0]); + } + + /** + * Destroy callback. + */ + onDestroy() + { + this.collection = null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button save. + */ + _handleClickButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_SAVE, {resource: this.model, + fields: {resource_type: this.ui.selectResourceType.find(':selected').val(), + name: _.escape(this.ui.resourceName.val()), + description: _.escape(this.ui.resourceDescription.val()), + label_names: _.escape(this.ui.resourceLabels.val())}}); + } + + /** + * Handle button delete. + */ + _handleClickButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_DELETE, {resource: this.model}); + } + + /** + * Handle button download. + */ + _handleClickDownload() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_DOWNLOAD, {resource: this.model}); + } + + /** + * Handle button view. + */ + _handleClickView() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_VIEWER_ACQUIRE, {resource: this.model}); + } + + _handleDblClickTag(evt) + { + let labels = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCELABEL_COLLECTION); + let model = labels.findWhere({name: evt.target.textContent}); + if (model) { + let view = new ViewResourceLabel({model: model}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, { + content: view + }); + } + } +} +ViewResource.prototype.modelEvents = { + 'all': 'render' +}; +ViewResource.prototype.ui = { + buttonSave: '#button-main_resource_individual_save', + buttonDelete: '#button-main_resource_individual_delete', + selectResourceType: '#select-resourcetype', + resourceName: '#text-resource_name', + resourceDescription: '#text-resource_description', + buttonDownload: '#button-main_resource_individual_download', + buttonView: '#button-main_resource_individual_view', + resourceLabels: '#input-resource_labels', + tagSpans: 'span.tag' +}; +ViewResource.prototype.events = { + 'click @ui.buttonSave': '_handleClickButtonSave', + 'click @ui.buttonDelete': '_handleClickButtonDelete', + 'click @ui.buttonDownload': '_handleClickDownload', + 'click @ui.buttonView': '_handleClickView', + 'dblclick @ui.tagSpans': '_handleDblClickTag' +}; +ViewResource.prototype.template = _.template($('#template-main_resource_individual').text()); +ViewResource.prototype.childView = ViewResourceTypeCollectionItem; +ViewResource.prototype.childViewContainer = '#select-resourcetype'; diff --git a/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResourceMulti.js b/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResourceMulti.js new file mode 100644 index 000000000..bd19d15a6 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Resource/Individual/ViewResourceMulti.js @@ -0,0 +1,143 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import tagsInput from 'tags-input'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewResourceTypeCollectionItem from 'js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem'; + +/** + * Resource Multi-Select View + */ +export default class ViewResourceMulti extends Marionette.CollectionView +{ + constructor(options) { + super(options); + this._models = options.models; + + var rtUrl; + var labels; + this.labelNames = ''; + this.isSameType = true; + this.isSameLabel = true; + + for (let model of this._models) { + let modelResourceTypeURL = model.get('resource_type'); + let modelLabels = model.get('labels'); + if (rtUrl === undefined) { + rtUrl = modelResourceTypeURL; + } + else if (rtUrl !== modelResourceTypeURL) { + this.isSameType = false; + } + if (labels === undefined) { + labels = modelLabels; + this.labelNames = model.get('resource_label_full'); + } + else if (!_.isEqual(labels, modelLabels)) { + this.isSameLabel = false; + } + } + + this.collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + this.collection.each(function(model) { model.unset('selected'); }); + var resourceType = this.collection.findWhere({url: rtUrl}); + resourceType.set('selected', 'selected'); + } + /** + * Initialize buttons after render. + */ + onRender() + { + var disabledDelete = false; + var disabledDownload = false; + for (var model of this._models) { + if (model.get('origin') !== null) { + disabledDelete = true; + } + if (model.get('download') === null) { + disabledDownload = true; + } + } + $(this.ui.buttonDelete).attr('disabled', disabledDelete); + $(this.ui.buttonDownload).attr('disabled', disabledDownload); + + $(this.ui.buttonSave).attr('disabled', !this.isSameType); + $(this.ui.selectResourceType).attr('disabled', !this.isSameType); + + // Disable all other buttons for now. + $(this.ui.buttonView).attr('disabled', true); + } + + onAttach() + { + if (this.isSameLabel) { + this.ui.labelInput[0].setAttribute('value', _.map(this.labelNames, (label) => { return label.name; })); + tagsInput(this.ui.labelInput[0]); + } + } + + templateContext() { + return { + count: this._models.size, + isSameLabel: this.isSameLabel + }; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button delete. + */ + _handleClickButtonDelete() + { + for (var model of this._models) { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_DELETE, {resource: model}); + } + } + + _handleClickButtonDownload() + { + let modelArray = [...this._models.values()]; + let uuids = _.map(modelArray, val => { return val.id; }); + let baseUrl = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_GET_ROUTE, 'resource-archive'); + let a = document.createElement('a'); + a.download = 'Archive.zip'; + a.href = baseUrl + '?' + $.param({resource_uuid: uuids}, true); + document.body.append(a); + a.click(); + a.remove(); + } + + _handleClickButtonSave() + { + let fields = { + resource_type: this.ui.selectResourceType.find(':selected').val() + }; + if (this.isSameLabel) { + fields['label_names'] = this.ui.labelInput.val(); + } + for (var model of this._models) { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_SAVE, {resource: model, fields: fields}); + } + } +} +ViewResourceMulti.prototype.modelEvents = { +}; +ViewResourceMulti.prototype.ui = { + buttonSave: '#button-main_resource_individual_save', + buttonDelete: '#button-main_resource_individual_delete', + buttonDownload: '#button-main_resource_individual_download', + buttonView: '#button-main_resource_individual_view', + selectResourceType: '#select-resourcetype', + labelInput: '#label-multi-input' +}; +ViewResourceMulti.prototype.events = { + 'click @ui.buttonDelete': '_handleClickButtonDelete', + 'click @ui.buttonDownload': '_handleClickButtonDownload', + 'click @ui.buttonSave': '_handleClickButtonSave' +}; +ViewResourceMulti.prototype.template = _.template($('#template-main_resource_individual_multi').text()); +ViewResourceMulti.prototype.childView = ViewResourceTypeCollectionItem; +ViewResourceMulti.prototype.childViewContainer = '#select-resourcetype'; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceAssignment/LayoutViewResourceAssignment.js b/rodan-client/code/src/js/Views/Master/Main/ResourceAssignment/LayoutViewResourceAssignment.js new file mode 100755 index 000000000..700352cbf --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceAssignment/LayoutViewResourceAssignment.js @@ -0,0 +1,105 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * ResourceAssignment view. + */ +export default class LayoutViewResourceAssignment extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.viewavailableresources' and 'options.viewassignedresources' must be provided (each being Marionette.Views); also required is 'options.workflow' (Workflow) and 'options.inputport' (InputPort) + */ + initialize(options) + { + this.addRegions({ + regionAvailableResources: '#region-main_resourceassignment_availableresources', + regionAssignedResources: '#region-main_resourceassignment_assignedresources' + }); + this._viewAvailableResources = options.viewavailableresources; + this._viewAssignedResources = options.viewassignedresources; + + this._viewAssignedResources.collection.on('update', this._updateAssignedCount); + } + + /** + * Unbind from events. + */ + onDestroy() + { + Radio.channel('rodan').off(null, null, this); + Radio.channel('rodan').stopReplying(null, null, this); + } + + /** + * Before the view shows we make sure the subviews are shown. + */ + onRender() + { + this.showChildView('regionAvailableResources', this._viewAvailableResources); + this.showChildView('regionAssignedResources', this._viewAssignedResources); + this._updateAssignedCount(this._viewAssignedResources.collection); + } + + /** + * Handle button add all. + */ + _handleButtonAddAll() + { + $(this.getRegion('regionAvailableResources').el).find('tr').trigger('dblclick'); + } + + /** + * Handle button add selected. + */ + _handleButtonAddSelected() + { + $(this.getRegion('regionAvailableResources').el).find('tr.active').trigger('dblclick'); + } + + /** + * Handle button remove all. + */ + _handleButtonRemoveAll() + { + $(this.getRegion('regionAssignedResources').el).find('tr').trigger('dblclick'); + } + + /** + * Handle button remove selected. + */ + _handleButtonRemoveSelected() + { + $(this.getRegion('regionAssignedResources').el).find('tr.active').trigger('dblclick'); + } + + _updateAssignedCount(collection) { + if (this.el) { + let span = this.el.querySelector("#region-main_resourceassignment_assignedresources_num"); + span.textContent = collection.length.toString(); + } + else if (document.getElementById("region-main_resourceassignment_assignedresources_num")){ + document.getElementById("region-main_resourceassignment_assignedresources_num") + .textContent = collection.length.toString(); + } + } +} +LayoutViewResourceAssignment.prototype.template = _.template($('#template-main_resourceassignment').text()); +LayoutViewResourceAssignment.prototype.ui = { + buttonAddAll: '#button-add_all', + buttonAddSelected: '#button-add_selected', + buttonRemoveAll: '#button-remove_all', + buttonRemoveSelected: '#button-remove_selected' +}; +LayoutViewResourceAssignment.prototype.events = { + 'click @ui.buttonAddAll': '_handleButtonAddAll', + 'click @ui.buttonAddSelected': '_handleButtonAddSelected', + 'click @ui.buttonRemoveAll': '_handleButtonRemoveAll', + 'click @ui.buttonRemoveSelected': '_handleButtonRemoveSelected' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceLabel/ViewResourceLabel.js b/rodan-client/code/src/js/Views/Master/Main/ResourceLabel/ViewResourceLabel.js new file mode 100644 index 000000000..2c7d69c14 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceLabel/ViewResourceLabel.js @@ -0,0 +1,47 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + + +/** + * ResourceLabel view + */ +export default class ViewResourceLabel extends Marionette.View +{ + initialize(object) + { + this.model = object.model; + } + + templateContext() + { + return { + tagName: this.model.get('name') + } + } + + _handleClickButtonSave() + { + let newName = $(this.ui.nameInput).val(); + this.model.save({name: newName}, { + patch: true, + success: () => { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCES_UPDATE_LABELS); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + }, + error: () => { + $(this.ui.alert).removeAttr('hidden'); + }}); + } +} +ViewResourceLabel.prototype.ui = { + buttonSave: '#button-save_label_name', + nameInput: '#text-label_name', + alert: '#alert-label_exists' +}; +ViewResourceLabel.prototype.events = { + 'click @ui.buttonSave': '_handleClickButtonSave' +}; +ViewResourceLabel.prototype.template = _.template($('#template-main_resourcelabel').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollection.js b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollection.js new file mode 100755 index 000000000..7d1cc8ae1 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollection.js @@ -0,0 +1,44 @@ +import _ from 'underscore'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * View for ResourceList Collection. + */ +export default class ViewResourceListCollection extends BaseViewCollection +{ + /** + * On render populate the ResourceTypeList dropdown. + */ + onRender() + { + /* var templateResourceType = _.template($('#template-resourcetype_collection_item').html()); + var resourceTypeCollection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); +// var html = templateResourceType({url: null, mimetype: 'Auto-detect', extension: 'Rodan will attempt to determine the file type based on the file itself'}); + // this.$el.find('#select-resourcetype').append(html); + for (var i = 0; i < resourceTypeCollection.length; i++) + { + var resourceType = resourceTypeCollection.at(i); + var html = templateResourceType(resourceType.attributes); + this.$el.find('#select-resourcetype').append(html); + }*/ + } + + /** + * Handle button new ResourceList. + */ + _handleButtonNewResourceList() + { + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_CREATE, {project: project}); + } +} +ViewResourceListCollection.prototype.behaviors = [{behaviorClass: BehaviorTable, table: '#table-resourcelists'}]; +ViewResourceListCollection.prototype.ui = { + buttonNewResourceList: '#button-new_resourcelist' +}; +ViewResourceListCollection.prototype.events = { + 'click @ui.buttonNewResourceList': '_handleButtonNewResourceList' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollectionItem.js new file mode 100755 index 000000000..cf38797cb --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Collection/ViewResourceListCollectionItem.js @@ -0,0 +1,36 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Item view for ResourceList Collection. + */ +export default class ViewResourceListCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles click. + */ + _handleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED, {resourcelist: this.model}); + } + + /** + * Handles double click. + */ + _handleDblClick() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_DOWNLOAD, {resourcelist: this.model}); + } +} +ViewResourceListCollectionItem.prototype.template = _.template($('#template-main_resourcelist_collection_item').text()); +ViewResourceListCollectionItem.prototype.tagName = 'tr'; +ViewResourceListCollectionItem.prototype.events = { + 'click': '_handleClick', + 'dblclick': '_handleDblClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceList/Individual/ViewResourceList.js b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Individual/ViewResourceList.js new file mode 100755 index 000000000..650f2d226 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceList/Individual/ViewResourceList.js @@ -0,0 +1,107 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewResourceTypeCollectionItem from 'js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem'; + +/** + * ResourceList view. + */ +export default class ViewResourceList extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + */ + initialize() + { + /** @ignore */ + this.collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + this.collection.each(function(model) { model.unset('selected'); }); + // var resourceType = this.collection.findWhere({url: this.model.get('resource_type')}); + // resourceType.set('selected', 'selected'); + } + + /** + * Initialize buttons after render. + */ + onRender() + { + var disabledDelete = this.model.get('origin') !== null; + $(this.ui.buttonDelete).attr('disabled', disabledDelete); + var disabledDownload = this.model.get('download') === null; + $(this.ui.buttonDownload).attr('disabled', disabledDownload); + var disableView = this.model.get('viewer_url') === null || disabledDownload; + $(this.ui.buttonView).attr('disabled', disableView); + } + + /** + * Destroy callback. + */ + onDestroy() + { + this.collection = null; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button save. + */ + _handleClickButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_SAVE, {resourcelist: this.model, + fields: {resource_type: this.ui.selectResourceType.val(), + name: this.ui.resourceListName.val(), + description: this.ui.resourceListDescription.val()}}); + } + + /** + * Handle button delete. + */ + _handleClickButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_DELETE, {resourcelist: this.model}); + } + + /** + * Handle button download. + */ + _handleClickDownload() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_DOWNLOAD, {resourcelist: this.model}); + } + + /** + * Handle button add/remove. + */ + _handleClickAddRemove() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCELIST_SHOW_RESOURCEASSIGNMENT_VIEW, {resourcelist: this.model}); + } +} +ViewResourceList.prototype.modelEvents = { + 'all': 'render' +}; +ViewResourceList.prototype.ui = { + buttonSave: '#button-main_resourcelist_individual_save', + buttonDelete: '#button-main_resourcelist_individual_delete', + selectResourceType: '#select-resourcetype', + resourceListName: '#text-resourcelist_name', + resourceListDescription: '#text-resourcelist_description', + buttonDownload: '#button-main_resourcelist_individual_download', + buttonAddRemove: '#button-main_resourcelist_individual_addremove' +}; +ViewResourceList.prototype.events = { + 'click @ui.buttonSave': '_handleClickButtonSave', + 'click @ui.buttonDelete': '_handleClickButtonDelete', + 'click @ui.buttonDownload': '_handleClickDownload', + 'click @ui.buttonAddRemove': '_handleClickAddRemove' +}; +ViewResourceList.prototype.template = _.template($('#template-main_resourcelist_individual').text()); +ViewResourceList.prototype.childView = ViewResourceTypeCollectionItem; +ViewResourceList.prototype.childViewContainer = '#select-resourcetype'; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem.js new file mode 100755 index 000000000..e07c2ac2e --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeCollectionItem.js @@ -0,0 +1,27 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; + +/** + * ResourceType view. + */ +export default class ViewResourceTypeCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * After render, set the value of the 'option.value'. + */ + onRender() + { + super.onRender(); + this.$el.attr('value', this.model.get('url')); + if (this.model.has('selected')) + { + this.$el.attr('selected', 'selected'); + } + } +} +ViewResourceTypeCollectionItem.prototype.template = _.template($('#template-resourcetype_collection_item').text()); +ViewResourceTypeCollectionItem.prototype.tagName = 'option'; diff --git a/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeDetailCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeDetailCollectionItem.js new file mode 100755 index 000000000..4292b2589 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/ResourceType/ViewResourceTypeDetailCollectionItem.js @@ -0,0 +1,29 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import Utilities from 'js/Shared/Utilities'; + +/** + * ResourceType detail view. + */ +export default class ViewResourceTypeDetailCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles button. + */ + _handleButton() + { + Utilities.copyTextToClipboard(this.model.get('url')); + } +} +ViewResourceTypeDetailCollectionItem.prototype.template = _.template($('#template-resourcetype_detail_collection_item').text()); +ViewResourceTypeDetailCollectionItem.prototype.tagName = 'tr'; +ViewResourceTypeDetailCollectionItem.prototype.events = { + 'click @ui.button': '_handleButton' +}; +ViewResourceTypeDetailCollectionItem.prototype.ui = { + 'button': '#button-copy_url' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollection.js b/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollection.js new file mode 100755 index 000000000..f44158e5d --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollection.js @@ -0,0 +1,8 @@ +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; + +/** + * RunJob Collection view. + */ +export default class ViewRunJobCollection extends BaseViewCollection {} +ViewRunJobCollection.prototype.behaviors = [{behaviorClass: BehaviorTable, table: '#table-runjobs'}]; diff --git a/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollectionItem.js new file mode 100755 index 000000000..0c00e6aa5 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/RunJob/Collection/ViewRunJobCollectionItem.js @@ -0,0 +1,40 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * RunJob Collection item view. + */ +export default class ViewRunJobCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Set availability property before render. + * + * @todo this is a hack to make sure the client shows what runjobs are manual and available + */ + onBeforeRender() + { + this.model.set('available', this.model.available()); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles click. + */ + _handleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RUNJOB_SELECTED, {runjob: this.model}); + } +} +ViewRunJobCollectionItem.prototype.template = _.template($('#template-main_runjob_collection_item').text()); +ViewRunJobCollectionItem.prototype.tagName = 'tr'; +ViewRunJobCollectionItem.prototype.events = { + 'click': '_handleClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/RunJob/Individual/ViewRunJob.js b/rodan-client/code/src/js/Views/Master/Main/RunJob/Individual/ViewRunJob.js new file mode 100755 index 000000000..676598b93 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/RunJob/Individual/ViewRunJob.js @@ -0,0 +1,45 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * RunJob view. + */ +export default class ViewRunJob extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Set 'Open' button availability after render. + * + * @todo this is a hack to make sure the client shows what runjobs are manual and available + */ + onRender() + { + $(this.el).find('#button-open_runjob').prop('disabled', !this.model.available()); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle double-click. + */ + _handleButtonOpen() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RUNJOB_ACQUIRE, {runjob: this.model}); + } +} +ViewRunJob.prototype.modelEvents = { + 'all': 'render' +}; +ViewRunJob.prototype.ui = { + buttonOpen: '#button-open_runjob' +}; +ViewRunJob.prototype.events = { + 'click @ui.buttonOpen': '_handleButtonOpen' + }; +ViewRunJob.prototype.template = _.template($('#template-main_runjob_individual').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/User/Collection/ViewUserCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/User/Collection/ViewUserCollectionItem.js new file mode 100644 index 000000000..a510b7869 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/User/Collection/ViewUserCollectionItem.js @@ -0,0 +1,40 @@ +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Item view for User Collection. + */ +export default class ViewUserCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.project' (Project) must also be provided for the associated Project; if 'options.admin' is true, user treated as Project 'admin', else 'worker' + */ + initialize(options) + { + this._project = options.project; + this._removeEvent = options.admin ? RODAN_EVENTS.REQUEST__PROJECT_REMOVE_USER_ADMIN : RODAN_EVENTS.REQUEST__PROJECT_REMOVE_USER_WORKER; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle remove button. + */ + _handleClickButtonRemove() + { + Radio.channel('rodan').request(this._removeEvent, {user: this.model, project: this._project}); + } +} +ViewUserCollectionItem.prototype.ui = { + buttonRemove: '#button-main_project_remove_user' +}; +ViewUserCollectionItem.prototype.events = { + 'click @ui.buttonRemove': '_handleClickButtonRemove' +}; \ No newline at end of file diff --git a/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewPassword.js b/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewPassword.js new file mode 100755 index 000000000..caf1fa6e3 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewPassword.js @@ -0,0 +1,63 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Password view. + */ +export default class ViewPassword extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle save button. + */ + _handleButtonSave() + { + var passwordError = this._checkPassword(); + if (passwordError) + { + this.ui.textmessage.text(passwordError); + } + else + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__USER_CHANGE_PASSWORD, {newpassword: this.ui.textPassword.val(), + currentpassword: this.ui.textPasswordCurrent.val()}); + } + } + + /** + * Checks password fields. Will provide error text if passwords no good, else null. + */ + _checkPassword() + { + var password = this.ui.textPassword.val(); + var confirm = this.ui.textPasswordConfirm.val(); + if (!password) + { + return 'Your password cannot be empty. Come on, you must have done this before.'; + } + else if (password !== confirm) + { + return 'Passwords do not match.'; + } + return null; + } +} +ViewPassword.prototype.modelEvents = { + 'all': 'render' + }; +ViewPassword.prototype.ui = { + buttonSave: '#button-save_password', + textPassword: '#text-password', + textPasswordConfirm: '#text-password_confirm', + textmessage: '#text-message', + textPasswordCurrent: '#text-password_current' + }; +ViewPassword.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave' + }; +ViewPassword.prototype.template = _.template($('#template-main_user_password').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewUser.js b/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewUser.js new file mode 100755 index 000000000..1c2f0c6cd --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/User/Individual/ViewUser.js @@ -0,0 +1,107 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewPassword from './ViewPassword'; + +/** + * User view. + */ +export default class ViewUser extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the view. + */ + initialize() + { + /** @ignore */ + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__USER_PREFERENCE_LOADED, (options) => this._handleUserPreferenceLoaded(options)); + } + + /** + * On render, update user preferences if available. + */ + onRender() + { + this._renderUserPreference(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle save button. + */ + _handleButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__USER_SAVE, + {fields: {first_name: _.escape(this.ui.textFirstName.val()), + last_name: _.escape(this.ui.textLastName.val()), + email: _.escape(this.ui.textEmail.val())}}); + if (this._userPreference) + { + this._userPreference.set({'send_email': $(this.ui.checkboxSendEmail).prop('checked')}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__USER_PREFERENCE_SAVE, {user_preference: this._userPreference}); + } + } + + /** + * Handle change password button. + */ + _handleButtonChangePassword() + { + var view = new ViewPassword(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: 'Change Password', content: view}); + + } + + /** + * Handle user preference loaded. + */ + _handleUserPreferenceLoaded(options) + { + this._renderUserPreference(); + } + + /** + * Render user preference. + */ + _renderUserPreference() + { + this._userPreference = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__USER_PREFERENCE); + if (this._userPreference) + { + $(this.ui.divUserPreference).show(); + $(this.ui.divUserPreferenceLoading).hide(); + $(this.ui.checkboxSendEmail).prop('checked', this._userPreference.get('send_email')); + } + else + { + $(this.ui.divUserPreference).hide(); + $(this.ui.divUserPreferenceLoading).show(); + } + } +} +ViewUser.prototype.modelEvents = { + 'all': 'render' + }; +ViewUser.prototype.ui = { + buttonSave: '#button-save_user', + buttonPassword: '#button-change_password', + textFirstName: '#text-user_firstname', + textLastName: '#text-user_lastname', + textEmail: '#text-user_email', + checkboxSendEmail: '#checkbox-send_email', + divUserPreference: '#div-user_preference', + divUserPreferenceLoading: '#div-user_preference_loading' + }; +ViewUser.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.buttonPassword': '_handleButtonChangePassword' + }; +ViewUser.prototype.template = _.template($('#template-main_user_individual').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollection.js b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollection.js new file mode 100755 index 000000000..160f1cd70 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollection.js @@ -0,0 +1,44 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ViewWorkflowCollectionItem from './ViewWorkflowCollectionItem'; + +/** + * Workflow Collection view. + */ +export default class ViewWorkflowCollection extends BaseViewCollection +{ + _handleButtonNewWorkflow() + { + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOW_CREATE, {project: project}); + } + + _handleButtonImportWorkflow() + { + var project = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_GET_ACTIVE); + for (var i = 0; i < this.ui.fileInput[0].files.length; i++) + { + var file = this.ui.fileInput[0].files[i]; + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOW_IMPORT, {project: project, file: file}); + } + this.ui.fileInput.replaceWith(this.ui.fileInput = this.ui.fileInput.clone(true)); + } +} +ViewWorkflowCollection.prototype.template = _.template($('#template-main_workflow_collection').text()); +ViewWorkflowCollection.prototype.childView = ViewWorkflowCollectionItem; +ViewWorkflowCollection.prototype.behaviors = [{behaviorClass: BehaviorTable, table: '#table-workflows'}]; +ViewWorkflowCollection.prototype.ui = { + newWorkflowButton: '#button-new_workflow', + fileInput: '#file-import_workflow' +}; +ViewWorkflowCollection.prototype.events = { + 'click @ui.newWorkflowButton': '_handleButtonNewWorkflow', + 'change @ui.fileInput': '_handleButtonImportWorkflow' +}; +ViewWorkflowCollection.prototype.filterTitles = { + 'creator__username': 'Creator' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionImportItem.js b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionImportItem.js new file mode 100755 index 000000000..6316b6862 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionImportItem.js @@ -0,0 +1,42 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Workflow Collection item for importing into another Workflow. + */ +export default class ViewWorkflowCollectionImportItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + _handleButtonImportWorkflow() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_IMPORT_WORKFLOW, {origin: this.model, target: this._workflow}); + } +} +ViewWorkflowCollectionImportItem.prototype.template = _.template($('#template-main_workflowbuilder_workflow_collection_item_import').text()); +ViewWorkflowCollectionImportItem.prototype.tagName = 'tr'; +ViewWorkflowCollectionImportItem.prototype.ui = { + buttonImportWorkflow: '#button-main_workflowbuilder_workflow_import' +}; +ViewWorkflowCollectionImportItem.prototype.events = { + 'click @ui.buttonImportWorkflow': '_handleButtonImportWorkflow', + 'dblclick': '_handleButtonImportWorkflow' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionItem.js new file mode 100755 index 000000000..e4b7952da --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Workflow/Collection/ViewWorkflowCollectionItem.js @@ -0,0 +1,36 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * View for Workflow Collection. + */ +export default class ViewWorkflowCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles click. + */ + _handleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED, {workflow: this.model}); + } + + /** + * Handle double-click. + */ + _handleDoubleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_SELECTED, {workflow: this.model}); + } +} +ViewWorkflowCollectionItem.prototype.template = _.template($('#template-main_workflow_collection_item').text()); +ViewWorkflowCollectionItem.prototype.tagName = 'tr'; +ViewWorkflowCollectionItem.prototype.events = { + 'click': '_handleClick', + 'dblclick': '_handleDoubleClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/Workflow/Individual/ViewWorkflow.js b/rodan-client/code/src/js/Views/Master/Main/Workflow/Individual/ViewWorkflow.js new file mode 100755 index 000000000..24c9de11b --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/Workflow/Individual/ViewWorkflow.js @@ -0,0 +1,86 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * Workflow view. + */ +export default class ViewWorkflow extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button run workflow. + */ + _handleButtonRunWorkflow() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN, {workflow: this.model}); + } + + /** + * Handle button delete workflow. + */ + _handleButtonDeleteWorkflow() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOW_DELETE, {workflow: this.model}); + } + + /** + * Handle button edit workflow. + */ + _handleButtonEditWorkflow() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWBUILDER_SELECTED, {workflow: this.model}); + } + + /** + * Handle button copy workflow. + */ + _handleButtonCopyWorkflow() + { + } + + /** + * Handle button export workflow. + */ + _handleButtonExport() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOW_EXPORT, {workflow: this.model}); + } + + /** + * Handle save button. + */ + _handleButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOW_SAVE, {workflow: this.model, fields: {name: _.escape(this.ui.textName.val()), description: _.escape(this.ui.textDescription.val())}}); + } +} +ViewWorkflow.prototype.modelEvents = { + 'all': 'render' + }; +ViewWorkflow.prototype.ui = { + runWorkflowButton: '#button-run_workflow', + deleteWorkflowButton: '#button-delete_workflow', + copyWorkflowButton: '#button-copy_workflow', + exportWorkflowButton: '#button-export_workflow', + editWorkflowButton: '#button-edit_workflow', + buttonSaveData: '#button-save_workflow_data', + buttonSave: '#button-save_workflow', + textName: '#text-workflow_name', + textDescription: '#text-workflow_description' + }; +ViewWorkflow.prototype.events = { + 'click @ui.runWorkflowButton': '_handleButtonRunWorkflow', + 'click @ui.deleteWorkflowButton': '_handleButtonDeleteWorkflow', + 'click @ui.editWorkflowButton': '_handleButtonEditWorkflow', + 'click @ui.copyWorkflowButton': '_handleButtonCopyWorkflow', + 'click @ui.buttonSaveData': '_handleButtonSave', + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.exportWorkflowButton': '_handleButtonExport' + }; +ViewWorkflow.prototype.template = _.template($('#template-main_workflow_individual').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/LayoutViewControlPorts.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/LayoutViewControlPorts.js new file mode 100755 index 000000000..762331cc0 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/LayoutViewControlPorts.js @@ -0,0 +1,66 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import ViewInputPortCollection from 'js/Views/Master/Main/InputPort/ViewInputPortCollection'; +import ViewInputPortCollectionItem from 'js/Views/Master/Main/InputPort/ViewInputPortCollectionItem'; +import ViewInputPortTypeCollection from 'js/Views/Master/Main/InputPortType/ViewInputPortTypeCollection'; +import ViewOutputPortCollection from 'js/Views/Master/Main/OutputPort/ViewOutputPortCollection'; +import ViewOutputPortTypeCollection from 'js/Views/Master/Main/OutputPortType/ViewOutputPortTypeCollection'; + +/** + * View for editing ports. + */ +export default class LayoutViewControlPorts extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflowjob' (WorkflowJob) must also be provided + */ + initialize(options) + { + this.addRegions({ + regionControlInputPortTypes: '#region-main_inputporttypes', + regionControlInputPorts: '#region-main_inputports', + regionControlOutputPortTypes: '#region-main_outputporttypes', + regionControlOutputPorts: '#region-main_outputports' + }); + this._workflowJob = options.workflowjob; + this._initializeViews(options); + } + + /** + * Show the subviews before showing this view. + */ + onRender() + { + this.showChildView('regionControlInputPortTypes', this._inputPortTypeCollectionView); + this.showChildView('regionControlInputPorts', this._inputPortCollectionView); + this.showChildView('regionControlOutputPortTypes', this._outputPortTypeCollectionView); + this.showChildView('regionControlOutputPorts', this._outputPortCollectionView); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle workflowjob selection. + */ + _initializeViews(options) + { + this._inputPortCollectionView = new ViewInputPortCollection({collection: options.workflowjob.get('input_ports'), + template: _.template($('#template-main_inputport_collection').text()), + childView: ViewInputPortCollectionItem, + childViewOptions: options}); + this._outputPortCollectionView = new ViewOutputPortCollection({collection: options.workflowjob.get('output_ports'), + childViewOptions: options}); + this._inputPortTypeCollectionView = new ViewInputPortTypeCollection({workflowjob: options.workflowjob, + childViewOptions: options}); + this._outputPortTypeCollectionView = new ViewOutputPortTypeCollection({workflowjob: options.workflowjob, + childViewOptions: options}); + } +} +LayoutViewControlPorts.prototype.template = _.template($('#template-main_workflowjob_ports').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewControlWorkflowJob.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewControlWorkflowJob.js new file mode 100755 index 000000000..b877a77d2 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewControlWorkflowJob.js @@ -0,0 +1,56 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * View for editing WorkflowJob. + */ +export default class ViewControlWorkflowJob extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle save button. + */ + _handleButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + this.model.set({'name': this.ui.textName.val()}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOB_SAVE, {workflowjob: this.model}); + } + + /** + * Handle delete button. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_REMOVE_WORKFLOWJOB, {workflowjob: this.model, workflow: this._workflow}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + } +} +ViewControlWorkflowJob.prototype.template = _.template($('#template-main_workflowjob').text()); +ViewControlWorkflowJob.prototype.ui = { + buttonSave: '#button-save_workflowjob_data', + buttonDelete: '#button-delete_workflowjob', + textName: '#text-workflowjob_name' +}; +ViewControlWorkflowJob.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.buttonDelete': '_handleButtonDelete' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewSettings.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewSettings.js new file mode 100755 index 000000000..7916b07e1 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowJob/ViewSettings.js @@ -0,0 +1,97 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import 'json-editor'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * Settings view for WorkflowJob. + */ +export default class ViewSettings extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + } + + /** + * Initialize the settings after render. + */ + onRender() + { + this._initializeSettingsDisplay(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Save settings. + */ + _handleButtonSave() + { + var element = this._getJQueryElement(); + if ($(element).is(':visible')) + { + this.model.set('job_settings', this._editor.getValue()); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOB_SAVE, {workflowjob: this.model, workflow: this._workflow}); + } + } + + /** + * Initializes settings display. + */ + _initializeSettingsDisplay() + { + // Initially hide. + var element = this._getJQueryElement(); + $(element).hide(); + + // Create settings. + var startValues = this.model.get('job_settings'); + startValues = $.isEmptyObject(startValues) ? null : startValues; + $(element).show(); + var jobUuid = this.model.getJobUuid(); + var collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_JOB_COLLECTION); + var job = collection.get(jobUuid); + var settingsSchema = { + schema: job.get('settings'), + theme: 'bootstrap3', + disable_collapse: true, + disable_edit_json: true, + disable_properties: true, + no_additional_properties: true, + show_errors: 'always', + startval: startValues, + form_name_root: ' ' + }; + this._editor = new JSONEditor(element, settingsSchema); + } + + /** + * Get HTML element as jQuery object. + */ + _getJQueryElement() + { + return $(this.$el.find('#workflowjob-settings')[0])[0]; + } +} +ViewSettings.prototype.modelEvents = { + 'all': 'render' +}; +ViewSettings.prototype.ui = { + buttonSave: '#button-save_workflowjob_settings' + }; +ViewSettings.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave' + }; +ViewSettings.prototype.template = _.template($('#template-main_workflowjob_settings').text()); diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowJobGroup/ViewWorkflowJobGroup.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowJobGroup/ViewWorkflowJobGroup.js new file mode 100755 index 000000000..bacd7071d --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowJobGroup/ViewWorkflowJobGroup.js @@ -0,0 +1,71 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; + +/** + * WorkflowJobGroup view. + */ +export default class ViewWorkflowJobGroup extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.workflow' (Workflow) and 'options.workflowjobgroup' (WorkflowJobGroup) must also be provided + */ + initialize(options) + { + this._workflow = options.workflow; + /** @ignore */ + this.model = options.workflowjobgroup; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button delete. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_DELETE, {workflowjobgroup: this.model, workflow: this._workflow}); + } + + /** + * Handle button ungroup. + * + * @todo this shouldn't be calling the workflowbuilder + */ + _handleButtonUngroup() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_UNGROUP_WORKFLOWJOBGROUP, {workflowjobgroup: this.model, workflow: this._workflow}); + } + + /** + * Handle button save. + */ + _handleButtonSave() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_HIDE); + this.model.set({name: this.ui.textName.val()}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWJOBGROUP_SAVE, {workflowjobgroup: this.model}); + } +} +ViewWorkflowJobGroup.prototype.template = _.template($('#template-main_workflowjobgroup').text()); +ViewWorkflowJobGroup.prototype.ui = { + buttonSave: '#button-save_workflowjobgroup_data', + buttonDelete: '#button-delete_workflowjobgroup', + buttonUngroup: '#button-ungroup_workflowjobgroup', + textName: '#text-workflowjobgroup_name' +}; +ViewWorkflowJobGroup.prototype.events = { + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.buttonDelete': '_handleButtonDelete', + 'click @ui.buttonUngroup': '_handleButtonUngroup' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollection.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollection.js new file mode 100755 index 000000000..653442e0e --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollection.js @@ -0,0 +1,16 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BehaviorTable from 'js/Behaviors/BehaviorTable'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import ViewWorkflowRunCollectionItem from './ViewWorkflowRunCollectionItem'; + +/** + * WorkflowRun Collection view. + */ +export default class ViewWorkflowRunCollection extends BaseViewCollection {} +ViewWorkflowRunCollection.prototype.template = _.template($('#template-main_workflowrun_collection').text()); +ViewWorkflowRunCollection.prototype.childView = ViewWorkflowRunCollectionItem; +ViewWorkflowRunCollection.prototype.behaviors = [{behaviorClass: BehaviorTable, table: '#table-workflowruns'}]; +ViewWorkflowRunCollection.prototype.filterTitles = { + 'creator__username': 'Creator' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollectionItem.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollectionItem.js new file mode 100755 index 000000000..46b228ea9 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Collection/ViewWorkflowRunCollectionItem.js @@ -0,0 +1,27 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import BaseViewCollectionItem from 'js/Views/Master/Main/BaseViewCollectionItem'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; + +/** + * WorkflowRun Collection item view. + */ +export default class ViewWorkflowRunCollectionItem extends BaseViewCollectionItem +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handles double click. + */ + _handleDoubleClick() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED, {workflowrun: this.model}); + } +} +ViewWorkflowRunCollectionItem.prototype.template = _.template($('#template-main_workflowrun_collection_item').text()); +ViewWorkflowRunCollectionItem.prototype.tagName = 'tr'; +ViewWorkflowRunCollectionItem.prototype.events = { + 'dblclick': '_handleDoubleClick' +}; diff --git a/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Individual/LayoutViewIndividualWorkflowRun.js b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Individual/LayoutViewIndividualWorkflowRun.js new file mode 100755 index 000000000..62e7e40b3 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Main/WorkflowRun/Individual/LayoutViewIndividualWorkflowRun.js @@ -0,0 +1,137 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import LayoutViewModel from 'js/Views/Master/Main/LayoutViewModel'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewResourceCollection from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollection'; +import ViewResourceCollectionItem from 'js/Views/Master/Main/Resource/Collection/ViewResourceCollectionItem'; +import ViewRunJobCollection from 'js/Views/Master/Main/RunJob/Collection/ViewRunJobCollection'; +import ViewRunJobCollectionItem from 'js/Views/Master/Main/RunJob/Collection/ViewRunJobCollectionItem'; + +/** + * WorkflowRun view. + */ +export default class LayoutViewIndividualWorkflowRun extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the instance. + * + * @param {object} options Marionette.View options object; 'options.runjobs' (RunJobCollection) and 'options.resources' (ResourceCollection) must also be provided + */ + initialize(options) + { + this._runJobs = options.runjobs; + this._resources = options.resources; + this.addRegions({ + regionRunJobCollection: '#region-main_workflowrun_individual_runjobs', + regionResourceCollection: '#region-main_workflowrun_individual_resources' + }); + } + + /** + * Insert subviews after render. + */ + onRender() + { + // Empty regions. + this.getRegion('regionRunJobCollection').empty(); + this.getRegion('regionResourceCollection').empty(); + + if (this.getRegion('regionRunJobCollection').el === undefined || this.getRegion('regionResourceCollection').el === undefined) { + this.getRegion('regionRunJobCollection').el = '#region-main_workflowrun_individual_runjobs' + this.getRegion('regionResourceCollection').el = '#region-main_workflowrun_individual_resources' + } + + // Create Resource collection view. + this._layoutViewResources = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RESOURCE_SHOWLAYOUTVIEW, {layoutView: this._layoutViewResources}); + this.showChildView('regionResourceCollection', this._layoutViewResources); + this._viewResourceCollection = new ViewResourceCollection({collection: this._resources, + template: _.template($('#template-main_workflowrun_individual_resources_collection').text()), + childView: ViewResourceCollectionItem}); + this._layoutViewResources.showCollection(this._viewResourceCollection); + + // Create RunJob collection view. + this._layoutViewRunJobs = new LayoutViewModel(); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__RUNJOB_SHOWLAYOUTVIEW, {layoutView: this._layoutViewRunJobs}); + this.showChildView('regionRunJobCollection', this._layoutViewRunJobs); + this._viewRunJobCollection = new ViewRunJobCollection({collection: this._runJobs, + template: _.template($('#template-main_runjob_collection_notitle').text()), + childView: ViewRunJobCollectionItem}); + this._layoutViewRunJobs.showCollection(this._viewRunJobCollection); + + // Show Resources on default. + this._showResources(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle button show Resources. + */ + _showResources() + { + this.getRegion('regionRunJobCollection').$el.hide(); + this.ui.buttonShowResources.css('text-decoration', 'underline'); + this.ui.buttonShowRunJobs.css('text-decoration', 'none'); + if (!this.getRegion('regionResourceCollection').$el.is(':visible')) + { + this.getRegion('regionResourceCollection').$el.toggle('fast'); + } + } + + /** + * Handle button show RunJobs. + */ + _showRunJobs() + { + this.getRegion('regionResourceCollection').$el.hide(); + this.ui.buttonShowResources.css('text-decoration', 'none'); + this.ui.buttonShowRunJobs.css('text-decoration', 'underline'); + if (!this.getRegion('regionRunJobCollection').$el.is(':visible')) + { + this.getRegion('regionRunJobCollection').$el.toggle('fast'); + } + } + + /** + * Handle save button. + */ + _handleButtonSave() + { + this.model.set({name: _.escape(this.ui.textName.val()), description: _.escape(this.ui.textDescription.val())}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWRUN_SAVE, {workflowrun: this.model}); + } + + /** + * Handle button delete. + */ + _handleButtonDelete() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__WORKFLOWRUN_DELETE, {workflowrun: this.model}); + } +} +LayoutViewIndividualWorkflowRun.prototype.modelEvents = { + 'all': 'render' +}; +LayoutViewIndividualWorkflowRun.prototype.ui = { + buttonShowResources: '#button-resources_show', + buttonShowRunJobs: '#button-runjobs_show', + buttonSave: '#button-save_workflowrun', + buttonDelete: '#button-delete_workflowrun', + textName: '#text-workflowrun_name', + textDescription: '#text-workflowrun_description' +}; +LayoutViewIndividualWorkflowRun.prototype.events = { + 'click @ui.buttonShowResources': '_showResources', + 'click @ui.buttonShowRunJobs': '_showRunJobs', + 'click @ui.buttonSave': '_handleButtonSave', + 'click @ui.buttonDelete': '_handleButtonDelete' + +}; +LayoutViewIndividualWorkflowRun.prototype.template = _.template($('#template-main_workflowrun_individual').text()); diff --git a/rodan-client/code/src/js/Views/Master/Navigation/Events.js b/rodan-client/code/src/js/Views/Master/Navigation/Events.js new file mode 100755 index 000000000..c4afcfcbc --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/Events.js @@ -0,0 +1,9 @@ +/** + * Backbone.Radio events for navigation "module". + */ +var NAV_EVENTS = +{ + EVENT__NAVIGATION_SELECTED_NODE: 'EVENT__NAVIGATION_SELECTED_NODE' +}; + +export default NAV_EVENTS; \ No newline at end of file diff --git a/rodan-client/code/src/js/Views/Master/Navigation/LayoutViewNavigation.js b/rodan-client/code/src/js/Views/Master/Navigation/LayoutViewNavigation.js new file mode 100755 index 000000000..e2cb14aea --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/LayoutViewNavigation.js @@ -0,0 +1,262 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Backbone from 'backbone'; +import BaseViewCollection from 'js/Views/Master/Main/BaseViewCollection'; +import Configuration from 'js/Configuration'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import ViewNavigationNodeRoot from './ViewNavigationNodeRoot'; +import ViewResourceTypeDetailCollectionItem from 'js/Views/Master/Main/ResourceType/ViewResourceTypeDetailCollectionItem'; +import ViewUser from 'js/Views/Master/Main/User/Individual/ViewUser'; + +/** + * Layout view for main work area. This is responsible for loading views within the main region. + */ +export default class LayoutViewNavigation extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + this._initializeRadio(); + this.addRegions({ + regionNavigationTree: '#region-navigation_tree' + }); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize Radio. + */ + _initializeRadio() + { + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGIN_SUCCESS, options => this._handleAuthenticationSuccess(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__AUTHENTICATION_LOGOUT_SUCCESS, () => this._handleDeauthenticationSuccess()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SHOW_ABOUT, () => this._handleRequestShowAbout()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SHOW_HELP, () => this._handleRequestShowHelp()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SHOW_API, () => this._handleRequestShowAPI()); + Radio.channel('rodan').reply(RODAN_EVENTS.REQUEST__SHOW_NAVIGATION_PAGINATION, () => this._handleRequestShowPaginationButtons()); + Radio.channel('radio').reply(RODAN_EVENTS.REQUEST__UPDATE_NAVIGATION_PAGINATION, () => this._handleProjectPaginationAppearance()); + } + + /** + * Handle authentication. + */ + _handleAuthenticationSuccess() + { + var model = new Backbone.Model({name: 'Projects'}); + var object = {model: model, collection: Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECT_COLLECTION)}; + this.showChildView('regionNavigationTree', new ViewNavigationNodeRoot(object)); + this.$el.find('#button-navigation_logout').prop('disabled', false); + this.$el.find('#button-navigation_preferences').prop('disabled', false); + } + + /** + * Handle deauthentication. + */ + _handleDeauthenticationSuccess() + { + this.getRegion('regionNavigationTree').empty(); + this.$el.find('#button-navigation_logout').prop('disabled', true); + this.$el.find('#button-navigation_preferences').prop('disabled', true); + } + + /** + * Handle button logout. + */ + _handleButtonLogout() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_LOGOUT); + } + + /** + * Handle button about. + */ + _handleButtonAbout() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SHOW_ABOUT); + } + + /** + * Handle button help. + */ + _handleButtonHelp() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SHOW_HELP); + } + + /** + * Handle button preferences. + */ + _handleButtonPreferences() + { + var user = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__AUTHENTICATION_USER); + var view = new ViewUser({model: user}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: user.get('username'), content: view}); + } + + /** + * Handle button dev. + */ + _handleButtonDev() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SHOW_API); + } + + /** + * Handle request show about. + */ + _handleRequestShowAbout() + { + var serverConfig = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_CONFIGURATION); + var hostname = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_GET_HOSTNAME); + var version = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_GET_VERSION); + var serverDate = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__SERVER_DATE); + serverDate = serverDate ? serverDate.toString() : 'unknown'; + var html = _.template($('#template-misc_about').html())({hostname: hostname, + version: version, + serverConfiguration: serverConfig, + date: serverDate, + client: Configuration.CLIENT}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: 'About', content: html}); + } + + /** + * Handle request show help. + */ + _handleRequestShowHelp() + { + var html = _.template($('#template-misc_help').html())({email: Configuration.ADMIN_CLIENT.EMAIL, name: Configuration.ADMIN_CLIENT.NAME, url: Configuration.WEBSITE_URL}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: 'Help', content: html}); + } + + /** + * Handle request show API. + */ + _handleRequestShowAPI() + { + var collection = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_RESOURCETYPE_COLLECTION); + var view = new BaseViewCollection({collection: collection, + template: _.template($('#template-resourcetype_collection').text()), + childView: ViewResourceTypeDetailCollectionItem}); + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__MODAL_SHOW, {title: 'Development', content: view}); + } + + + +/////////////////////////////////////////////////////////////////////////////////////// +// PROJECT NAVIGATION +/////////////////////////////////////////////////////////////////////////////////////// + + /** + * Handle request to navigate to the first page of projects + */ + _handleRequestButtonFirst() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_FIRST); + } + + /** + * Handle request to navigate to the previous page of projects + */ + _handleRequestNavigationPaginationPrevious() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_PREVIOUS); + } + + /** + * Handle request to navigate to the next page of projects + */ + _handleRequestNavigationPaginationNext() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_NEXT); + } + + /** + * Handle request to navigate to the last page of projects + */ + _handleRequestNavigationPaginationLast() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.REQUEST__NAVIGATION_PAGINATION_LAST); + } + + /** + * Handles all Pagination appearance + */ + _handleProjectPaginationAppearance() + { + var attrs = Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__GLOBAL_PROJECT_COLLECTION)._pagination.attributes; + if (attrs.total > 1) + { + // Show and enable all paginations in nav + this._handleRequestShowPaginationButtons() + if (attrs.current === attrs.total) + { + // Handle request to disable upper-pagination buttons + this.$el.find('#button-navigation_next').prop('disabled', true); + this.$el.find('#button-navigation_last').prop('disabled', true); + } + else if (attrs.current === 1) + { + // Handle request to disable lower-pagination buttons + this.$el.find('#button-navigation_first').prop('disabled', true); + this.$el.find('#button-navigation_previous').prop('disabled', true); + } + } + else + { + // Hide all pagination controls in nav + this.$el.find('#button-navigation_first').hide(); + this.$el.find('#button-navigation_previous').hide(); + this.$el.find('#button-navigation_next').hide(); + this.$el.find('#button-navigation_last').hide(); + } + } + + /** + * Handle request to show pagination buttons when they are visible. + */ + _handleRequestShowPaginationButtons() + { + this.$el.find('#button-navigation_first').show(); + this.$el.find('#button-navigation_previous').show(); + this.$el.find('#button-navigation_next').show(); + this.$el.find('#button-navigation_last').show(); + + // Make sure they are clickable + this.$el.find('#button-navigation_first').prop('disabled', false); + this.$el.find('#button-navigation_previous').prop('disabled', false); + this.$el.find('#button-navigation_next').prop('disabled', false); + this.$el.find('#button-navigation_last').prop('disabled', false); + } +} +LayoutViewNavigation.prototype.template = _.template($('#template-navigation').text()); +LayoutViewNavigation.prototype.ui = { + buttonLogout: '#button-navigation_logout', + buttonAbout: '#button-navigation_about', + buttonHelp: '#button-navigation_help', + buttonPreferences: '#button-navigation_preferences', + buttonDev: '#button-navigation_dev', + buttonPaginateFirst: '#button-navigation_first', + buttonPaginatePrevious: '#button-navigation_previous', + buttonPaginateNext: '#button-navigation_next', + buttonPaginateLast: '#button-navigation_last' +}; +LayoutViewNavigation.prototype.events = { + 'click @ui.buttonLogout': '_handleButtonLogout', + 'click @ui.buttonAbout': '_handleButtonAbout', + 'click @ui.buttonHelp': '_handleButtonHelp', + 'click @ui.buttonPreferences': '_handleButtonPreferences', + 'click @ui.buttonDev': '_handleButtonDev', + 'click @ui.buttonPaginateFirst': '_handleRequestButtonFirst', + 'click @ui.buttonPaginatePrevious': '_handleRequestNavigationPaginationPrevious', + 'click @ui.buttonPaginateNext': '_handleRequestNavigationPaginationNext', + 'click @ui.buttonPaginateLast': '_handleRequestNavigationPaginationLast' +}; diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNode.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNode.js new file mode 100755 index 000000000..c6de0d4a9 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNode.js @@ -0,0 +1,134 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; + +/** + * This class represents a navigation menu node. + */ +export default class ViewNavigationNode extends Marionette.CollectionView +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + */ + initialize() + { + Radio.channel('rodan-navigation').on(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, event => this._handleEventNodeSelected(event)); + } + + /** + * Hide subviews on render (initially). + */ + onRender() + { + this._hideSubviews(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Sets highlight of this menu entry. + */ + _setHighlight(highlight) + { + var node = $(this.$el.find('.node_text')[0]); + if (highlight) + { + // TODO magic number + node.css('background-color', '#444444'); + } + else + { + node.css('background-color', ''); + } + } + + /** + * Handle click. + */ + _handleClick(event) + { + this._toggleSubviews(); + event.stopPropagation(); + this._sendClickEvents(); + } + + /** + * Toggle subview show. + */ + _toggleSubviews() + { + var firstUl = $(this.$el.find(this.childViewContainer)[0]); + if (firstUl !== undefined && firstUl.find('div').length > 0) + { + firstUl.toggle('fast'); + } + } + + /** + * Hide subvies. + */ + _hideSubviews() + { + var firstUl = $(this.$el.find(this.childViewContainer)[0]); + if (firstUl !== undefined) + { + firstUl.hide(); + } + } + + /** + * Show subviews. + */ + _showSubviews() + { + // Show subviews. + var firstUl = $(this.$el.find(this.childViewContainer)[0]); + if (firstUl !== undefined) + { + firstUl.show(); + } + } + + /** + * Expand parent. + */ + _expandParent() + { + // Show parents. + if (this._parent !== null && this._parent !== undefined && this._parent instanceof ViewNavigationNode) + { + this._parent._showSubviews(); + this._parent._expandParent(); + } + } + + /** + * Does highlighting. + */ + _handleEventNodeSelected(event) + { + if (this === event.node) + { + this._setHighlight(true); + this._expandParent(); + } + else + { + this._setHighlight(false); + } + } +} +ViewNavigationNode.prototype.ui = { + text: '.node_text' +}; +ViewNavigationNode.prototype.events = { + 'click @ui.text': '_handleClick' +}; +ViewNavigationNode.prototype.template = _.template($('#template-navigation_node').text()); +ViewNavigationNode.prototype.childViewContainer = 'ul'; diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeProject.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeProject.js new file mode 100755 index 000000000..8893bb549 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeProject.js @@ -0,0 +1,107 @@ +import Backbone from 'backbone'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import Project from 'js/Models/Project'; +import ViewNavigationNodeRunJobs from './ViewNavigationNodeRunJobs'; +import ViewNavigationNodeResourceLists from './ViewNavigationNodeResourceLists'; +import ViewNavigationNodeResources from './ViewNavigationNodeResources'; +import ViewNavigationNodeWorkflowRuns from './ViewNavigationNodeWorkflowRuns'; +import ViewNavigationNodeWorkflows from './ViewNavigationNodeWorkflows'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for a project. + */ +export default class ViewNavigationNodeProject extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + /** @ignore */ + this.collection = new Backbone.Collection(); + var resourcesNodeModel = new Backbone.Model({name: 'Resources', project: this.model}); + var resourceListsNodeModel = new Backbone.Model({name: 'Resource Lists', project: this.model}); + var workflowBuilderNodeModel = new Backbone.Model({name: 'Workflows', project: this.model}); + var workflowRunsNodeModel = new Backbone.Model({name: 'Workflow Runs', project: this.model}); + var runJobsNodeModel = new Backbone.Model({name: 'Run Jobs', project: this.model}); + this.collection.add(resourcesNodeModel); + // this.collection.add(resourceListsNodeModel); + this.collection.add(workflowBuilderNodeModel); + this.collection.add(workflowRunsNodeModel); + this.collection.add(runJobsNodeModel); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__PROJECT_SELECTED, event => this._handleEventProjectSelected(event)); + } + + /** + * Determine child view based on name. + * + * @param {BaseModel} model instance of 'Resource', 'Workflow', 'WorkflowRun', or 'RunJob' + * @return {ViewNavigationNode} a subclass of ViewNavigationNode; only returns class, not instance; will return ViewNavigationNode if the BaseModel provided is not one of the above + */ + childView(model) + { + switch (model.get('name')) + { + case 'Resources': + { + return ViewNavigationNodeResources; + } + + case 'Resource Lists': + { + return ViewNavigationNodeResourceLists; + } + + case 'Workflows': + { + return ViewNavigationNodeWorkflows; + } + + case 'Workflow Runs': + { + return ViewNavigationNodeWorkflowRuns; + } + + case 'Run Jobs': + { + return ViewNavigationNodeRunJobs; + } + + default: + { + return ViewNavigationNode; + } + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SELECTED, {project: this.model}); + } + + /** + * Handle highlighting. + */ + _handleEventProjectSelected(event) + { + if (event.project === this.model) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResourceLists.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResourceLists.js new file mode 100755 index 000000000..ae48289ea --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResourceLists.js @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for a ResourceList. + */ +export default class ViewNavigationNodeResourceLists extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED_COLLECTION, options => this._handleEventResourceListsSelected(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, {project: this.model.get('project')}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCELIST_SELECTED_COLLECTION, {project: this.model.get('project')}); + } + + /** + * Handle highlighting. + */ + _handleEventResourceListsSelected(options) + { + if (options.project === this.model.get('project')) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} +ViewNavigationNodeResourceLists.prototype.template = _.template($('#template-navigation_resourcelists').text()); diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResources.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResources.js new file mode 100755 index 000000000..1a12b254a --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeResources.js @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for a project. + */ +export default class ViewNavigationNodeResources extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RESOURCE_SELECTED_COLLECTION, options => this._handleEventResourcesSelected(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, {project: this.model.get('project')}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RESOURCE_SELECTED_COLLECTION, {project: this.model.get('project')}); + } + + /** + * Handle highlighting. + */ + _handleEventResourcesSelected(options) + { + if (options.project === this.model.get('project')) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} +ViewNavigationNodeResources.prototype.template = _.template($('#template-navigation_resources').text()); diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRoot.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRoot.js new file mode 100755 index 000000000..50999da95 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRoot.js @@ -0,0 +1,42 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; +import ViewNavigationNodeProject from './ViewNavigationNodeProject'; + +/** + * This class represents a navigation menu node. + */ +export default class ViewNavigationNodeRoot extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * This hides all subviews on render (initially). + */ + onRender() + { + this._showSubviews(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__PROJECT_SELECTED_COLLECTION); + } +} +ViewNavigationNodeRoot.prototype.ui = { + text: '.node_text' +}; +ViewNavigationNodeRoot.prototype.events = { + 'click @ui.text': '_handleClick' +}; +ViewNavigationNodeRoot.prototype.template = _.template($('#template-navigation_root').text()); +ViewNavigationNodeRoot.prototype.childView = ViewNavigationNodeProject; diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRunJobs.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRunJobs.js new file mode 100755 index 000000000..26ad51a28 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeRunJobs.js @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for RunJobs. + */ +export default class ViewNavigationNodeRunJobs extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__RUNJOB_SELECTED_COLLECTION, options => this._handleEventCollectionSelected(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, {project: this.model.get('project')}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__RUNJOB_SELECTED_COLLECTION, {project: this.model.get('project')}); + } + + /** + * Handle highlighting. + */ + _handleEventCollectionSelected(options) + { + if (options.project === this.model.get('project')) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} +ViewNavigationNodeRunJobs.prototype.template = _.template($('#template-navigation_runjobs').text()); diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflowRuns.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflowRuns.js new file mode 100755 index 000000000..9e2a4b48c --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflowRuns.js @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for a WorkflowRun Collection. + */ +export default class ViewNavigationNodeWorkflowRuns extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED_COLLECTION, event => this._handleEventWorkflowRunsSelected(event)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, {project: this.model.get('project')}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOWRUN_SELECTED_COLLECTION, {project: this.model.get('project')}); + } + + /** + * Handle highlighting. + */ + _handleEventWorkflowRunsSelected(event) + { + if (event.project === this.model.get('project')) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} +ViewNavigationNodeWorkflowRuns.prototype.template = _.template($('#template-navigation_workflowruns').text()); diff --git a/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflows.js b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflows.js new file mode 100755 index 000000000..817d37f93 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Navigation/ViewNavigationNodeWorkflows.js @@ -0,0 +1,50 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import NAV_EVENTS from './Events'; +import Radio from 'backbone.radio'; +import ViewNavigationNode from './ViewNavigationNode'; + +/** + * This class represents a navigation menu node for a Workflow Collection. + */ +export default class ViewNavigationNodeWorkflows extends ViewNavigationNode +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initialize. + * + * @param {object} options Marionette.View options object + */ + initialize(options) + { + super.initialize(options); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED_COLLECTION, options => this._handleEventWorkflowsSelected(options)); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Send click events. + */ + _sendClickEvents() + { + Radio.channel('rodan').request(RODAN_EVENTS.REQUEST__PROJECT_SET_ACTIVE, {project: this.model.get('project')}); + Radio.channel('rodan').trigger(RODAN_EVENTS.EVENT__WORKFLOW_SELECTED_COLLECTION, {project: this.model.get('project')}); + } + + /** + * Handle highlighting. + */ + _handleEventWorkflowsSelected(options) + { + if (options.project === this.model.get('project')) + { + Radio.channel('rodan-navigation').trigger(NAV_EVENTS.EVENT__NAVIGATION_SELECTED_NODE, {node: this}); + } + } +} +ViewNavigationNodeWorkflows.prototype.template = _.template($('#template-navigation_workflows').text()); diff --git a/rodan-client/code/src/js/Views/Master/Status/LayoutViewStatus.js b/rodan-client/code/src/js/Views/Master/Status/LayoutViewStatus.js new file mode 100755 index 000000000..d53e6ddb6 --- /dev/null +++ b/rodan-client/code/src/js/Views/Master/Status/LayoutViewStatus.js @@ -0,0 +1,91 @@ +import $ from 'jquery'; +import _ from 'underscore'; +import Marionette from 'backbone.marionette'; +import Radio from 'backbone.radio'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; + +/** + * Status view. + */ +export default class LayoutViewStatus extends Marionette.View +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Initializes the view. + */ + initialize() + { + /** @ignore */ + this._pending = 0; + /** @ignore */ + this._completed = 0; + + this._updateStatusBar(); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__SERVER_REQUESTS_PENDING_UPDATE, (options) => this._handleEventPendingRequests(options)); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__SERVER_IDLE, () => this._handleEventServerNotice('progress-bar')); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__SERVER_WAIT, () => this._handleEventServerNotice('progress-bar-warning')); + Radio.channel('rodan').on(RODAN_EVENTS.EVENT__SERVER_PANIC, () => this._handleEventServerNotice('progress-bar-danger')); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle pending requests event. + */ + _handleEventPendingRequests(options) + { + if (options.pending > this._pending) + { + this._pending = options.pending; + } + else if (options.pending > 0) + { + if (this._pending - options.pending > this._completed) + { + this._completed = this._pending - options.pending; + } + else + { + this._pending = options.pending + this._completed; + } + } + else + { + this._pending = 0; + this._completed = 0; + } + this._updateStatusBar(); + } + + /** + * Handle event server notice. + */ + _handleEventServerNotice(cssClass) + { + $(this.el).find('div#statusbar').removeClass(); + $(this.el).find('div#statusbar').addClass(cssClass); + } + + /** + * Sets status bar. + */ + _updateStatusBar() + { + var text = '' + this._completed + ' of ' + this._pending + ' requests pending...'; + var percent = 100; + if (this._completed === this._pending) + { + var text = 'No pending requests'; + } + else + { + percent = Math.floor(this._completed * 100 / this._pending); + } + $(this.el).find('div#statusbar').width(percent + '%'); + $(this.el).find('#status-pending_responses').text(text); + } +} +LayoutViewStatus.prototype.template = _.template($('#template-status').text()); diff --git a/rodan-client/code/src/js/WorkflowBuilderGUI.js b/rodan-client/code/src/js/WorkflowBuilderGUI.js new file mode 100755 index 000000000..82ba634fe --- /dev/null +++ b/rodan-client/code/src/js/WorkflowBuilderGUI.js @@ -0,0 +1,519 @@ +import $ from 'jquery'; +import { drawGrid } from './Utilities/PaperUtilities'; +import BaseItem from './Items/BaseItem'; +import GUI_EVENTS from './Shared/Events'; +import InputPortItem from './Items/InputPortItem'; +import ItemController from './Controllers/ItemController'; +import LayoutViewWorkflowBuilder from './Views/LayoutViewWorkflowBuilder'; +import paper from 'paper'; +import Radio from 'backbone.radio'; +import Rodan from 'rodan'; + +/** + * Main WorkflowBuilderGUI class. + */ +class WorkflowBuilderGUI +{ +/////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Constructor. + */ + constructor(options) + { + this._oldMouseEvent = window.MouseEvent; // FIX: paper.js stupidly redefines + this._workflow = null; + Radio.channel('rodan').on(Rodan.RODAN_EVENTS.EVENT__WORKFLOWBUILDER_SELECTED, (options) => this.initialize(options)); + } + + /** + * Initialize the workspace. + * The element associated with the canvas ID MUST be available at this time. + */ + initialize(options) + { + this._initializeConfiguration(); + this._workflow = options.workflow; + this._initializeView(); + this._initializeStateMachine(); + this._initializePaper('canvas-workspace'); + this._initializeRadio(); + this._initializeInterface(); + this._initializeGlobalTool(); + this._initializeGui(); + + // We have to clear the updater. + Radio.channel('rodan').request(Rodan.RODAN_EVENTS.REQUEST__UPDATER_CLEAR); + } + + /** + * Return workflow. + */ + getWorkflow() + { + return this._workflow; + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Initializers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Checks configuration loaded. + */ + _initializeConfiguration() + { + var configuration = + { + "USER_AGENT": "rodan-standard", + "GRID": + { + "DIMENSION": 20, + "LINE_COLOR": "#606060", + "LINE_WIDTH": 0.5 + }, + "ZOOM_MAX": 3.0, + "ZOOM_MIN": 1.0, + "ZOOM_RATE": 0.05, + "ZOOM_INITIAL": 1.7, + "WORKFLOWJOB_WIDTH": 20, + "WORKFLOWJOB_HEIGHT": 22, + "PORT_WIDTH": 8, + "PORT_HEIGHT": 8, + "OUTPUTPORT_COLOR": "#00ff00", + "INPUTPORT_COLOR_SATISFIED": "#00ff00", + "INPUTPORT_COLOR_UNSATISFIED": "#ff0000", + "INPUTPORT_COLOR_CANDIDATE": "#00ff00", + "STROKE_COLOR": "#000000", + "FILL_COLOR": "#ccccff", + "WORKFLOWJOBGROUP_FILL_COLOR": "#8888ff", + "STROKE_WIDTH": 1, + "FONT_SIZE": 10, + "STROKE_COLOR_SELECTED": "#0000ff", + "STROKE_WIDTH_SELECTED": 2, + "CONNECTION_CIRCLE_RADIUS": 4, + "HOVER_TIME": 1000 + } + + // Check if our entry exists. + if (!Rodan.Configuration.PLUGINS['rodan-client-wfbgui']) + { + Rodan.Configuration.PLUGINS['rodan-client-wfbgui'] = {}; + } + + // Now fill in the gaps. + var currentConfiguration = Rodan.Configuration.PLUGINS['rodan-client-wfbgui']; + $.extend(configuration, currentConfiguration); + Rodan.Configuration.PLUGINS['rodan-client-wfbgui'] = configuration; + } + + /** + * Initialize view. + */ + _initializeView() + { + var view = new LayoutViewWorkflowBuilder({model: this.getWorkflow()}); + Radio.channel('rodan').request(Rodan.RODAN_EVENTS.REQUEST__MAINREGION_SHOW_VIEW, {view: view}); + this._menuItems = [{label: 'Edit Name/Description', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOW_VIEW, options: {workflow: this.getWorkflow()}}, + {label: 'Add Job', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_JOBCOLLECTION_VIEW, options: {workflow: this.getWorkflow()}}, + {label: 'Import Workflow', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_SHOW_WORKFLOWCOLLECTION_VIEW, options: {workflow: this.getWorkflow()}}, + {label: 'Run', radiorequest: Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_CREATE_WORKFLOWRUN, options: {workflow: this.getWorkflow()}}]; + } + + /** + * Initialize GUI. + */ + _initializeGui() + { + BaseItem.clearMap(); + this._multipleSelectionKey = Rodan.Environment.getMultipleSelectionKey(); + this._line = null; + this._zoomRate = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_RATE; + this._itemController = new ItemController(); + paper.handleMouseEvent = event => this._itemController.handleMouseEvent(event); + } + + /** + * Initialize radio. + */ + _initializeRadio() + { + this.rodanChannel = Radio.channel('rodan'); + this.rodanChannel.on(Rodan.RODAN_EVENTS.EVENT__MODEL_SYNC, options => this._handleEventModelSync(options)); + + this.guiChannel = Radio.channel('rodan-client_gui'); + this.guiChannel.on(GUI_EVENTS.EVENT__WORKFLOWBUILDER_GUI_DESTROY, () => this._handleGuiDestroy()); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_GET_WORKFLOW, () => this.getWorkflow()); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_IN, () => this._handleRequestZoomIn()); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_OUT, () => this._handleRequestZoomOut()); + this.guiChannel.reply(GUI_EVENTS.REQUEST__WORKFLOWBUILDER_GUI_ZOOM_RESET, () => this._handleRequestZoomReset()); + } + + /** + * Initialize state machine. + */ + _initializeStateMachine() + { + this._STATES = { + IDLE: 0, + MOUSE_DOWN: 1, + MOUSE_UP: 2, + DRAWING_LINE: 3 + }; + this._firstEntry = false; + this._setState(this._STATES.IDLE); + } + + /** + * Initialize global tool. + */ + _initializeGlobalTool() + { + this._lastToolEvent = null; + paper.tool = new Tool(); + paper.tool.onMouseMove = event => this._handleEvent(event); + paper.tool.onMouseUp = event => this._handleEvent(event); + paper.tool.onMouseDown = event => this._handleEvent(event); + paper.tool.onKeyDown = event => this._handleEventKeyDown(event); + paper.tool.onKeyUp = event => this._handleEventKeyUp(event); + } + + /** + * Initialize global interface for GUI. + */ + _initializeInterface() + { + var canvas = paper.view.element; + canvas.oncontextmenu = function() {return false;}; + } + + /** + * Initialize paper. + */ + _initializePaper(canvasElementId) + { + paper.install(window); + paper.setup(canvasElementId); + paper.view.onFrame = (event) => this._handleFrame(event); + this.drawGrid = drawGrid; + this.drawGrid(Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].GRID, paper); + this._handleRequestZoomReset(); + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Events and state machine +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle state. This is frame driven. + */ + _handleFrame(event) + { + BaseItem.updateItems(); + } + + /** + * Sets state. + */ + _setState(state) + { + this._state = state; + this._firstEntry = true; + } + + /** + * Handle ToolEvent. + */ + _handleEvent(toolEvent) + { + switch (this._state) + { + case this._STATES.IDLE: + { + this._handleStateIdle(toolEvent); + break; + } + + case this._STATES.MOUSE_DOWN: + { + this._handleStateMouseDown(toolEvent); + break; + } + + case this._STATES.MOUSE_UP: + { + this._handleStateMouseUp(toolEvent); + break; + } + + case this._STATES.DRAWING_LINE: + { + this._handleStateDrawingLine(toolEvent); + break; + } + + default: + { + console.log('unknown state'); + break; + } + } + this._lastToolEvent = toolEvent; + } + + /** + * Handle state idle. + */ + _handleStateIdle(event) + { + if (this._firstEntry) + { + this._firstEntry = false; + } + + if (event.type === 'mousedown') + { + this._setState(this._STATES.MOUSE_DOWN); + } + } + + /** + * Handle state mouse down. + */ + _handleStateMouseDown(event) + { + if (this._firstEntry) + { + this._firstEntry = false; + if (!this._itemController.getMouseOverItem()) + { + this._itemController.clearSelected(); + + // If right-click, open context menu. + if (event.event.button === 2) + { + Radio.channel('rodan').request(Rodan.RODAN_EVENTS.REQUEST__CONTEXTMENU_SHOW, + {items: this._menuItems, top: event.event.pageY, left: event.event.pageX}); + } + } + } + + if (event.type === 'mousemove') + { + if (this._itemController.getOutputPortItemForConnection() !== null) + { + this._setState(this._STATES.DRAWING_LINE); + } + else if (this._itemController.getSelectedCount() > 0) + { + this._itemController.moveSelectedItems(event.delta); + } + else + { + var deltaX = (event.event.screenX - this._lastToolEvent.event.screenX) / paper.view.zoom; + var deltaY = (event.event.screenY - this._lastToolEvent.event.screenY) / paper.view.zoom; + var delta = new Point(deltaX, deltaY); + // paper.view.translate(delta); + this._limitViewInThresholds(); // make sure we stay in bounds! + } + } + else if (event.type === 'mouseup') + { + this._setState(this._STATES.MOUSE_UP); + this._itemController.saveSelectedItemPositions(); + } + } + + /** + * Handle state mouse up. + */ + _handleStateMouseUp(event) + { + if (this._firstEntry) + { + this._firstEntry = false; + this._itemController.saveSelectedItemPositions(); + } + this._setState(this._STATES.IDLE); + } + + /** + * Handle state drawing line. + */ + _handleStateDrawingLine(event) + { + if (this._firstEntry) + { + this._firstEntry = false; + + // Create line. + if (this._line === null) + { + var item = this._itemController.getOutputPortItemForConnection(); + var startPoint = new Point(item.position.x, item.bounds.bottom); + this._line = this._itemController.createLineItem(startPoint); + } + + // Get satisfiable InputPorts. + var outputPortItem = this._itemController.getOutputPortItemForConnection(); + var candidateInputPortUrls = Radio.channel('rodan').request(Rodan.RODAN_EVENTS.REQUEST__WORKFLOWBUILDER_GET_SATISFYING_INPUTPORTS, + {workflow: this._workflow, outputport: outputPortItem.getModel()}); + this._itemController.setInputPortCandidates(candidateInputPortUrls); + } + + if (event.type === 'mousemove') + { + // Update end point to one pixel ABOVE the mouse pointer. This ensures that the next click event does NOT register + // the line as the target. + var adjustedPoint = new Point(event.point.x, event.point.y - 1); + this._line.setEndPoint(adjustedPoint); + } + else if (event.type === 'mouseup') + { + var overItem = this._itemController.getMouseOverItem(); + if (overItem instanceof InputPortItem && !overItem.isSatisfied() && this._itemController.isInputPortCandidate(overItem)) + { + var outputPortItem = this._itemController.getOutputPortItemForConnection(); + this._itemController.createConnection(outputPortItem, overItem, this.getWorkflow()); + } + + // Reset. + this._state = this._STATES.IDLE; + if (this._line) + { + this._line.remove(); + this._line.destroy(); + this._line = null; + } + this._itemController.clearSelected(); + this._itemController.clearInputPortCandidates(); + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Input event handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle event key down. + */ + _handleEventKeyDown(event) + { + if (event.event[this._multipleSelectionKey]) + { + this._itemController.setSelectingMultiple(true); + } + } + + /** + * Handle event key up. + */ + _handleEventKeyUp(event) + { + if (!event.event[this._multipleSelectionKey]) + { + this._itemController.setSelectingMultiple(false); + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS - Radio handlers +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Handle GUI destroy. + */ + _handleGuiDestroy() + { + BaseItem.clearMap(); + window.MouseEvent = this._oldMouseEvent; + } + + /** + * Handle event model sync. + * + * This guarantees that the WorkflowBuilder always has the latest version of the Workflow. + */ + _handleEventModelSync(options) + { + if (options.model && options.model.constructor.name === 'Workflow') + { + this._workflow = options.model; + } + } + + /** + * Handle zoom in. + */ + _handleRequestZoomIn() + { + var zoom = paper.view.zoom + Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_RATE; + paper.view.zoom = zoom < Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_MAX ? zoom : Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_MAX; + } + + /** + * Handle zoom out. + */ + _handleRequestZoomOut() + { + var zoom = paper.view.zoom - Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_RATE; + paper.view.zoom = zoom > Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_MIN ? zoom : Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_MIN; + this._limitViewInThresholds(); // make sure we stay in bounds! + } + + /** + * Handle zoom reset. + */ + _handleRequestZoomReset() + { + paper.view.zoom = Rodan.Configuration.PLUGINS['rodan-client-wfbgui'].ZOOM_INITIAL; + this._limitViewInThresholds(); // make sure we stay in bounds! + } + +/////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE METHODS +/////////////////////////////////////////////////////////////////////////////////////// + /** + * Returns thresholds for given view zoom (xLeft, xRight, yTop, yBottom). + */ + _getThresholds() + { + var halfWidth = paper.view.size.width / 2; + var halfHeight = paper.view.size.height / 2; + return {xLeft: halfWidth, + xRight: halfWidth + paper.view.viewSize.width - paper.view.size.width, + yTop: halfHeight, + yBottom: halfHeight + paper.view.viewSize.height - paper.view.size.height}; + } + + /** + * Limits view to the thresholds. + */ + _limitViewInThresholds() + { + var thresholds = this._getThresholds(); + var newPoint = new Point(paper.view.center.x, paper.view.center.y); + + // x + if (paper.view.center.x < thresholds.xLeft) + { + newPoint.x = thresholds.xLeft; + } + else if (paper.view.center.x > thresholds.xRight) + { + newPoint.x = thresholds.xRight; + } + + // y + if (paper.view.center.y < thresholds.yTop) + { + newPoint.y = thresholds.yTop; + } + else if (paper.view.center.y > thresholds.yBottom) + { + newPoint.y = thresholds.yBottom; + } + // paper.view.setCenter(newPoint); + } +} + +var workspace = new WorkflowBuilderGUI(); + +export {workspace as default}; diff --git a/rodan-client/code/src/js/main.js b/rodan-client/code/src/js/main.js new file mode 100755 index 000000000..4540e1b5a --- /dev/null +++ b/rodan-client/code/src/js/main.js @@ -0,0 +1,6 @@ +/** + * Entry point of production application. + */ +import Application from './Application'; +var app = new Application(); +app.start(); diff --git a/rodan-client/code/src/rodan.js b/rodan-client/code/src/rodan.js new file mode 100644 index 000000000..96cbc9460 --- /dev/null +++ b/rodan-client/code/src/rodan.js @@ -0,0 +1,16 @@ +import BaseModel from 'js/Models/BaseModel'; +import Configuration from 'js/Configuration'; +import Environment from 'js/Shared/Environment'; +import RODAN_EVENTS from 'js/Shared/RODAN_EVENTS'; +import WorkflowBuilderGUI from 'js/WorkflowBuilderGUI'; + +const Rodan = +{ + BaseModel: BaseModel, + Configuration: Configuration, + Environment: Environment, + RODAN_EVENTS: RODAN_EVENTS, + WorkflowBuilderGUI: WorkflowBuilderGUI +}; + +export default Rodan; diff --git a/rodan-client/code/styles/default.scss b/rodan-client/code/styles/default.scss new file mode 100755 index 000000000..9ed77268e --- /dev/null +++ b/rodan-client/code/styles/default.scss @@ -0,0 +1,282 @@ +/** + * Styles for Rodan client. + */ + +/************************************************************************************** + * General parameters + *************************************************************************************/ +/* Navigation area */ +$background-color-navigation: #000000; +$text-color-navigation: #cccccc; + +/* Status area */ +$background-color-status: #000000; +$text-color-status-user: #cccccc; +$text-color-status-user: #cccccc; +$text-color-status-server: #cccccc; + +/* Main area */ +$background-color-main: #ffffff; + +/* WorkflowBuilder area */ +$background-color-workflowbuilder-workspace: #dddddd; +$background-color-workflowbuilder-menu: #000000; +$text-color-workflowbuilder-menu: #ffffff; + +/* WorkflowBuilder control area */ +$background-color-workflowbuilder-control: #ffffff; + +/************************************************************************************** + * DO NOT TOUCH unless you know what you're doing. + *************************************************************************************/ +$height-top: 100; // % of vertical space in viewport +$height-gui: 100; // % of vertical space in GUI viewport +$height-gui_menu: 4; // % of vertical space in GUI viewport for menu +$size-font: 11px; // pixels + +/////////////////////////////////////////////////////////////////////////////////////// +// General classes +/////////////////////////////////////////////////////////////////////////////////////// +.text-small +{ + font-size: x-small; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Navigation region +/////////////////////////////////////////////////////////////////////////////////////// +div#region-navigation +{ + background: $background-color-navigation; + height: 100%; + color: $text-color-navigation; + overflow-y: auto; + overflow-x: hidden; + cursor: default; +} + +div#region-navigation ul +{ + list-style-type: disc; + margin: 0; + padding-left: 10px; +} + +div#region-navigation div.node_text +{ + cursor: pointer; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Main region +/////////////////////////////////////////////////////////////////////////////////////// +div#region-main +{ +// background-image: url("resources/rodan.jpg"); + background-repeat: no-repeat; + background-position: center center; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + cursor: default; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Canvas +/////////////////////////////////////////////////////////////////////////////////////// +div#canvas-wrap +{ + height: 100%; + overflow-y: hidden; + padding: 0px; +} + +div#canvas-tooltip +{ + position: fixed; + background-color: #ffff88; + margin-left: 3px; + padding: 2px; + height: auto; + border-style: solid; + border-width: 2px; + width: auto; + visiblity: visible; + display: inline-block; +} + +canvas#canvas-workspace +{ + background-color: $background-color-workflowbuilder-workspace; + height: 100%; + width: 100%; + padding: 0px; +} + + +/////////////////////////////////////////////////////////////////////////////////////// +// Input fields +/////////////////////////////////////////////////////////////////////////////////////// +textarea[type=text] +{ + height: 200px; + width: 100%; + resize: vertical; +} + +.vertical-center { + height: $height-top * 1%; //fallback + height: $height-top * 1vh; + display: flex; + align-items: center; +} + +.horizontal-center +{ + width: 100%; + text-align: center; +} + +body +{ + overflow: hidden; + font-family: Arial, Helvetica, sans-serif; + font-size: $size-font; +} + +div.fixed_individual { + //position: fixed; + width: 100%; +} + +div.top { + height: $height-top * 1%; //fallback + height: $height-top * 1vh; +} + +div.gui { + height: $height-gui * 1%; //fallback + height: $height-gui * 1vh; +} + +div#main_workflowbuilder +{ + background-color: white; + height: 100%; + overflow: auto; +} + +.instruction +{ + font-style: italic; +} + +:disabled +{ + background: #dddddd; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Modals +/////////////////////////////////////////////////////////////////////////////////////// +.modal-body +{ + max-height: 600px; + overflow-y: auto; +} + +.modal-content +{ + opacity: 0.88 !important; +} + +.modal-backdrop +{ + opacity: 0.3 !important; +} + +.modal-footer +{ + text-align: left !important; +} + +.modal-footer-error +{ + color: #aa0000; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Table overrides +/////////////////////////////////////////////////////////////////////////////////////// +/** + * Make text in table unselectable. This helps make multiple selection look better. + */ +table +{ + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; + width: 100%; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Table controls +/////////////////////////////////////////////////////////////////////////////////////// +.table-hover tbody tr:hover td, .table-hover tbody tr:hover th +{ + background-color: #93DB70; +} + +div.table-control +{ + width: 100%; + padding-left: 10px; + padding-right: 10px; +} + +div.table-control span +{ + display:inline-block; + font-size: $size-font; + font-weight: bold; +} + +div.table-control span +{ + display:inline-block; + width: 50%; +} + +div.table-control span.align-right +{ + text-align: right; +} + +div.table-control p +{ + font-size:0; /* Fixes inline block spacing */ +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Sortable tables +/////////////////////////////////////////////////////////////////////////////////////// +th.sort-ascending .glyphicon .glyphicon-arrow-up +{ + font-family: Arial, Helvetica, sans-serif; +} + +/////////////////////////////////////////////////////////////////////////////////////// +// Scrollable tables +/////////////////////////////////////////////////////////////////////////////////////// +table.scroll +{ + display: block; + height: 400px; + width: 100%; + overflow-y: auto; + overflow-x: hidden; +} + +.tags-input{display:inline-block;padding:0 2px;background:#FFF;border:1px solid #CCC;width:16em;border-radius:2px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.tags-input .tag{display:inline-block;background:#EEE;color:#444;padding:0 4px;margin:2px;border:1px solid #CCC;border-radius:2px;font:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;transition:all .1s ease}.tags-input .tag.selected{background-color:#777;border-color:#777;color:#EEE}.tags-input .tag.dupe{-webkit-transform:scale3d(1.2,1.2,1.2);transform:scale3d(1.2,1.2,1.2);background-color:#FCC;border-color:#700}.tags-input input{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;display:inline-block!important;padding:3px;margin:0!important;background:0 0!important;border:none!important;box-shadow:none!important;font:inherit!important;font-size:100%!important;outline:0!important}.tags-input .selected~input{opacity:.3} diff --git a/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection.html b/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection.html new file mode 100755 index 000000000..3240cff77 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection.html @@ -0,0 +1,12 @@ +

    Input Ports

    +
    + + + + + + + + +
    Label
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection_item.html b/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection_item.html new file mode 100755 index 000000000..ea4b38f1f --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/InputPort/Collection/template-main_inputport_collection_item.html @@ -0,0 +1,2 @@ +<%= label %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection.html b/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection.html new file mode 100755 index 000000000..82358e747 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection.html @@ -0,0 +1,14 @@ +

    Input Port Types

    +
    + + + + + + + + + + +
    NameMinMax
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection_item.html b/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection_item.html new file mode 100755 index 000000000..ece49558a --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/InputPortType/Collection/template-main_inputporttype_collection_item.html @@ -0,0 +1,4 @@ +<%= name %> +<%= minimum %> +<%= maximum %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection.html b/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection.html new file mode 100755 index 000000000..7a453f560 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection.html @@ -0,0 +1,13 @@ +
    + + + + + + + + + + +
    CategoryNameInteractive
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection_item.html new file mode 100755 index 000000000..068f8829d --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Job/Collection/template-main_job_collection_item.html @@ -0,0 +1,4 @@ +<%= category %> +<%= name %> +<%= interactive %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Login/template-main_login.html b/rodan-client/code/templates/Views/Master/Main/Login/template-main_login.html new file mode 100755 index 000000000..3b93d0a90 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Login/template-main_login.html @@ -0,0 +1,19 @@ +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    + +
    +
    +
    +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection.html b/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection.html new file mode 100755 index 000000000..80be629cf --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection.html @@ -0,0 +1,12 @@ +

    Output Ports

    +
    + + + + + + + + +
    Label
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection_item.html b/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection_item.html new file mode 100755 index 000000000..ea4b38f1f --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/OutputPort/Collection/template-main_outputport_collection_item.html @@ -0,0 +1,2 @@ +<%= label %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection.html b/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection.html new file mode 100755 index 000000000..a28a295da --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection.html @@ -0,0 +1,14 @@ +

    Output Port Types

    +
    + + + + + + + + + + +
    NameMinMax
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection_item.html b/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection_item.html new file mode 100755 index 000000000..7ea4ebb5f --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/OutputPortType/Collection/template-main_outputporttype_collection_item.html @@ -0,0 +1,4 @@ +<%= name %> +<%= minimum %> +<%= maximum %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection.html b/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection.html new file mode 100755 index 000000000..026e79816 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection.html @@ -0,0 +1,20 @@ +

    Projects

    + +
    +
    + + + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedResourcesResource ListsWorkflows
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection_item.html new file mode 100755 index 000000000..e56c90b2c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Project/Collection/template-main_project_collection_item.html @@ -0,0 +1,7 @@ +<%= name%> +<%= creator%> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= resource_count%> +<%= resourcelist_count%> +<%= workflow_count%> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_individual.html b/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_individual.html new file mode 100755 index 000000000..660e0d320 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_individual.html @@ -0,0 +1,20 @@ +
    +

    Project

    + + + + + Creator: <%= creator %>
    + Created on: <%= _.formatFromUTC(created) %>
    + Updated on: <%= _.formatFromUTC(updated) %>
    + URL: <%= url %>
    +
    + + + + + + + +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_users.html b/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_users.html new file mode 100755 index 000000000..13a17847a --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Project/Individual/template-main_project_users.html @@ -0,0 +1,28 @@ +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +

    Admins

    +
    +
    +
    +

    Workers

    +
    +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection.html b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection.html new file mode 100755 index 000000000..241172a40 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection.html @@ -0,0 +1,26 @@ +

    Resources

    + + +
    +
    +
    + + + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedTypeLabel(s)File exists
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection_item.html new file mode 100755 index 000000000..85970271c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-main_resource_collection_item.html @@ -0,0 +1,7 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= resource_type_full.mimetype %> +<%= _.map(resource_label_full, (label) => { return label.name; }) %> +<%= !_.isNull(download) %> diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection.html b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection.html new file mode 100755 index 000000000..3d56f0561 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection.html @@ -0,0 +1,17 @@ +
    + + + + + + + + + + + + + + +
    NameCreatorCreatedTypeLabel(s)
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item.html new file mode 100755 index 000000000..bb448c907 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item.html @@ -0,0 +1,7 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= resource_type_full.mimetype %> +<%= _.map(resource_label_full, (label) => { return label.name; }) %> + + diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item_assigned.html b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item_assigned.html new file mode 100644 index 000000000..ddc32ce96 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Collection/template-modal_resource_collection_item_assigned.html @@ -0,0 +1,11 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= resource_type_full.mimetype %> +<%= _.map(resource_label_full, (label) => { return label.name; }) %> + + + + + + diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual.html b/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual.html new file mode 100755 index 000000000..477aab876 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual.html @@ -0,0 +1,25 @@ +
    +

    Resource

    + + + + +
    +
    + Creator: <%= creator %>
    + Created: <%= _.formatFromUTC(created) %>
    + Updated: <%= _.formatFromUTC(updated) %>
    + URL: <%= url %>
    + Type:
    +
    +
    + + + +
    +
    +
    +

    Note: opening the Resource "View" (if available) may require authentication, but no authentication is required for "Download".

    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual_multi.html b/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual_multi.html new file mode 100644 index 000000000..cb84cb76d --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Resource/Individual/template-main_resource_individual_multi.html @@ -0,0 +1,20 @@ +
    +

    Resources

    + <%- count %> Resources Selected
    + + + <% if (isSameLabel) { %> + + <% } %> +
    +
    + + + +
    +
    +
    +

    Note: multi-selecting resources is still experimental.

    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceAssignment/template-main_resourceassignment.html b/rodan-client/code/templates/Views/Master/Main/ResourceAssignment/template-main_resourceassignment.html new file mode 100755 index 000000000..46c9dd64c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceAssignment/template-main_resourceassignment.html @@ -0,0 +1,22 @@ +
    +
    +

    Available Resources

    +
    +
    +
    +
    + + + +
    + + + +
    +
    +
    +

    Assigned Resources

    +

    Resource(s) Assigned

    +
    +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceLabel/template-main_resourcelabel.html b/rodan-client/code/templates/Views/Master/Main/ResourceLabel/template-main_resourcelabel.html new file mode 100644 index 000000000..ad6314923 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceLabel/template-main_resourcelabel.html @@ -0,0 +1,9 @@ +
    + +
    + +
    + +
    diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection.html b/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection.html new file mode 100755 index 000000000..cd817211a --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection.html @@ -0,0 +1,18 @@ +

    Resource Lists

    + +
    +
    + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedType
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection_item.html b/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection_item.html new file mode 100755 index 000000000..c71f54254 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceList/Collection/template-main_resourcelist_collection_item.html @@ -0,0 +1,5 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= resource_type_full.mimetype %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceList/Individual/template-main_resourcelist_individual.html b/rodan-client/code/templates/Views/Master/Main/ResourceList/Individual/template-main_resourcelist_individual.html new file mode 100755 index 000000000..e41b61924 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceList/Individual/template-main_resourcelist_individual.html @@ -0,0 +1,20 @@ +
    +

    Resource List

    + + + + + Creator: <%= creator %>
    + Created: <%= _.formatFromUTC(created) %>
    + Updated: <%= _.formatFromUTC(updated) %>
    + Type:
    +
    +
    + + + + +
    +
    +

    Note: make sure to Save your Resource List after assigning/unassigning Resources.

    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection.html b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection.html new file mode 100755 index 000000000..979f1a9d6 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection.html @@ -0,0 +1,15 @@ +

    Resource Types

    +
    + + + + + + + + + + + +
    MIME TypeExtensionDescriptionURL
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection_item.html b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection_item.html new file mode 100755 index 000000000..0fe7638bf --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_collection_item.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_detail_collection_item.html b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_detail_collection_item.html new file mode 100755 index 000000000..d465336f0 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/ResourceType/template-resourcetype_detail_collection_item.html @@ -0,0 +1,5 @@ +<%= mimetype %> +<%= extension %> +<%= description %> +<%= url %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection.html b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection.html new file mode 100755 index 000000000..9e5429d6c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection.html @@ -0,0 +1,17 @@ +

    Run Jobs

    +
    +
    + + + + + + + + + + + + +
    NameCreatedUpdatedStatusAvailable
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_item.html b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_item.html new file mode 100755 index 000000000..596240243 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_item.html @@ -0,0 +1,5 @@ +<%= job_name %> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= statusText %> +<%= available %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_notitle.html b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_notitle.html new file mode 100755 index 000000000..63ff4dd2d --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/RunJob/Collection/template-main_runjob_collection_notitle.html @@ -0,0 +1,15 @@ +
    + + + + + + + + + + + + +
    NameCreatedUpdatedStatusAvailable
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/RunJob/Individual/template-main_runjob_individual.html b/rodan-client/code/templates/Views/Master/Main/RunJob/Individual/template-main_runjob_individual.html new file mode 100755 index 000000000..e9f915de0 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/RunJob/Individual/template-main_runjob_individual.html @@ -0,0 +1,13 @@ +
    +

    Run Job

    + Name: <%= job_name %>
    + Created: <%= _.formatFromUTC(created) %>
    + Updated: <%= _.formatFromUTC(updated) %>
    + Status: <%= statusText %>
    +
    + +

    + Error summary: <%= error_summary %>
    + Error details:
    + +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection.html b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection.html new file mode 100755 index 000000000..8c66f04e4 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection.html @@ -0,0 +1,13 @@ +
    + + + + + + + + + + +
    UsernameFirst nameLast name
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection_item_remove.html b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection_item_remove.html new file mode 100755 index 000000000..740011fd9 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_collection_item_remove.html @@ -0,0 +1,4 @@ +<%= username %> +<%= first_name %> +<%= last_name %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection.html b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection.html new file mode 100644 index 000000000..36b36a2de --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection.html @@ -0,0 +1 @@ + diff --git a/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection_item.html b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection_item.html new file mode 100644 index 000000000..120c897e7 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Collection/template-main_user_selection_item.html @@ -0,0 +1 @@ +<%= username %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_individual.html b/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_individual.html new file mode 100755 index 000000000..63ce1f70b --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_individual.html @@ -0,0 +1,16 @@ +
    + + + + + + +
    + +
    +
    Waiting for user preferences to load.
    +
    + + +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_password.html b/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_password.html new file mode 100755 index 000000000..253b8154f --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/User/Individual/template-main_user_password.html @@ -0,0 +1,14 @@ +
    + + + + + + + +
    +
    +
    + +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection.html b/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection.html new file mode 100755 index 000000000..ae7299bc2 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection.html @@ -0,0 +1,23 @@ +

    Workflows

    +
    + + +
    +
    +
    + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedValid
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection_item.html new file mode 100755 index 000000000..6967e7494 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Workflow/Collection/template-main_workflow_collection_item.html @@ -0,0 +1,5 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= valid %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual.html b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual.html new file mode 100755 index 000000000..3840977d5 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual.html @@ -0,0 +1,19 @@ +
    +

    Workflow

    + + + + + Creator: <%= creator %>
    + Created: <%= _.formatFromUTC(created) %>
    + Updated: <%= _.formatFromUTC(updated) %>
    + URL: <%= url %>
    + Valid: <%= valid %>
    +
    + + + + + +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_edit.html b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_edit.html new file mode 100755 index 000000000..47f139d18 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_edit.html @@ -0,0 +1,6 @@ + + + + +
    + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_workflowrun_collection_item.html b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_workflowrun_collection_item.html new file mode 100755 index 000000000..40484201d --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/Workflow/Individual/template-main_workflow_individual_workflowrun_collection_item.html @@ -0,0 +1,2 @@ +<%= name%> +<%= _.formatFromUTC(created) %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflow_collection_import.html b/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflow_collection_import.html new file mode 100755 index 000000000..171582249 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflow_collection_import.html @@ -0,0 +1,13 @@ +
    + + + + + + + + + + +
    NameCreatorValid
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflowbuilder_workflow_collection_item_import.html b/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflowbuilder_workflow_collection_item_import.html new file mode 100755 index 000000000..9ccada2e9 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowBuilder/WorkflowImport/template-main_workflowbuilder_workflow_collection_item_import.html @@ -0,0 +1,4 @@ +<%= name %> +<%= creator %> +<%= valid %> + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob.html b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob.html new file mode 100755 index 000000000..a569b04f5 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob.html @@ -0,0 +1,7 @@ + + +
    +<%= job_name %> +
    + + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_ports.html b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_ports.html new file mode 100755 index 000000000..6b52f6944 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_ports.html @@ -0,0 +1,4 @@ +
    +
    +
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_settings.html b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_settings.html new file mode 100755 index 000000000..f542023f4 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowJob/template-main_workflowjob_settings.html @@ -0,0 +1,2 @@ +
    + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowJobGroup/template-main_workflowjobgroup.html b/rodan-client/code/templates/Views/Master/Main/WorkflowJobGroup/template-main_workflowjobgroup.html new file mode 100755 index 000000000..b99d57340 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowJobGroup/template-main_workflowjobgroup.html @@ -0,0 +1,4 @@ + + +
    + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection.html b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection.html new file mode 100755 index 000000000..8cf2d2cea --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection.html @@ -0,0 +1,16 @@ +

    Workflow Runs

    +
    + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedStatus
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection_item.html b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection_item.html new file mode 100755 index 000000000..f3e81ddea --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Collection/template-main_workflowrun_collection_item.html @@ -0,0 +1,5 @@ +<%= name %> +<%= creator %> +<%= _.formatFromUTC(created) %> +<%= _.formatFromUTC(updated) %> +<%= statusText %> diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual.html b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual.html new file mode 100755 index 000000000..c8a903ed5 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual.html @@ -0,0 +1,23 @@ +
    +
    +

    Workflow Run

    + + + + + Creator: <%= creator %>
    + Created on: <%= _.formatFromUTC(created) %>
    + Updated on: <%= _.formatFromUTC(updated) %>
    + URL: <%= url %>
    + Status: <%= statusText %>
    + + +
    +
    +
    +
    +

    Resources | Run Jobs

    +
    +
    +
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual_resources_collection.html b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual_resources_collection.html new file mode 100755 index 000000000..eec1fc313 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/WorkflowRun/Individual/template-main_workflowrun_individual_resources_collection.html @@ -0,0 +1,17 @@ +
    + + + + + + + + + + + + + + +
    NameCreatorCreatedUpdatedTypeLabel(s)File exists
    +
    diff --git a/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model.html b/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model.html new file mode 100755 index 000000000..f37c18165 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model.html @@ -0,0 +1,4 @@ +
    +
    +
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model_inverse.html b/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model_inverse.html new file mode 100755 index 000000000..7683d341b --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Main/template-main_layoutview_model_inverse.html @@ -0,0 +1,4 @@ +
    +
    +
    +
    \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Misc/template-misc_about.html b/rodan-client/code/templates/Views/Master/Misc/template-misc_about.html new file mode 100755 index 000000000..866b145d5 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Misc/template-misc_about.html @@ -0,0 +1,18 @@ +

    Rodan server

    +Version: <%= version %>
    +URI: <%= hostname %>
    +Last known server date/time: <%= date %>
    +Pagination length: <%= serverConfiguration.page_length %>
    +Job packages: + +
    +

    Rodan client

    + diff --git a/rodan-client/code/templates/Views/Master/Misc/template-misc_help.html b/rodan-client/code/templates/Views/Master/Misc/template-misc_help.html new file mode 100755 index 000000000..0b824fab2 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Misc/template-misc_help.html @@ -0,0 +1,2 @@ +Please visit <%= url %>
    +Client admin: <%= name %> \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Modal/template-modal.html b/rodan-client/code/templates/Views/Master/Modal/template-modal.html new file mode 100755 index 000000000..aa114f795 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Modal/template-modal.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Modal/template-modal_simple.html b/rodan-client/code/templates/Views/Master/Modal/template-modal_simple.html new file mode 100755 index 000000000..ff222797b --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Modal/template-modal_simple.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation.html new file mode 100755 index 000000000..7b00ed6f4 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation.html @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_node.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_node.html new file mode 100755 index 000000000..ddde71896 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_node.html @@ -0,0 +1,4 @@ +
  • +
    <%= name %>
    +
      +
    • diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resourcelists.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resourcelists.html new file mode 100755 index 000000000..1b29d58c6 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resourcelists.html @@ -0,0 +1,4 @@ +
    • +
      Resource Lists
      +
        +
      • \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resources.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resources.html new file mode 100755 index 000000000..7a3dcb005 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_resources.html @@ -0,0 +1,4 @@ +
      • +
        Resources
        +
          +
        • diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_root.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_root.html new file mode 100755 index 000000000..ddde71896 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_root.html @@ -0,0 +1,4 @@ +
        • +
          <%= name %>
          +
            +
          • diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_runjobs.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_runjobs.html new file mode 100755 index 000000000..fd766265e --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_runjobs.html @@ -0,0 +1,4 @@ +
          • +
            Run Jobs
            +
              +
            • diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflowruns.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflowruns.html new file mode 100755 index 000000000..48371d4f9 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflowruns.html @@ -0,0 +1,4 @@ +
            • +
              Workflow Runs
              +
                +
              • diff --git a/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflows.html b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflows.html new file mode 100755 index 000000000..f4ecf0d01 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Navigation/template-navigation_workflows.html @@ -0,0 +1,4 @@ +
              • +
                Workflows
                +
                  +
                • diff --git a/rodan-client/code/templates/Views/Master/Status/template-status.html b/rodan-client/code/templates/Views/Master/Status/template-status.html new file mode 100755 index 000000000..92cf77f1d --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Status/template-status.html @@ -0,0 +1,4 @@ + +
                  +
                  +
                  \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Tables/template-filter_choice.html b/rodan-client/code/templates/Views/Master/Tables/template-filter_choice.html new file mode 100755 index 000000000..f14315a0a --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-filter_choice.html @@ -0,0 +1 @@ +
                • <%- label %>
                • \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Tables/template-filter_datetime.html b/rodan-client/code/templates/Views/Master/Tables/template-filter_datetime.html new file mode 100755 index 000000000..137ba53a9 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-filter_datetime.html @@ -0,0 +1,10 @@ +
                  + +
                  + +
                  +
                  + +
                  + +
                  \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Tables/template-filter_enumeration.html b/rodan-client/code/templates/Views/Master/Tables/template-filter_enumeration.html new file mode 100755 index 000000000..06bffc24c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-filter_enumeration.html @@ -0,0 +1,10 @@ +
                  + + + +
                  \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Tables/template-filter_multiple_enum.html b/rodan-client/code/templates/Views/Master/Tables/template-filter_multiple_enum.html new file mode 100644 index 000000000..546fb5615 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-filter_multiple_enum.html @@ -0,0 +1,9 @@ +
                  + + + +
                  diff --git a/rodan-client/code/templates/Views/Master/Tables/template-filter_text.html b/rodan-client/code/templates/Views/Master/Tables/template-filter_text.html new file mode 100755 index 000000000..f1af11850 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-filter_text.html @@ -0,0 +1,5 @@ +
                  + + + +
                  \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/Tables/template-table_control.html b/rodan-client/code/templates/Views/Master/Tables/template-table_control.html new file mode 100755 index 000000000..233a28508 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/Tables/template-table_control.html @@ -0,0 +1,29 @@ +
                  +
                  +
                  +
                  +
                  + + +
                  + +
                  +
                  +
                  + +
                  + +
                  + +
                  +
                  +
                  + + + + +
                  + +
                  diff --git a/rodan-client/code/templates/Views/Master/template-empty.html b/rodan-client/code/templates/Views/Master/template-empty.html new file mode 100755 index 000000000..281c6866c --- /dev/null +++ b/rodan-client/code/templates/Views/Master/template-empty.html @@ -0,0 +1 @@ +
                  \ No newline at end of file diff --git a/rodan-client/code/templates/Views/Master/template-master.html b/rodan-client/code/templates/Views/Master/template-master.html new file mode 100755 index 000000000..b7e699c60 --- /dev/null +++ b/rodan-client/code/templates/Views/Master/template-master.html @@ -0,0 +1,12 @@ +
                  +
                  +
                  +
                  +
                  +
                  + + + + + + \ No newline at end of file diff --git a/rodan-client/code/templates/index.html b/rodan-client/code/templates/index.html new file mode 100755 index 000000000..bb1586c05 --- /dev/null +++ b/rodan-client/code/templates/index.html @@ -0,0 +1,24 @@ + + + + + + + + Rodan Client + + + + + + + + +
                  +
                  +
                  + {templates} + + + diff --git a/rodan-client/code/templates/template-main_workflowbuilder.html b/rodan-client/code/templates/template-main_workflowbuilder.html new file mode 100755 index 000000000..5aa80c0b3 --- /dev/null +++ b/rodan-client/code/templates/template-main_workflowbuilder.html @@ -0,0 +1,40 @@ +
                  + +
                  + +
                  +
                  +
                  \ No newline at end of file diff --git a/rodan-client/code/yarn.lock b/rodan-client/code/yarn.lock new file mode 100644 index 000000000..d94815cfa --- /dev/null +++ b/rodan-client/code/yarn.lock @@ -0,0 +1,7352 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" + integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== + dependencies: + browserslist "^4.12.0" + invariant "^2.2.4" + semver "^5.5.0" + +"@babel/core@^7.9.6": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" + integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.6" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== + dependencies: + "@babel/types" "^7.11.5" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== + dependencies: + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" + invariant "^2.2.4" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" + integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" + integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" + integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.0" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" + integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + dependencies: + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" + integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== + +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" + integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" + integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" + integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" + +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" + integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" + integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== + dependencies: + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" + integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== + dependencies: + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" + integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" + integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" + integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.9.6": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" + integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== + dependencies: + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.11.5" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "14.10.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.10.2.tgz#9b47a2c8e4dabd4db73b57e750b24af689600514" + integrity sha512-IzMhbDYCpv26pC2wboJ4MMOa9GKtjplXfcAqrMeNJpUUwpM/2ATt2w1JPUXwS6spu856TvKZL2AOmeU2rAxskw== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-each@^1.0.0, array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" + integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^2.0.0" + stream-exhaust "^1.0.1" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + +backbone.marionette@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/backbone.marionette/-/backbone.marionette-4.1.2.tgz#55de74363219f6d5c343dab5bff6aeb20fc44419" + integrity sha512-T8wWxZZnuYjylONTnWZsGsgXtdx2ZrE38pZWJI9LmPqzYK5j0T8uduapFO7OEpsW5rtdbBgwof30xhzAkbb5eQ== + dependencies: + backbone.radio "^2.0.0" + +backbone.radio@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/backbone.radio/-/backbone.radio-2.0.0.tgz#bbe8672b373e313f99f36d2fbcf583fe77d04f42" + integrity sha1-u+hnKzc+MT+Z820vvPWD/nfQT0I= + +backbone@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12" + integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ== + dependencies: + underscore ">=1.8.3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +bootstrap@^3.3: + version "3.4.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.4.1.tgz#c3a347d419e289ad11f4033e3c4132b87c081d72" + integrity sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA== + +bootstrap@^4.4.1: + version "4.5.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.5.2.tgz#a85c4eda59155f0d71186b6e6ad9b875813779ab" + integrity sha512-vlGn0bcySYl/iV+BGA544JkkZP5LB3jsmkeKLFQakCOwCM3AOk7VkldBz4jrzSe+Z0Ezn99NVXa1o45cQY4R6A== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.12.0, browserslist@^4.8.5: + version "4.14.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" + integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== + dependencies: + caniuse-lite "^1.0.30001125" + electron-to-chromium "^1.3.564" + escalade "^3.0.2" + node-releases "^1.1.61" + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001125: + version "1.0.30001131" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001131.tgz#afad8a28fc2b7a0d3ae9407e71085a0ead905d54" + integrity sha512-4QYi6Mal4MMfQMSqGIRPGbKIbZygeN83QsWq1ixpUwvtfgAZot5BrCKzGygvZaV+CnELdTwD0S4cqUNozq7/Cw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.0.0, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + dependencies: + each-props "^1.3.0" + is-plain-object "^2.0.1" + +core-js-compat@^3.6.2: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== + dependencies: + kind-of "^5.0.2" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== + dependencies: + is-plain-object "^2.0.1" + object.defaults "^1.1.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.564: + version "1.3.568" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.568.tgz#0fa28cd3e5cbd9e8c66f72309eef0646f65a5b66" + integrity sha512-j9MlEwgTHVW/lq93Hw8yhzA886oLjDm3Hz7eDkWP2v4fzLVuqOWhpNluziSnmR/tBqgoYldagbLknrdg+B7Tlw== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +eonasdan-bootstrap-datetimepicker@4.17.47: + version "4.17.47" + resolved "https://registry.yarnpkg.com/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.47.tgz#7a49970044065276e7965efd16f822735219e735" + integrity sha1-ekmXAEQGUnbnll79Fvgic1IZ5zU= + dependencies: + bootstrap "^3.3" + jquery "^1.8.3 || ^2.0 || ^3.0" + moment "^2.10" + moment-timezone "^0.4.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0: + version "1.18.0-next.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" + integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escalade@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" + integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fancy-log@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.0.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" + integrity sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk= + +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-saver@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.2.tgz#06d6e728a9ea2df2cce2f8d9e84dfcdc338ec17a" + integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + +flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-watcher@^5.0.3: + version "5.0.5" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" + integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + normalize-path "^3.0.0" + object.defaults "^1.1.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== + dependencies: + sparkles "^1.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +gulp-cli@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" + integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.4.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.2.0" + yargs "^7.1.0" + +gulp-sass@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-4.1.0.tgz#486d7443c32d42bf31a6b1573ebbdaa361de7427" + integrity sha512-xIiwp9nkBLcJDpmYHbEHdoWZv+j+WtYaKD6Zil/67F3nrAaZtWYN5mDwerdo7EvcdBenSAj7Xb2hx2DqURLGdA== + dependencies: + chalk "^2.3.0" + lodash "^4.17.11" + node-sass "^4.8.3" + plugin-error "^1.0.1" + replace-ext "^1.0.0" + strip-ansi "^4.0.0" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + +gulp@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" + integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== + dependencies: + glob-watcher "^5.0.3" + gulp-cli "^2.2.0" + undertaker "^1.2.1" + vinyl-fs "^3.0.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= + dependencies: + glogg "^1.0.0" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +in-publish@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" + integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.4, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" + integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +"jquery@^1.8.3 || ^2.0 || ^3.0", jquery@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + +jqueryui@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/jqueryui/-/jqueryui-1.11.1.tgz#8718550705f5568d1199196169094db73b2291bc" + integrity sha1-hxhVBwX1Vo0RmRlhaQlNtzsikbw= + +js-base64@^2.1.8: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-editor@0.7.28: + version "0.7.28" + resolved "https://registry.yarnpkg.com/json-editor/-/json-editor-0.7.28.tgz#2aa5b0990a2b5076789158e7dd8a2d2108ce9cc5" + integrity sha1-KqWwmQorUHZ4kVjn3YotIQjOnMU= + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +liftoff@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== + dependencies: + extend "^3.0.0" + findup-sync "^3.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@~4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +moment-timezone@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.4.1.tgz#81f598c3ad5e22cdad796b67ecd8d88d0f5baa06" + integrity sha1-gfWYw61eIs2teWtn7NjYjQ9bqgY= + dependencies: + moment ">= 2.6.0" + +moment-timezone@^0.5.28: + version "0.5.31" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.31.tgz#9c40d8c5026f0c7ab46eda3d63e49c155148de05" + integrity sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.6.0", "moment@>= 2.9.0", moment@^2.10, moment@^2.25.3: + version "2.28.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.28.0.tgz#cdfe73ce01327cee6537b0fafac2e0f21a237d75" + integrity sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + +nan@^2.12.1, nan@^2.13.2: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.61: + version "1.1.61" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" + integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== + +node-sass@^4.8.3: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "2.2.5" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.7.0, object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.defaults@^1.0.0, object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +paper@^0.12.4: + version "0.12.11" + resolved "https://registry.yarnpkg.com/paper/-/paper-0.12.11.tgz#21914ab0bbef939241ace5e4c87ff2543e7c8b7d" + integrity sha512-m6TKiyUr1A8zz6qdyBdYkb63OSRcNODlWZDxjEXFHtRjSlmMckFeSDdnuLYXsgwzcv3s36LgtrPk88y+gmA5JA== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== + dependencies: + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" + +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prompt-sync@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/prompt-sync/-/prompt-sync-4.2.0.tgz#0198f73c5b70e3b03e4b9033a50540a7c9a1d7f4" + integrity sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw== + dependencies: + strip-ansi "^5.0.0" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3, pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" + integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" + +request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^13.3.2" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= + dependencies: + sver-compat "^1.5.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-git@^1.132.0: + version "1.132.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1" + integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg== + dependencies: + debug "^4.0.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +tags-input@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tags-input/-/tags-input-1.1.1.tgz#d6bd7e912f16a9bd41c03c8a3059e4245528125a" + integrity sha1-1r1+kS8Wqb1BwDyKMFnkJFUoElo= + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +underscore@>=1.8.3, underscore@^1.10.2: + version "1.11.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.11.0.tgz#dd7c23a195db34267186044649870ff1bab5929e" + integrity sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw== + +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" + integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + fast-levenshtein "^1.0.0" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8flags@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vinyl-fs@^3.0.0, vinyl-fs@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl-sourcemaps-apply@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705" + integrity sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU= + dependencies: + source-map "^0.5.1" + +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.43.0: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.2.14, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@5.0.0-security.0: + version "5.0.0-security.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz#4ff7271d25f90ac15643b86076a2ab499ec9ee24" + integrity sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ== + dependencies: + camelcase "^3.0.0" + object.assign "^4.1.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" + integrity sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g== + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "5.0.0-security.0" diff --git a/rodan-client/config/configuration.json b/rodan-client/config/configuration.json new file mode 100644 index 000000000..da1c6d72b --- /dev/null +++ b/rodan-client/config/configuration.json @@ -0,0 +1,44 @@ +{ + "SERVER_HOST": "localhost", + "SERVER_PORT": 443, + "SERVER_HTTPS": true, + "SERVER_SOCKET_AVAILABLE": false, + "SERVER_AUTHENTICATION_TYPE": "token", + "ADMIN_CLIENT": + { + "NAME": "", + "EMAIL": "" + }, + "DEBUG": false, + "WORKFLOWBUILDERGUI": + { + "USER_AGENT": "rodan-standard", + "GRID": + { + "DIMENSION": 20, + "LINE_COLOR": "#606060", + "LINE_WIDTH": 0.5 + }, + "ZOOM_MAX": 3.0, + "ZOOM_MIN": 1.0, + "ZOOM_RATE": 0.05, + "ZOOM_INITIAL": 1.7, + "WORKFLOWJOB_WIDTH": 20, + "WORKFLOWJOB_HEIGHT": 22, + "PORT_WIDTH": 8, + "PORT_HEIGHT": 8, + "OUTPUTPORT_COLOR": "#00ff00", + "INPUTPORT_COLOR_SATISFIED": "#00ff00", + "INPUTPORT_COLOR_UNSATISFIED": "#ff0000", + "INPUTPORT_COLOR_CANDIDATE": "#00ff00", + "STROKE_COLOR": "#000000", + "FILL_COLOR": "#ccccff", + "WORKFLOWJOBGROUP_FILL_COLOR": "#8888ff", + "STROKE_WIDTH": 1, + "FONT_SIZE": 10, + "STROKE_COLOR_SELECTED": "#0000ff", + "STROKE_WIDTH_SELECTED": 2, + "CONNECTION_CIRCLE_RADIUS": 4, + "HOVER_TIME": 1000 + } +} diff --git a/rodan-client/scripts/start b/rodan-client/scripts/start new file mode 100644 index 000000000..8ee7b7ee8 --- /dev/null +++ b/rodan-client/scripts/start @@ -0,0 +1,6 @@ +#!/bin/sh +set -o errexit # Exit immediately if a command exits with a non-zero status. +set -o nounset # Treat unset variables as an error when substituting. +set -o xtrace # Print commands and their arguments as they are executed. + +/code/node_modules/.bin/gulp diff --git a/rodan-main/Dockerfile b/rodan-main/Dockerfile new file mode 100644 index 000000000..87e7ade78 --- /dev/null +++ b/rodan-main/Dockerfile @@ -0,0 +1,50 @@ +FROM ddmal/rodan-python2-celery:nightly +ARG BRANCHES +ARG VERSION + +# Install OpenJPEG +RUN \ + # flip this to trigger a new layer because the scripts are cached. + set -x \ + && mkdir /vendor || echo "Already exists" \ + && apt update \ + && apt -q install -y \ + libopenjp2-7 \ + libopenjp2-7-dev \ + libopenjp2-tools + +# Install Grok +RUN \ + cd /vendor \ + && wget --no-check-certificate -qO - https://cmake.org/files/v3.17/cmake-3.17.0-Linux-x86_64.tar.gz | tar -xzf - \ + && /vendor/cmake-3.17.0-Linux-x86_64/bin/cmake --help \ + && git clone https://github.com/raviraina/grok.git \ + && cd grok \ + # && git checkout 2203be8 \ + && git checkout 4932d86b19d9008a28ae898035cfa43340e636e6 \ + && mkdir build \ + && cd build \ + && /vendor/cmake-3.17.0-Linux-x86_64/bin/cmake -DBUILD_THIRDPARTY=ON .. \ + && make -j3 + +# This script gets the python3 jobs into celery +COPY ./scripts/install_python3_rodan_jobs /opt/install_python3_rodan_jobs +COPY ./scripts/install_gpu_rodan_jobs /opt/install_gpu_rodan_jobs +COPY ./scripts/start /run/ +RUN set -e \ + && chmod +x \ + /opt/install_python3_rodan_jobs \ + /opt/install_gpu_rodan_jobs \ + && chown www-data \ + /opt/install_python3_rodan_jobs \ + /opt/install_gpu_rodan_jobs \ + # This script starts Rodan + && chmod +x /run/start \ + && chown www-data /run/start + +RUN \ + /opt/install_python3_rodan_jobs \ + && /opt/install_gpu_rodan_jobs \ + && /run/install_rodan + +ENTRYPOINT ["/opt/entrypoint"] diff --git a/rodan-main/code/.gitattributes b/rodan-main/code/.gitattributes new file mode 100644 index 000000000..0290160d0 --- /dev/null +++ b/rodan-main/code/.gitattributes @@ -0,0 +1 @@ +*.j diff=objc \ No newline at end of file diff --git a/rodan-main/code/.github/workflows/git_actions.yml b/rodan-main/code/.github/workflows/git_actions.yml new file mode 100644 index 000000000..da5ccce35 --- /dev/null +++ b/rodan-main/code/.github/workflows/git_actions.yml @@ -0,0 +1,83 @@ +name: GitHub Actions Rodan + + +on: + + push: + branches: [ develop ] + + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + env: + DJANGO_DEBUG_MODE: True + DJANGO_ALLOWED_HOSTS: =* + REDIS_HOST : localhost + REDIS_PORT : 6379 + REDIS_DB : 0 + RABBITMQ_URL : amqp://guest_user:guest_pass@localhost:5672// + RABBITMQ_DEFAULT_USER : guest_user + RABBITMQ_DEFAULT_PASS : guest_pass + DJANGO_SECRET_KEY : local + DJANGO_MEDIA_ROOT : ./data/ + DJANGO_ACCESS_LOG : ./rodan.log + DJANGO_DEBUG_LOG : ./database.log + CELERY_JOB_QUEUE : None + POSTGRES_DB : rodan + POSTGRES_USER : rodan + POSTGRES_HOST : localhost + POSTGRES_PORT : 5432 + POSTGRES_PASSWORD : rodan + + strategy: + matrix: + python-version: [3.6] + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: psycopg2 prerequisites + run: sudo apt-get install libpq-dev + - name: Install libxml2-dev + run: sudo apt-get install libxml2-dev + - name: Install libxslt1-dev + run: sudo apt-get install libxslt1-dev + - name: Set up PostgreSQL and Redis + run: | + sudo apt-get install postgresql libpq-dev + sudo service postgresql start + sudo apt-get update -qy + sudo /etc/init.d/postgresql restart + sudo pip install redis + # sudo redis-server /etc/redis/redis.conf --port 6379 + - name: Install flake8 + run: | + python -m pip install --upgrade pip + pip install flake8 pytest + - name: Install dependencies + uses: py-actions/py-dependency-install@v2 + with: + path: "requirements.txt" + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: run migrations + run: | + sudo psql --host=localhost --dbname=database-name --username=postgres + psql -c "CREATE DATABASE rodan;" -U postgres + psql -c "CREATE USER rodan WITH PASSWORD 'rodan';" -U postgres + psql -c "ALTER USER rodan WITH SUPERUSER;" -U postgres + psql -c "CREATE LANGUAGE plpython2u;" -U postgres + psql -c "GRANT ALL PRIVILEGES ON DATABASE "rodan" TO rodan;" -U postgres + python manage.py makemigrations rodan + python manage.py migrate + - name: run manage.py test + run: | + python manage.py test diff --git a/rodan-main/code/.gitignore b/rodan-main/code/.gitignore new file mode 100644 index 000000000..3940dcaca --- /dev/null +++ b/rodan-main/code/.gitignore @@ -0,0 +1,44 @@ +*.pyc +db.sqlite +*.swp +*.tif +*.tiff +*.cib +*.xcodeproj/* +.XcodeSupport/* +rodan.log +rodan_env +.DS_Store +rodan/static/Rodan +rodan/jobs/diva_wrapper/ +rodan/jobs/neon_wrapper/ +rodan/jobs/pixel_wrapper/ +# ignore emacs autosave file +*~ +database.log +celery.log +.idea + +# Ignore environment variables. +config/staging.env + +# Ignore static files +staticfiles/ +rodan/static/ + +# Ignore logs +*.log + +env/ +docs/_build +docs/* +*.egg-info/ +.mypy_cache/ + +# Ignore .vscode + +.vscode/ + +# Ignore python virtual environments. + +.env/ \ No newline at end of file diff --git a/rodan-main/code/.pyup.yml b/rodan-main/code/.pyup.yml new file mode 100644 index 000000000..d80759349 --- /dev/null +++ b/rodan-main/code/.pyup.yml @@ -0,0 +1,5 @@ +# autogenerated pyup.io config file +# see https://pyup.io/docs/configuration/ for all available options + +update: insecure +branch: develop diff --git a/rodan-main/code/.touch b/rodan-main/code/.touch new file mode 100644 index 000000000..b439c6f16 --- /dev/null +++ b/rodan-main/code/.touch @@ -0,0 +1 @@ +.touch diff --git a/AUTHORS b/rodan-main/code/AUTHORS similarity index 100% rename from AUTHORS rename to rodan-main/code/AUTHORS diff --git a/LICENSE b/rodan-main/code/LICENSE similarity index 100% rename from LICENSE rename to rodan-main/code/LICENSE diff --git a/__init__.py b/rodan-main/code/__init__.py similarity index 100% rename from __init__.py rename to rodan-main/code/__init__.py diff --git a/_clean_database.sh b/rodan-main/code/_clean_database.sh similarity index 100% rename from _clean_database.sh rename to rodan-main/code/_clean_database.sh diff --git a/etc/nginx/sites-available/rodan b/rodan-main/code/etc/nginx/sites-available/rodan similarity index 100% rename from etc/nginx/sites-available/rodan rename to rodan-main/code/etc/nginx/sites-available/rodan diff --git a/etc/supervisor/conf.d/rodan.conf b/rodan-main/code/etc/supervisor/conf.d/rodan.conf similarity index 74% rename from etc/supervisor/conf.d/rodan.conf rename to rodan-main/code/etc/supervisor/conf.d/rodan.conf index f26cfc520..12cd4c75a 100644 --- a/etc/supervisor/conf.d/rodan.conf +++ b/rodan-main/code/etc/supervisor/conf.d/rodan.conf @@ -1,15 +1,3 @@ -[fcgi-program:iipserver] -command=/vendor/iipsrv/src/iipsrv.fcgi -socket=unix:///tmp/%(program_name)s_1.sock -; [TODO] -; user=www-data -autostart=true -autorestart=unexpected -redirect_stderr=true -redirect_stdout=true -; KEEP FILESYSTEM_PREFIX same as the media path -environment=JPEG_QUALITY='100',MAX_LAYERS='4',MAX_CVT='7000',FILESYSTEM_PREFIX='/rodan/data/' - [program:rodan-celery] command=/usr/local/bin/celery -A rodan worker -l DEBUG environment=PYTHON_EGG_CACHE="/tmp" diff --git a/helper_scripts/convert_image.py b/rodan-main/code/helper_scripts/convert_image.py similarity index 100% rename from helper_scripts/convert_image.py rename to rodan-main/code/helper_scripts/convert_image.py diff --git a/helper_scripts/highlight_from_mei.py b/rodan-main/code/helper_scripts/highlight_from_mei.py similarity index 100% rename from helper_scripts/highlight_from_mei.py rename to rodan-main/code/helper_scripts/highlight_from_mei.py diff --git a/helper_scripts/mei-all-4.0.1.odd b/rodan-main/code/helper_scripts/mei-all-4.0.1.odd similarity index 100% rename from helper_scripts/mei-all-4.0.1.odd rename to rodan-main/code/helper_scripts/mei-all-4.0.1.odd diff --git a/helper_scripts/mult_upload b/rodan-main/code/helper_scripts/mult_upload similarity index 100% rename from helper_scripts/mult_upload rename to rodan-main/code/helper_scripts/mult_upload diff --git a/manage.py b/rodan-main/code/manage.py similarity index 100% rename from manage.py rename to rodan-main/code/manage.py diff --git a/rodan-main/code/poetry.lock b/rodan-main/code/poetry.lock new file mode 100644 index 000000000..863225dbb --- /dev/null +++ b/rodan-main/code/poetry.lock @@ -0,0 +1,1086 @@ +[[package]] +category = "dev" +description = "A configurable sidebar-enabled Sphinx theme" +name = "alabaster" +optional = false +python-versions = "*" +version = "0.7.12" + +[[package]] +category = "main" +description = "Low-level AMQP client for Python (fork of amqplib)" +name = "amqp" +optional = false +python-versions = "*" +version = "1.4.9" + +[[package]] +category = "main" +description = "Wraps the best available JSON implementation available in a common interface" +name = "anyjson" +optional = false +python-versions = "*" +version = "0.3.3" + +[[package]] +category = "dev" +description = "Internationalization utilities" +name = "babel" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.8.0" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +category = "main" +description = "Python multiprocessing fork with improvements and bugfixes" +name = "billiard" +optional = false +python-versions = "*" +version = "3.3.0.23" + +[[package]] +category = "main" +description = "Distributed Task Queue" +name = "celery" +optional = false +python-versions = "*" +version = "3.1.25" + +[package.dependencies] +billiard = ">=3.3.0.23,<3.4" +kombu = ">=3.0.37,<3.1" +pytz = ">0.0-dev" + +[package.extras] +auth = ["pyopenssl"] +beanstalk = ["beanstalkc"] +cassandra = ["pycassa"] +couchbase = ["couchbase"] +couchdb = ["couchdb"] +eventlet = ["eventlet"] +gevent = ["gevent"] +librabbitmq = ["librabbitmq (>=1.6.1)"] +memcache = ["pylibmc"] +mongodb = ["pymongo (>=2.6.2)"] +msgpack = ["msgpack-python (>=0.3.0)"] +pyro = ["pyro4"] +redis = ["redis (>=2.8.0)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +sqlalchemy = ["sqlalchemy"] +sqs = ["boto (>=2.13.3)"] +threads = ["threadpool"] +yaml = ["PyYAML (>=3.10)"] +zeromq = ["pyzmq (>=13.1.0)"] +zookeeper = ["kazoo (>=1.3.1)"] + +[[package]] +category = "dev" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" +optional = false +python-versions = "*" +version = "2020.6.20" + +[[package]] +category = "main" +description = "Foreign Function Interface for Python calling C code." +marker = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\"" +name = "cffi" +optional = false +python-versions = "*" +version = "1.14.0" + +[package.dependencies] +pycparser = "*" + +[[package]] +category = "dev" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "dev" +description = "Cross-platform colored terminal text." +marker = "sys_platform == \"win32\"" +name = "colorama" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.3" + +[[package]] +category = "main" +description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +name = "django" +optional = false +python-versions = "*" +version = "1.11.29" + +[package.dependencies] +pytz = "*" + +[package.extras] +argon2 = ["argon2-cffi (>=16.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +category = "main" +description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." +name = "django-cors-headers" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "3.0.2" + +[package.dependencies] +Django = ">=1.11" + +[[package]] +category = "main" +description = "Include Django URL patterns with decorators." +name = "django-decorator-include" +optional = false +python-versions = "*" +version = "1.3" + +[package.dependencies] +Django = ">=1.8" + +[[package]] +category = "main" +description = "Django-environ allows you to utilize 12factor inspired environment variables to configure your Django application." +name = "django-environ" +optional = false +python-versions = "*" +version = "0.4.5" + +[[package]] +category = "main" +description = "Extensions for Django" +name = "django-extensions" +optional = false +python-versions = "*" +version = "1.6.7" + +[package.dependencies] +six = ">=1.2" + +[[package]] +category = "main" +description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." +name = "django-filter" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "Implementation of per object permissions for Django." +name = "django-guardian" +optional = false +python-versions = "*" +version = "1.4.5" + +[package.dependencies] +Django = ">=1.7" +six = "*" + +[[package]] +category = "main" +description = "a pluggable app that runs a full check on the deployment, using a number of plugins to check e.g. database, queue server, celery processes, etc." +name = "django-health-check" +optional = false +python-versions = "*" +version = "2.4.0" + +[[package]] +category = "main" +description = "Drop-in replacement for django's many to many field with sorted relations." +name = "django-sortedm2m" +optional = false +python-versions = "*" +version = "1.1.1" + +[[package]] +category = "main" +description = "Send emails using Django template system." +name = "django-templated-mail" +optional = false +python-versions = "*" +version = "1.1.1" + +[[package]] +category = "main" +description = "Websocket support for Django using Redis as datastore" +name = "django-websocket-redis" +optional = false +python-versions = "*" +version = "0.5.2" + +[package.dependencies] +gevent = "*" +greenlet = "*" +redis = "*" +setuptools = "*" +six = "*" + +[package.extras] +django-redis-sessions = ["django-redis-sessions (>=0.4.0)"] +uwsgi = ["uWSGI (>=1.9.20)"] +wsaccel = ["wsaccel (>=0.6.2)"] + +[[package]] +category = "main" +description = "Web APIs for Django, made easy." +name = "djangorestframework" +optional = false +python-versions = "*" +version = "3.6.4" + +[[package]] +category = "main" +description = "REST version of Django authentication system." +name = "djoser" +optional = false +python-versions = "*" +version = "1.5.1" + +[package.dependencies] +django-templated-mail = "*" + +[[package]] +category = "dev" +description = "Docutils -- Python Documentation Utilities" +name = "docutils" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.16" + +[[package]] +category = "main" +description = "Coroutine-based network library" +name = "gevent" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +version = "20.6.2" + +[package.dependencies] +cffi = ">=1.12.2" +greenlet = ">=0.4.16" +setuptools = "*" +"zope.event" = "*" +"zope.interface" = "*" + +[package.extras] +dnspython = ["dnspython (>=1.16.0)", "idna"] +docs = ["repoze.sphinx.autointerface", "sphinxcontrib-programoutput"] +monitor = ["psutil (>=5.7.0)"] +recommended = ["dnspython (>=1.16.0)", "idna", "cffi (>=1.12.2)", "selectors2", "backports.socketpair", "psutil (>=5.7.0)"] +test = ["dnspython (>=1.16.0)", "idna", "requests", "objgraph", "cffi (>=1.12.2)", "selectors2", "futures", "mock", "backports.socketpair", "contextvars (2.4)", "coverage (<5.0)", "coveralls (>=1.7.0)", "psutil (>=5.7.0)"] + +[[package]] +category = "main" +description = "Lightweight in-process concurrent programming" +name = "greenlet" +optional = false +python-versions = "*" +version = "0.4.16" + +[[package]] +category = "dev" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.10" + +[[package]] +category = "dev" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +name = "imagesize" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.2.0" + +[[package]] +category = "dev" +description = "A very fast and expressive template engine." +name = "jinja2" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.11.2" + +[package.dependencies] +MarkupSafe = ">=0.23" + +[package.extras] +i18n = ["Babel (>=0.8)"] + +[[package]] +category = "main" +description = "A reusable Django field that allows you to store validated JSON in your model." +name = "jsonfield" +optional = false +python-versions = "*" +version = "1.0.0" + +[package.dependencies] +Django = ">=1.4.3" + +[[package]] +category = "main" +description = "An implementation of JSON Schema validation for Python" +name = "jsonschema" +optional = false +python-versions = "*" +version = "2.5.1" + +[package.extras] +format = ["rfc3987", "strict-rfc3339", "webcolors"] + +[[package]] +category = "main" +description = "Messaging library for Python" +name = "kombu" +optional = false +python-versions = "*" +version = "3.0.37" + +[package.dependencies] +amqp = ">=1.4.9,<2.0" +anyjson = ">=0.3.3" + +[[package]] +category = "main" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +name = "lxml" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +version = "4.5.1" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +category = "dev" +description = "Markdown and reStructuredText in a single file." +name = "m2r" +optional = false +python-versions = "*" +version = "0.2.1" + +[package.dependencies] +docutils = "*" +mistune = "*" + +[package.source] +reference = "ee7c81842e62034ffb55ae07798b0a2dc108ad29" +type = "git" +url = "https://github.com/crossnox/m2r" + +[[package]] +category = "dev" +description = "Safely add untrusted strings to HTML/XML markup." +name = "markupsafe" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.1.1" + +[[package]] +category = "dev" +description = "The fastest markdown parser in pure Python" +name = "mistune" +optional = false +python-versions = "*" +version = "0.8.4" + +[[package]] +category = "dev" +description = "Core utilities for Python packages" +name = "packaging" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "20.4" + +[package.dependencies] +pyparsing = ">=2.0.2" +six = "*" + +[[package]] +category = "main" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +name = "psycopg2-binary" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "2.8.5" + +[[package]] +category = "main" +description = "A library for dealing with BagIt packages." +name = "pybagit" +optional = false +python-versions = "*" +version = "1.5.3" + +[package.source] +reference = "5388eafc458d406872306e36312a150548542e7a" +type = "git" +url = "https://github.com/deepio/pybagit" + +[[package]] +category = "main" +description = "C parser in Python" +marker = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\"" +name = "pycparser" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.20" + +[[package]] +category = "dev" +description = "Pygments is a syntax highlighting package written in Python." +name = "pygments" +optional = false +python-versions = ">=3.5" +version = "2.6.1" + +[[package]] +category = "dev" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.7" + +[[package]] +category = "main" +description = "File type identification using libmagic" +name = "python-magic" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.16" + +[package.source] +reference = "0e977c98649b4ed4533a7700fbc5fea6895bfe71" +type = "git" +url = "https://github.com/ahupp/python-magic.git" +[[package]] +category = "main" +description = "World timezone definitions, modern and historical" +name = "pytz" +optional = false +python-versions = "*" +version = "2020.1" + +[[package]] +category = "main" +description = "Python client for Redis key-value store" +name = "redis" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "3.5.3" + +[package.extras] +hiredis = ["hiredis (>=0.1.3)"] + +[[package]] +category = "dev" +description = "Python HTTP for Humans." +name = "requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.24.0" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<4" +idna = ">=2.5,<3" +urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" + +[package.extras] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] + +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.15.0" + +[[package]] +category = "dev" +description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms." +name = "snowballstemmer" +optional = false +python-versions = "*" +version = "2.0.0" + +[[package]] +category = "dev" +description = "Python documentation generator" +name = "sphinx" +optional = false +python-versions = ">=3.5" +version = "3.1.2" + +[package.dependencies] +Jinja2 = ">=2.3" +Pygments = ">=2.0" +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = ">=0.3.5" +docutils = ">=0.12" +imagesize = "*" +packaging = "*" +requests = ">=2.5.0" +setuptools = "*" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = "*" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = "*" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.780)", "docutils-stubs"] +test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] + +[[package]] +category = "dev" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +name = "sphinxcontrib-applehelp" +optional = false +python-versions = ">=3.5" +version = "1.0.2" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +category = "dev" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +name = "sphinxcontrib-devhelp" +optional = false +python-versions = ">=3.5" +version = "1.0.2" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +category = "dev" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +name = "sphinxcontrib-htmlhelp" +optional = false +python-versions = ">=3.5" +version = "1.0.3" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +category = "dev" +description = "A sphinx extension which renders display math in HTML via JavaScript" +name = "sphinxcontrib-jsmath" +optional = false +python-versions = ">=3.5" +version = "1.0.1" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +category = "dev" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +name = "sphinxcontrib-qthelp" +optional = false +python-versions = ">=3.5" +version = "1.0.3" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +category = "dev" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +name = "sphinxcontrib-serializinghtml" +optional = false +python-versions = ">=3.5" +version = "1.1.4" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +category = "dev" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +version = "1.25.10" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] + +[[package]] +category = "main" +description = "Very basic event publishing system" +name = "zope.event" +optional = false +python-versions = "*" +version = "4.4" + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["sphinx"] +test = ["zope.testrunner"] + +[[package]] +category = "main" +description = "Interfaces for Python" +name = "zope.interface" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "5.1.0" + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["sphinx", "repoze.sphinx.autointerface"] +test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] + +[metadata] +content-hash = "604062886d960d9ad4317db03fbfaa7001582b588550cf3c0ea532686f7303aa" +python-versions = "^3.7" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +amqp = [ + {file = "amqp-1.4.9-py2.py3-none-any.whl", hash = "sha256:e0ed0ce6b8ffe5690a2e856c7908dc557e0e605283d6885dd1361d79f2928908"}, + {file = "amqp-1.4.9.tar.gz", hash = "sha256:2dea4d16d073c902c3b89d9b96620fb6729ac0f7a923bbc777cb4ad827c0c61a"}, +] +anyjson = [ + {file = "anyjson-0.3.3.tar.gz", hash = "sha256:37812d863c9ad3e35c0734c42e0bf0320ce8c3bed82cd20ad54cb34d158157ba"}, +] +babel = [ + {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"}, + {file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"}, +] +billiard = [ + {file = "billiard-3.3.0.23-cp27-none-macosx_10_6_intel.whl", hash = "sha256:c0cbe8d45ba8d8213ad68ef9a1881002a151569c9424d551634195a18c3a4160"}, + {file = "billiard-3.3.0.23-cp27-none-win32.whl", hash = "sha256:82041dbaa62f7fde1464d7ab449978618a38b241b40c0d31dafabb36446635dc"}, + {file = "billiard-3.3.0.23-cp27-none-win_amd64.whl", hash = "sha256:958fc9f8fd5cc9b936b2cb9d96f02aa5ec3613ba13ee7f089c77ff0bcc368fac"}, + {file = "billiard-3.3.0.23-cp3-none-win32.whl", hash = "sha256:23cb71472712e96bff3e0d45763b7b8a99e5040385fffb96816028352c255682"}, + {file = "billiard-3.3.0.23-cp3-none-win_amd64.whl", hash = "sha256:ccfe0419eb5e49f27ad35cf06e75360af903df6d576c66cb8073246d4e023e5c"}, + {file = "billiard-3.3.0.23-cp33-none-win32.whl", hash = "sha256:204e75d390ef8f839c30a93b696bd842c3941916e15921745d05edc2a83868ab"}, + {file = "billiard-3.3.0.23-cp33-none-win_amd64.whl", hash = "sha256:d4d2fed1a251ea58eed47b48db3778ebb92f5ff4407dc91869c6f41c3a9249d0"}, + {file = "billiard-3.3.0.23.tar.gz", hash = "sha256:692a2a5a55ee39a42bcb7557930e2541da85df9ea81c6e24827f63b80cd39d0b"}, +] +celery = [ + {file = "celery-3.1.25-py2.py3-none-any.whl", hash = "sha256:1954a224805f3835e5b6f5998ec9fe51db3413cc49e59fc720d314c7913427cf"}, + {file = "celery-3.1.25.tar.gz", hash = "sha256:6ced63033bc663e60c992564954dbb5c84c43899f7f1a04b739957350f6b55f3"}, +] +certifi = [ + {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, + {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, +] +cffi = [ + {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, + {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, + {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, + {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, + {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, + {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, + {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, + {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, + {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, + {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, + {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, + {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, + {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, + {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, + {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, + {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, + {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, + {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, + {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, + {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, + {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, + {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, + {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, + {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, + {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, + {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, + {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, + {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, +] +chardet = [ + {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, + {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +] +colorama = [ + {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, + {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, +] +django = [ + {file = "Django-1.11.29-py2.py3-none-any.whl", hash = "sha256:014e3392058d94f40569206a24523ce254d55ad2f9f46c6550b0fe2e4f94cf3f"}, + {file = "Django-1.11.29.tar.gz", hash = "sha256:4200aefb6678019a0acf0005cd14cfce3a5e6b9b90d06145fcdd2e474ad4329c"}, +] +django-cors-headers = [ + {file = "django-cors-headers-3.0.2.tar.gz", hash = "sha256:ebf3e2cf25aa6993b959a8e6a87828ebb3c8fe5bc3ec4a2d6e65f3b8d9b4212c"}, + {file = "django_cors_headers-3.0.2-py2.py3-none-any.whl", hash = "sha256:5b80bf0f8d7fc6e2bcb4f40781d5ff3661961bbf1982e52daec77241dea3b890"}, +] +django-decorator-include = [ + {file = "django-decorator-include-1.3.tar.gz", hash = "sha256:2dcbbb028723f242f2280d7c475cce59b69db967722ed80ccc9dc7729ca2e802"}, + {file = "django_decorator_include-1.3-py2.py3-none-any.whl", hash = "sha256:fd172a88de1dd38e19ddb0d91525ab7240139a3b11687bf1ea2eb775549fd073"}, +] +django-environ = [ + {file = "django-environ-0.4.5.tar.gz", hash = "sha256:6c9d87660142608f63ec7d5ce5564c49b603ea8ff25da595fd6098f6dc82afde"}, + {file = "django_environ-0.4.5-py2.py3-none-any.whl", hash = "sha256:c57b3c11ec1f319d9474e3e5a79134f40174b17c7cc024bbb2fad84646b120c4"}, +] +django-extensions = [ + {file = "django-extensions-1.6.7.tar.gz", hash = "sha256:7c33f1be6acf7414539cfdef2967bf6240d3c9317551b5d84622dff7824cd3c6"}, + {file = "django_extensions-1.6.7-py2.py3-none-any.whl", hash = "sha256:ebdfc329207231f63b5ccb591407aadbc1a524af752e52690f0646eb7ff52943"}, +] +django-filter = [ + {file = "django-filter-1.1.0.tar.gz", hash = "sha256:ec0ef1ba23ef95b1620f5d481334413700fb33f45cd76d56a63f4b0b1d76976a"}, + {file = "django_filter-1.1.0-py2.py3-none-any.whl", hash = "sha256:ea204242ea83790e1512c9d0d8255002a652a6f4986e93cee664f28955ba0c22"}, +] +django-guardian = [ + {file = "django-guardian-1.4.5.tar.gz", hash = "sha256:f327455402c35d94c9933e2a1595b89c9e029c7f8cb2a78411e884d1f1babb4d"}, +] +django-health-check = [ + {file = "django-health-check-2.4.0.tar.gz", hash = "sha256:d42b90c73aa5272ac04f92374f87e194ce5c83db918091fb09eaf6b3fa7c325a"}, +] +django-sortedm2m = [ + {file = "django-sortedm2m-1.1.1.tar.gz", hash = "sha256:d38d201da8593c94c8706f9ef30e3203bf0d352d6264abbb7babfbb112f86cb4"}, +] +django-templated-mail = [ + {file = "django-templated-mail-1.1.1.tar.gz", hash = "sha256:8db807effebb42a532622e2d142dfd453dafcd0d7794c4c3332acb90656315f9"}, + {file = "django_templated_mail-1.1.1-py3-none-any.whl", hash = "sha256:f7127e1e31d7cad4e6c4b4801d25814d4b8782627ead76f4a75b3b7650687556"}, +] +django-websocket-redis = [ + {file = "django-websocket-redis-0.5.2.tar.gz", hash = "sha256:7190dd7b6371c50e6d35e4456fbd1cfcf47b4c2ed01ed93058ef65d4e275a65e"}, +] +djangorestframework = [ + {file = "djangorestframework-3.6.4-py2.py3-none-any.whl", hash = "sha256:0f9bfbac702f3376dfb2db4971ad8af4e066bfa35393b1b85e085f7e8b91189a"}, + {file = "djangorestframework-3.6.4.tar.gz", hash = "sha256:de8ac68b3cf6dd41b98e01dcc92dc0022a5958f096eafc181a17fa975d18ca42"}, +] +djoser = [ + {file = "djoser-1.5.1-py3-none-any.whl", hash = "sha256:a9eaf1b172c40f14be82fd145bfc02de7b3470b085b53169755c2c08fb7bd0a2"}, + {file = "djoser-1.5.1.tar.gz", hash = "sha256:f311248eda5f14dcfe839b9481721a701aa9b67195b4e7606c234d476cb24cdf"}, +] +docutils = [ + {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, + {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, +] +gevent = [ + {file = "gevent-20.6.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b03890bbddbae5667f5baad517417056496ff5e92c3c7945b27cc08f55a9fcb2"}, + {file = "gevent-20.6.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1ea0d34cb78cdf37870be3bfb9330ebda89197bed9e048c14f4a90dec19a33e0"}, + {file = "gevent-20.6.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:73eb4cf3114fbb5dd801bd0b93941adfa2fa6d99e91976c20a121ea14b8b39b9"}, + {file = "gevent-20.6.2-cp27-cp27m-win32.whl", hash = "sha256:f41cc8e853ac2252bc58f6feabd74b8aae613e2d19097c5373463122f4dc08f0"}, + {file = "gevent-20.6.2-cp27-cp27m-win_amd64.whl", hash = "sha256:d3baff87d935a5eeffb0e4f7cd5ffe258d2430cd62aeee2e5396f85da07df435"}, + {file = "gevent-20.6.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7d8408854ce892f987305a0e9bf5c051f4ea29453665454396d6afb620c719b6"}, + {file = "gevent-20.6.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:ea2e4584950186b71d648bde6af40dae4d4c6f43db25a732ec056b27a7a83afe"}, + {file = "gevent-20.6.2-cp35-cp35m-win32.whl", hash = "sha256:c0f4340e40e0f9dfe93a52a12ddf5b1eeda9bbc89b99bf3b9b23acab0dfae0a4"}, + {file = "gevent-20.6.2-cp35-cp35m-win_amd64.whl", hash = "sha256:13c74d6784ef5ada2666abf2bb310d27a1d14291f7cac46148f336b19f714d40"}, + {file = "gevent-20.6.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:78bd94f6f2ac366155169df3507068f6381f2ad77625633189ce183f86a57597"}, + {file = "gevent-20.6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0b16dd85eddaf6acdad373ce90ed4da09ef466cbc5e0ee5932d13f099929e844"}, + {file = "gevent-20.6.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:a47556cac07e31b3cef8fd701599b3b1365961fe3736471f41807ffa27c5c848"}, + {file = "gevent-20.6.2-cp36-cp36m-win32.whl", hash = "sha256:bef18b8bd3b728240b9bbd699737216b793d6c97b482431f69dcbe328ad73692"}, + {file = "gevent-20.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d0a67a20ce325f6a2068e0bd9fbf83db8a5f5ced972ed8ac5c20079a7d98c7d1"}, + {file = "gevent-20.6.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:b17915b65b49a425115ddc3087484c81b1e47ce38c931d18bb14e453753e4d06"}, + {file = "gevent-20.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ebb8a545112110e3a6edf905ae1556b0538fc148c743aa7d8cfaebbbc23de31d"}, + {file = "gevent-20.6.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6c864b5604166ac8351e3128a1135b883b9e978fd24afbd75a249dcb42bc8ab5"}, + {file = "gevent-20.6.2-cp37-cp37m-win32.whl", hash = "sha256:e5ca5ee80a9d9e697c9fc22b4bbce9ad06870f83fc8e7774e5504892ef702476"}, + {file = "gevent-20.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:f2a02d9004ccb18edd9eaf6f25da9a7763de41a69754d5e4d872a8cbf8bd0b72"}, + {file = "gevent-20.6.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:354f932c284fa45826b32f42927d892096cce05671b50b3ff59528230217ad47"}, + {file = "gevent-20.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:67776cb33b638a3c61a0351d9d1e8f33a46b47de619e249de1159892f9ff035c"}, + {file = "gevent-20.6.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:68764aca061bbbbade43727e797f9c28042f6d90cca5fb6514ef726d43ab00ca"}, + {file = "gevent-20.6.2-cp38-cp38-win32.whl", hash = "sha256:0f3fbb1703b10609856e5dffb0e358bf5edf57e52dc7cd7226e3f8674fdc0a0f"}, + {file = "gevent-20.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:a18d8dd9bfa994a22f30adfa0563d80f0809140045c34f85535f422813d25855"}, + {file = "gevent-20.6.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:9527087984f1659be899b3300d5d61c7c5b01d8beae106aff5160316da8bc56f"}, + {file = "gevent-20.6.2-pp27-pypy_73-macosx_10_7_x86_64.whl", hash = "sha256:76ef4c6e3332e6f7278142d791b28695adfce39735900fccef2a0f1d894f6b36"}, + {file = "gevent-20.6.2-pp27-pypy_73-win32.whl", hash = "sha256:3cb2f6978615d52e4e4e667b035c11a7272bb68b14d119faf1b138164b2f354f"}, + {file = "gevent-20.6.2.tar.gz", hash = "sha256:a23c2abf08e851c988723f6a2996d495f513a2c0dc70f9956af03af8debdb5d1"}, +] +greenlet = [ + {file = "greenlet-0.4.16-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:80cb0380838bf4e48da6adedb0c7cd060c187bb4a75f67a5aa9ec33689b84872"}, + {file = "greenlet-0.4.16-cp27-cp27m-win32.whl", hash = "sha256:df7de669cbf21de4b04a3ffc9920bc8426cab4c61365fa84d79bf97401a8bef7"}, + {file = "greenlet-0.4.16-cp27-cp27m-win_amd64.whl", hash = "sha256:1429dc183b36ec972055e13250d96e174491559433eb3061691b446899b87384"}, + {file = "greenlet-0.4.16-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5ea034d040e6ab1d2ae04ab05a3f37dbd719c4dee3804b13903d4cc794b1336e"}, + {file = "greenlet-0.4.16-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c196a5394c56352e21cb7224739c6dd0075b69dd56f758505951d1d8d68cf8a9"}, + {file = "greenlet-0.4.16-cp35-cp35m-win32.whl", hash = "sha256:1000038ba0ea9032948e2156a9c15f5686f36945e8f9906e6b8db49f358e7b52"}, + {file = "greenlet-0.4.16-cp35-cp35m-win_amd64.whl", hash = "sha256:1b805231bfb7b2900a16638c3c8b45c694334c811f84463e52451e00c9412691"}, + {file = "greenlet-0.4.16-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e5db19d4a7d41bbeb3dd89b49fc1bc7e6e515b51bbf32589c618655a0ebe0bf0"}, + {file = "greenlet-0.4.16-cp36-cp36m-win32.whl", hash = "sha256:eac2a3f659d5f41d6bbfb6a97733bc7800ea5e906dc873732e00cebb98cec9e4"}, + {file = "greenlet-0.4.16-cp36-cp36m-win_amd64.whl", hash = "sha256:7eed31f4efc8356e200568ba05ad645525f1fbd8674f1e5be61a493e715e3873"}, + {file = "greenlet-0.4.16-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:682328aa576ec393c1872615bcb877cf32d800d4a2f150e1a5dc7e56644010b1"}, + {file = "greenlet-0.4.16-cp37-cp37m-win32.whl", hash = "sha256:3a35e33902b2e6079949feed7a2dafa5ac6f019da97bd255842bb22de3c11bf5"}, + {file = "greenlet-0.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b2a984bbfc543d144d88caad6cc7ff4a71be77102014bd617bd88cfb038727"}, + {file = "greenlet-0.4.16-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:d83c1d38658b0f81c282b41238092ed89d8f93c6e342224ab73fb39e16848721"}, + {file = "greenlet-0.4.16-cp38-cp38-win32.whl", hash = "sha256:e695ac8c3efe124d998230b219eb51afb6ef10524a50b3c45109c4b77a8a3a92"}, + {file = "greenlet-0.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:133ba06bad4e5f2f8bf6a0ac434e0fd686df749a86b3478903b92ec3a9c0c90b"}, + {file = "greenlet-0.4.16.tar.gz", hash = "sha256:6e06eac722676797e8fce4adb8ad3dc57a1bb3adfb0dd3fdf8306c055a38456c"}, +] +idna = [ + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, +] +imagesize = [ + {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, + {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, +] +jinja2 = [ + {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, + {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, +] +jsonfield = [ + {file = "jsonfield-1.0.0.tar.gz", hash = "sha256:5951d41c51a295df4d500e481abd7ed53464b3cc8920f71a7965fbdd179d1c68"}, +] +jsonschema = [ + {file = "jsonschema-2.5.1-py2.py3-none-any.whl", hash = "sha256:71e7b3bcf9fca408bcb65bb60892f375d3abdd2e4f296eeeb8fe0bbbfcde598e"}, + {file = "jsonschema-2.5.1.tar.gz", hash = "sha256:36673ac378feed3daa5956276a829699056523d7961027911f064b52255ead41"}, + {file = "jsonschema-2.5.1.zip", hash = "sha256:9088494da4c74497a7a27842ae4ca9c3355b5f7754121edc440463eaf020f079"}, +] +kombu = [ + {file = "kombu-3.0.37-py2.py3-none-any.whl", hash = "sha256:7ceab743e3e974f3e5736082e8cc514c009e254e646d6167342e0e192aee81a6"}, + {file = "kombu-3.0.37.tar.gz", hash = "sha256:e064a00c66b4d1058cd2b0523fb8d98c82c18450244177b6c0f7913016642650"}, +] +lxml = [ + {file = "lxml-4.5.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ee2be8b8f72a2772e72ab926a3bccebf47bb727bda41ae070dc91d1fb759b726"}, + {file = "lxml-4.5.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:fadd2a63a2bfd7fb604508e553d1cf68eca250b2fbdbd81213b5f6f2fbf23529"}, + {file = "lxml-4.5.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4f282737d187ae723b2633856085c31ae5d4d432968b7f3f478a48a54835f5c4"}, + {file = "lxml-4.5.1-cp27-cp27m-win32.whl", hash = "sha256:7fd88cb91a470b383aafad554c3fe1ccf6dfb2456ff0e84b95335d582a799804"}, + {file = "lxml-4.5.1-cp27-cp27m-win_amd64.whl", hash = "sha256:0790ddca3f825dd914978c94c2545dbea5f56f008b050e835403714babe62a5f"}, + {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9144ce36ca0824b29ebc2e02ca186e54040ebb224292072250467190fb613b96"}, + {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a636346c6c0e1092ffc202d97ec1843a75937d8c98aaf6771348ad6422e44bb0"}, + {file = "lxml-4.5.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f95d28193c3863132b1f55c1056036bf580b5a488d908f7d22a04ace8935a3a9"}, + {file = "lxml-4.5.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b26719890c79a1dae7d53acac5f089d66fd8cc68a81f4e4bd355e45470dc25e1"}, + {file = "lxml-4.5.1-cp35-cp35m-win32.whl", hash = "sha256:a9e3b8011388e7e373565daa5e92f6c9cb844790dc18e43073212bb3e76f7007"}, + {file = "lxml-4.5.1-cp35-cp35m-win_amd64.whl", hash = "sha256:2754d4406438c83144f9ffd3628bbe2dcc6d62b20dbc5c1ec4bc4385e5d44b42"}, + {file = "lxml-4.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:925baf6ff1ef2c45169f548cc85204433e061360bfa7d01e1be7ae38bef73194"}, + {file = "lxml-4.5.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a87dbee7ad9dce3aaefada2081843caf08a44a8f52e03e0a4cc5819f8398f2f4"}, + {file = "lxml-4.5.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:51bb4edeb36d24ec97eb3e6a6007be128b720114f9a875d6b370317d62ac80b9"}, + {file = "lxml-4.5.1-cp36-cp36m-win32.whl", hash = "sha256:c79e5debbe092e3c93ca4aee44c9a7631bdd407b2871cb541b979fd350bbbc29"}, + {file = "lxml-4.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b7462cdab6fffcda853338e1741ce99706cdf880d921b5a769202ea7b94e8528"}, + {file = "lxml-4.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06748c7192eab0f48e3d35a7adae609a329c6257495d5e53878003660dc0fec6"}, + {file = "lxml-4.5.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1aa7a6197c1cdd65d974f3e4953764eee3d9c7b67e3966616b41fab7f8f516b7"}, + {file = "lxml-4.5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:afb53edf1046599991fb4a7d03e601ab5f5422a5435c47ee6ba91ec3b61416a6"}, + {file = "lxml-4.5.1-cp37-cp37m-win32.whl", hash = "sha256:2d1ddce96cf15f1254a68dba6935e6e0f1fe39247de631c115e84dd404a6f031"}, + {file = "lxml-4.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:22c6d34fdb0e65d5f782a4d1a1edb52e0a8365858dafb1c08cb1d16546cf0786"}, + {file = "lxml-4.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c47a8a5d00060122ca5908909478abce7bbf62d812e3fc35c6c802df8fb01fe7"}, + {file = "lxml-4.5.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b77975465234ff49fdad871c08aa747aae06f5e5be62866595057c43f8d2f62c"}, + {file = "lxml-4.5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2b02c106709466a93ed424454ce4c970791c486d5fcdf52b0d822a7e29789626"}, + {file = "lxml-4.5.1-cp38-cp38-win32.whl", hash = "sha256:7eee37c1b9815e6505847aa5e68f192e8a1b730c5c7ead39ff317fde9ce29448"}, + {file = "lxml-4.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:d8d40e0121ca1606aa9e78c28a3a7d88a05c06b3ca61630242cded87d8ce55fa"}, + {file = "lxml-4.5.1.tar.gz", hash = "sha256:27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2"}, +] +m2r = [] +markupsafe = [ + {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, + {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, + {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, + {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, + {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, + {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, + {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, + {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, + {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, +] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +packaging = [ + {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, + {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, +] +psycopg2-binary = [ + {file = "psycopg2-binary-2.8.5.tar.gz", hash = "sha256:ccdc6a87f32b491129ada4b87a43b1895cf2c20fdb7f98ad979647506ffc41b6"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:96d3038f5bd061401996614f65d27a4ecb62d843eb4f48e212e6d129171a721f"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:08507efbe532029adee21b8d4c999170a83760d38249936038bd0602327029b5"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:b9a8b391c2b0321e0cd7ec6b4cfcc3dd6349347bd1207d48bcb752aa6c553a66"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27m-win32.whl", hash = "sha256:3286541b9d85a340ee4ed42732d15fc1bb441dc500c97243a768154ab8505bb5"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27m-win_amd64.whl", hash = "sha256:008da3ab51adc70a5f1cfbbe5db3a22607ab030eb44bcecf517ad11a0c2b3cac"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ba13346ff6d3eb2dca0b6fa0d8a9d999eff3dcd9b55f3a890f12b0b6362b2b38"}, + {file = "psycopg2_binary-2.8.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:c8830b7d5f16fd79d39b21e3d94f247219036b29b30c8270314c46bf8b732389"}, + {file = "psycopg2_binary-2.8.5-cp34-cp34m-win32.whl", hash = "sha256:51f7823f1b087d2020d8e8c9e6687473d3d239ba9afc162d9b2ab6e80b53f9f9"}, + {file = "psycopg2_binary-2.8.5-cp34-cp34m-win_amd64.whl", hash = "sha256:107d9be3b614e52a192719c6bf32e8813030020ea1d1215daa86ded9a24d8b04"}, + {file = "psycopg2_binary-2.8.5-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:930315ac53dc65cbf52ab6b6d27422611f5fb461d763c531db229c7e1af6c0b3"}, + {file = "psycopg2_binary-2.8.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6bb2dd006a46a4a4ce95201f836194eb6a1e863f69ee5bab506673e0ca767057"}, + {file = "psycopg2_binary-2.8.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:3939cf75fc89c5e9ed836e228c4a63604dff95ad19aed2bbf71d5d04c15ed5ce"}, + {file = "psycopg2_binary-2.8.5-cp35-cp35m-win32.whl", hash = "sha256:a20299ee0ea2f9cca494396ac472d6e636745652a64a418b39522c120fd0a0a4"}, + {file = "psycopg2_binary-2.8.5-cp35-cp35m-win_amd64.whl", hash = "sha256:cc30cb900f42c8a246e2cb76539d9726f407330bc244ca7729c41a44e8d807fb"}, + {file = "psycopg2_binary-2.8.5-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:40abc319f7f26c042a11658bf3dd3b0b3bceccf883ec1c565d5c909a90204434"}, + {file = "psycopg2_binary-2.8.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:702f09d8f77dc4794651f650828791af82f7c2efd8c91ae79e3d9fe4bb7d4c98"}, + {file = "psycopg2_binary-2.8.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d1a8b01f6a964fec702d6b6dac1f91f2b9f9fe41b310cbb16c7ef1fac82df06d"}, + {file = "psycopg2_binary-2.8.5-cp36-cp36m-win32.whl", hash = "sha256:17a0ea0b0eabf07035e5e0d520dabc7950aeb15a17c6d36128ba99b2721b25b1"}, + {file = "psycopg2_binary-2.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:e004db88e5a75e5fdab1620fb9f90c9598c2a195a594225ac4ed2a6f1c23e162"}, + {file = "psycopg2_binary-2.8.5-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:a34826d6465c2e2bbe9d0605f944f19d2480589f89863ed5f091943be27c9de4"}, + {file = "psycopg2_binary-2.8.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:cac918cd7c4c498a60f5d2a61d4f0a6091c2c9490d81bc805c963444032d0dab"}, + {file = "psycopg2_binary-2.8.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7b832d76cc65c092abd9505cc670c4e3421fd136fb6ea5b94efbe4c146572505"}, + {file = "psycopg2_binary-2.8.5-cp37-cp37m-win32.whl", hash = "sha256:bb0608694a91db1e230b4a314e8ed00ad07ed0c518f9a69b83af2717e31291a3"}, + {file = "psycopg2_binary-2.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:eb2f43ae3037f1ef5e19339c41cf56947021ac892f668765cd65f8ab9814192e"}, + {file = "psycopg2_binary-2.8.5-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:07cf82c870ec2d2ce94d18e70c13323c89f2f2a2628cbf1feee700630be2519a"}, + {file = "psycopg2_binary-2.8.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a69970ee896e21db4c57e398646af9edc71c003bc52a3cc77fb150240fefd266"}, + {file = "psycopg2_binary-2.8.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7036ccf715925251fac969f4da9ad37e4b7e211b1e920860148a10c0de963522"}, + {file = "psycopg2_binary-2.8.5-cp38-cp38-win32.whl", hash = "sha256:8f74e631b67482d504d7e9cf364071fc5d54c28e79a093ff402d5f8f81e23bfa"}, + {file = "psycopg2_binary-2.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:fa466306fcf6b39b8a61d003123d442b23707d635a5cb05ac4e1b62cc79105cd"}, +] +pybagit = [] +pycparser = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] +pygments = [ + {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, + {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, +] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, +] +python-magic = [] +pytz = [ + {file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"}, + {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, +] +redis = [ + {file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"}, + {file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"}, +] +requests = [ + {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"}, + {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"}, +] +six = [ + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, + {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, +] +sphinx = [ + {file = "Sphinx-3.1.2-py3-none-any.whl", hash = "sha256:97dbf2e31fc5684bb805104b8ad34434ed70e6c588f6896991b2fdfd2bef8c00"}, + {file = "Sphinx-3.1.2.tar.gz", hash = "sha256:b9daeb9b39aa1ffefc2809b43604109825300300b987a24f45976c001ba1a8fd"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-1.0.3.tar.gz", hash = "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"}, + {file = "sphinxcontrib_htmlhelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.4.tar.gz", hash = "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc"}, + {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"}, +] +urllib3 = [ + {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"}, + {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"}, +] +"zope.event" = [ + {file = "zope.event-4.4-py2.py3-none-any.whl", hash = "sha256:d8e97d165fd5a0997b45f5303ae11ea3338becfe68c401dd88ffd2113fe5cae7"}, + {file = "zope.event-4.4.tar.gz", hash = "sha256:69c27debad9bdacd9ce9b735dad382142281ac770c4a432b533d6d65c4614bcf"}, +] +"zope.interface" = [ + {file = "zope.interface-5.1.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:645a7092b77fdbc3f68d3cc98f9d3e71510e419f54019d6e282328c0dd140dcd"}, + {file = "zope.interface-5.1.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:d1fe9d7d09bb07228650903d6a9dc48ea649e3b8c69b1d263419cc722b3938e8"}, + {file = "zope.interface-5.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a744132d0abaa854d1aad50ba9bc64e79c6f835b3e92521db4235a1991176813"}, + {file = "zope.interface-5.1.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:461d4339b3b8f3335d7e2c90ce335eb275488c587b61aca4b305196dde2ff086"}, + {file = "zope.interface-5.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:269b27f60bcf45438e8683269f8ecd1235fa13e5411de93dae3b9ee4fe7f7bc7"}, + {file = "zope.interface-5.1.0-cp27-cp27m-win32.whl", hash = "sha256:6874367586c020705a44eecdad5d6b587c64b892e34305bb6ed87c9bbe22a5e9"}, + {file = "zope.interface-5.1.0-cp27-cp27m-win_amd64.whl", hash = "sha256:8149ded7f90154fdc1a40e0c8975df58041a6f693b8f7edcd9348484e9dc17fe"}, + {file = "zope.interface-5.1.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:0103cba5ed09f27d2e3de7e48bb320338592e2fabc5ce1432cf33808eb2dfd8b"}, + {file = "zope.interface-5.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:b0becb75418f8a130e9d465e718316cd17c7a8acce6fe8fe07adc72762bee425"}, + {file = "zope.interface-5.1.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:fb55c182a3f7b84c1a2d6de5fa7b1a05d4660d866b91dbf8d74549c57a1499e8"}, + {file = "zope.interface-5.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4f98f70328bc788c86a6a1a8a14b0ea979f81ae6015dd6c72978f1feff70ecda"}, + {file = "zope.interface-5.1.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:af2c14efc0bb0e91af63d00080ccc067866fb8cbbaca2b0438ab4105f5e0f08d"}, + {file = "zope.interface-5.1.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f68bf937f113b88c866d090fea0bc52a098695173fc613b055a17ff0cf9683b6"}, + {file = "zope.interface-5.1.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d7804f6a71fc2dda888ef2de266727ec2f3915373d5a785ed4ddc603bbc91e08"}, + {file = "zope.interface-5.1.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:74bf0a4f9091131de09286f9a605db449840e313753949fe07c8d0fe7659ad1e"}, + {file = "zope.interface-5.1.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:ba4261c8ad00b49d48bbb3b5af388bb7576edfc0ca50a49c11dcb77caa1d897e"}, + {file = "zope.interface-5.1.0-cp35-cp35m-win32.whl", hash = "sha256:ebb4e637a1fb861c34e48a00d03cffa9234f42bef923aec44e5625ffb9a8e8f9"}, + {file = "zope.interface-5.1.0-cp35-cp35m-win_amd64.whl", hash = "sha256:911714b08b63d155f9c948da2b5534b223a1a4fc50bb67139ab68b277c938578"}, + {file = "zope.interface-5.1.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:e74671e43ed4569fbd7989e5eecc7d06dc134b571872ab1d5a88f4a123814e9f"}, + {file = "zope.interface-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b1d2ed1cbda2ae107283befd9284e650d840f8f7568cb9060b5466d25dc48975"}, + {file = "zope.interface-5.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ef739fe89e7f43fb6494a43b1878a36273e5924869ba1d866f752c5812ae8d58"}, + {file = "zope.interface-5.1.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:eb9b92f456ff3ec746cd4935b73c1117538d6124b8617bc0fe6fda0b3816e345"}, + {file = "zope.interface-5.1.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:dcefc97d1daf8d55199420e9162ab584ed0893a109f45e438b9794ced44c9fd0"}, + {file = "zope.interface-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:f40db0e02a8157d2b90857c24d89b6310f9b6c3642369852cdc3b5ac49b92afc"}, + {file = "zope.interface-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:14415d6979356629f1c386c8c4249b4d0082f2ea7f75871ebad2e29584bd16c5"}, + {file = "zope.interface-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5e86c66a6dea8ab6152e83b0facc856dc4d435fe0f872f01d66ce0a2131b7f1d"}, + {file = "zope.interface-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:39106649c3082972106f930766ae23d1464a73b7d30b3698c986f74bf1256a34"}, + {file = "zope.interface-5.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8cccf7057c7d19064a9e27660f5aec4e5c4001ffcf653a47531bde19b5aa2a8a"}, + {file = "zope.interface-5.1.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:562dccd37acec149458c1791da459f130c6cf8902c94c93b8d47c6337b9fb826"}, + {file = "zope.interface-5.1.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:da2844fba024dd58eaa712561da47dcd1e7ad544a257482392472eae1c86d5e5"}, + {file = "zope.interface-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:1ae4693ccee94c6e0c88a4568fb3b34af8871c60f5ba30cf9f94977ed0e53ddd"}, + {file = "zope.interface-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dd98c436a1fc56f48c70882cc243df89ad036210d871c7427dc164b31500dc11"}, + {file = "zope.interface-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b87ed2dc05cb835138f6a6e3595593fea3564d712cb2eb2de963a41fd35758c"}, + {file = "zope.interface-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:558a20a0845d1a5dc6ff87cd0f63d7dac982d7c3be05d2ffb6322a87c17fa286"}, + {file = "zope.interface-5.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b726194f938791a6691c7592c8b9e805fc6d1b9632a833b9c0640828cd49cbc"}, + {file = "zope.interface-5.1.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:60a207efcd8c11d6bbeb7862e33418fba4e4ad79846d88d160d7231fcb42a5ee"}, + {file = "zope.interface-5.1.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b054eb0a8aa712c8e9030065a59b5e6a5cf0746ecdb5f087cca5ec7685690c19"}, + {file = "zope.interface-5.1.0-cp38-cp38-win32.whl", hash = "sha256:27d287e61639d692563d9dab76bafe071fbeb26818dd6a32a0022f3f7ca884b5"}, + {file = "zope.interface-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:a5f8f85986197d1dd6444763c4a15c991bfed86d835a1f6f7d476f7198d5f56a"}, + {file = "zope.interface-5.1.0.tar.gz", hash = "sha256:40e4c42bd27ed3c11b2c983fecfb03356fae1209de10686d03c02c8696a1d90e"}, +] diff --git a/rodan-main/code/pyproject.toml b/rodan-main/code/pyproject.toml new file mode 100644 index 000000000..bc808669e --- /dev/null +++ b/rodan-main/code/pyproject.toml @@ -0,0 +1,36 @@ +[tool.poetry] +name = "rodan" +version = "1.2.0" +description = "" +authors = ["Your Name "] +license = "MIT" + +[tool.poetry.dependencies] +python = "^3.7" +celery = "3.1.25" +django = "1.11.29" +django-cors-headers = "3.0.2" +django-decorator-include = "1.3" +django-environ = "^0.4.5" +django-extensions = "1.6.7" +django-filter = "1.1.0" +django-guardian = "1.4.5" +django-health-check = "2.4.0" +django-sortedm2m = "1.1.1" +django-websocket-redis = "0.5.2" +djangorestframework = "3.6.4" +djoser = "1.5.1" +jsonfield = "1.0.0" +jsonschema = "2.5.1" +lxml = "4.5.1" +pybagit = {git = "https://github.com/deepio/pybagit"} +python-magic = {git = "https://github.com/ahupp/python-magic.git", rev = "0e977c98649b4ed4533a7700fbc5fea6895bfe71"} +psycopg2-binary = "^2.8.5" + +[tool.poetry.dev-dependencies] +sphinx = "^3.1.2" +m2r = {git = "https://github.com/crossnox/m2r", branch = "dev"} + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/rodan-main/code/readme.md b/rodan-main/code/readme.md new file mode 100644 index 000000000..2c5043a09 --- /dev/null +++ b/rodan-main/code/readme.md @@ -0,0 +1,14 @@ + + +Please visit http://ddmal.github.io/Rodan/ for User Documentation. + +![GitHub release](https://img.shields.io/github/release/ddmal/rodan) ![GitHub pull requests](https://img.shields.io/github/issues-pr/ddmal/rodan) ![GitHub issues](https://img.shields.io/github/issues/ddmal/rodan) + +To rebuild the developer documentation locally, please install the dependencies with [Python Poetry](https://python-poetry.org/) +- `poetry install` + +Travel to the `docs` folder +- `cd docs` + +Build using the Makefile +- `make html` \ No newline at end of file diff --git a/rodan-main/code/requirements.txt b/rodan-main/code/requirements.txt new file mode 100644 index 000000000..4f00d6271 --- /dev/null +++ b/rodan-main/code/requirements.txt @@ -0,0 +1,56 @@ +backports.ssl-match-hostname==3.4.0.2 +celery==4.4.7 +certifi==14.05.14 +django-cors-headers==3.0.2 +django-decorator-include==1.3 +django-environ==0.4.5 +django-extensions==1.6.7 +django-filter==1.1.0 +django-guardian==1.4.5 +django-health-check==2.4.0 +django-sortedm2m==1.1.1 +django-websocket-redis==0.5.2 +Django==1.11.29 +djoser==1.5.1 +djangorestframework==3.6.4 +flower==0.9.3 +gevent==1.3.6 +gnureadline==6.3.3 +gunicorn==19.10.0 +jsonfield==1.0.0 +jsonschema==2.5.1 +lxml==4.6.3 +Markdown==2.5.1 +mimeparse==0.1.3 +model-mommy==1.6.0 +pathlib2==2.3.6 +Pillow==6.2.2; python_version < "3.4" +protobuf==3.17.3 +psycopg2==2.8.4 +pybagit==1.5.0; python_version < '3.0' +-e git+https://github.com/deepio/pybagit.git@4eea813148bc590896000f57cde35fb86443d2f4#egg=pybagit ; python_version >= '3.6' +pyparsing==2.0.3 +pypng==0.0.18 +python-dateutil==2.5 +python-magic==0.4.22 +PyYAML==5.4 +readline==6.2.4.1 +redis==2.10.3 +uWSGI==2.0.18 +Werkzeug==1.0.1 + +# pil_rodan +Pillow==8.2.0; python_version > "3.4" + +# interactive_classifier + +# pixel_wrapper +numpy==1.16.6; python_version < "3.4" +opencv-python==4.2.0.32; python_version < "3.4" + +# text_alignment +#numpy==1.17.3; python_version > "3.4" +#tensorflow==2.3.2; python_version > "3.4" +#scikit-image==0.15.0; python_version > "3.4" +#calamari-ocr==1.0.5; python_version > "3.4" +#Unidecode==1.0.22; python_version > "3.4" diff --git a/rodan/__init__.py b/rodan-main/code/rodan/__init__.py similarity index 89% rename from rodan/__init__.py rename to rodan-main/code/rodan/__init__.py index bbbeb87b0..c5f5d95a2 100644 --- a/rodan/__init__.py +++ b/rodan-main/code/rodan/__init__.py @@ -17,5 +17,5 @@ # Get version: import rodan; rodan.__version__ # Version numbers also appear in the API. __title__ = "Rodan" -__version__ = "1.3.0" -__copyright__ = "Copyright 2011-2020 Distributed Digital Music Archives & Libraries Lab" +__version__ = "1.5.1" +__copyright__ = "Copyright 2011-2021 Distributed Digital Music Archives & Libraries Lab" diff --git a/rodan/admin/__init__.py b/rodan-main/code/rodan/admin/__init__.py similarity index 100% rename from rodan/admin/__init__.py rename to rodan-main/code/rodan/admin/__init__.py diff --git a/rodan/admin/admin.py b/rodan-main/code/rodan/admin/admin.py similarity index 100% rename from rodan/admin/admin.py rename to rodan-main/code/rodan/admin/admin.py diff --git a/rodan/admin/helpers.py b/rodan-main/code/rodan/admin/helpers.py similarity index 100% rename from rodan/admin/helpers.py rename to rodan-main/code/rodan/admin/helpers.py diff --git a/rodan/celery.py b/rodan-main/code/rodan/celery.py similarity index 84% rename from rodan/celery.py rename to rodan-main/code/rodan/celery.py index 67cf65321..8dd3592c5 100644 --- a/rodan/celery.py +++ b/rodan-main/code/rodan/celery.py @@ -5,11 +5,11 @@ from django.conf import settings from celery import Celery -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rodan.settings') +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rodan.settings") django.setup() -app = Celery('rodan') -app.config_from_object('django.conf:settings') +app = Celery("rodan") +app.config_from_object("django.conf:settings") app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @@ -24,7 +24,6 @@ ) from rodan.jobs.master_task import master_task # noqa - # Core Rodan Tasks app.tasks.register(create_resource()) app.tasks.register(create_workflowrun()) diff --git a/rodan/constants.py b/rodan-main/code/rodan/constants.py similarity index 100% rename from rodan/constants.py rename to rodan-main/code/rodan/constants.py diff --git a/rodan/exceptions.py b/rodan-main/code/rodan/exceptions.py similarity index 100% rename from rodan/exceptions.py rename to rodan-main/code/rodan/exceptions.py diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/.gitignore b/rodan-main/code/rodan/jobs/Calvo_classifier/.gitignore new file mode 100644 index 000000000..13bfa9708 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/.gitignore @@ -0,0 +1,8 @@ +*.pyc + +/.DS_Store + +# ignore emacs autosave file +*~ + +.DS_Store \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_BackgroundForNeumes.png b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_BackgroundForNeumes.png new file mode 100644 index 000000000..2a54b6792 Binary files /dev/null and b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_BackgroundForNeumes.png differ diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_Neumes.png b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_Neumes.png new file mode 100644 index 000000000..ee2026f13 Binary files /dev/null and b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_Neumes.png differ diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_SelectedRegion.png b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_SelectedRegion.png new file mode 100644 index 000000000..e501f4fd8 Binary files /dev/null and b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/042v_SelectedRegion.png differ diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/Images/Halifax_Folio_42v.png b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/Halifax_Folio_42v.png new file mode 100644 index 000000000..368cb200a Binary files /dev/null and b/rodan-main/code/rodan/jobs/Calvo_classifier/Images/Halifax_Folio_42v.png differ diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/LICENSE b/rodan-main/code/rodan/jobs/Calvo_classifier/LICENSE new file mode 100644 index 000000000..ae9072a19 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2017-2021 Alex Daigle, Juliette Regimbal, Gabriel Vigliensoni, +Eric Han Liu, Jorge Calvo Zaragoza, Martha E. Thomae + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/README.md b/rodan-main/code/rodan/jobs/Calvo_classifier/README.md new file mode 100644 index 000000000..3c6a81f4d --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/README.md @@ -0,0 +1,42 @@ +# Calvo-classifier + +Repository of the Rodan wrapper for Calvo classifier + +# Rodan Jobs definition +This repository includes the following Rodan Jobs: +- `Pixelwise Analysis of Music Document` in **calvo_classifier.py** +- `Training model for Pixelwise Analysis of Music Document` in **calvo_trainer.py** +- `Fast Pixelwise Analysis of Music Document` in **fast_calvo_classifier.py** + - Available in the **python3** Rodan queue. +- `Training model for Patchwise Analysis of Music Document` in **fast_calvo_trainer.py** + - Available in the **python3** Rodan queue. + +# Installation Dependencies + +## Python dependencies: + + * h5py (2.7.0) + * html5lib (0.9999999) + * Keras (2.0.5) + * numpy (1.15.1) + * scipy (0.19.1) + * setuptools (36.0.1) + * six (1.10.0) + * Tensorflow (1.5) + * opencv-python (3.2.0.7) + +## Keras configuration + +Calvo's classifier needs *Keras* and *TensorFlow* to be installed. It can be easily done through **pip**. + +*Keras* works over both Theano and Tensorflow, so after the installation check **~/.keras/keras.json** so that it looks like: + +~~~ +{ + "image_dim_ordering": "tf", + "epsilon": 1e-07, + "floatx": "float32", + "backend": "tensorflow" +} +~~~ + diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/__init__.py b/rodan-main/code/rodan/jobs/Calvo_classifier/__init__.py new file mode 100644 index 000000000..26354c989 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/__init__.py @@ -0,0 +1,12 @@ +import rodan +__version__ = "1.2.3" + +import logging +logger = logging.getLogger('rodan') + +from rodan.jobs import module_loader + +module_loader('rodan.jobs.Calvo_classifier.calvo_classifier') +module_loader('rodan.jobs.Calvo_classifier.calvo_trainer') +module_loader('rodan.jobs.Calvo_classifier.fast_calvo_classifier') +module_loader('rodan.jobs.Calvo_classifier.fast_calvo_trainer') diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_classifier.py b/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_classifier.py new file mode 100755 index 000000000..26d5085e8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_classifier.py @@ -0,0 +1,99 @@ +#----------------------------------------------------------------------------- +# Program Name: calvo_classifier.py +# Program Description: Rodan wrapper for Calvo's classifier +#----------------------------------------------------------------------------- + +import cv2 +import numpy as np +import os + +from rodan.jobs.base import RodanTask +from . import recognition_engine as recognition + + +"""Wrap Calvo classifier in Rodan.""" + +class CalvoClassifier(RodanTask): + name = "Pixelwise Analysis of Music Document" + author = "Jorge Calvo-Zaragoza, Gabriel Vigliensoni, and Ichiro Fujinaga" + description = "Given a pre-trained Convolutional neural network, the job performs a pixelwise analysis of music document images." + enabled = True + category = "OMR - Layout analysis" + interactive = False + + settings = { + 'title': 'Feature window', + 'job_queue': 'GPU', + 'type': 'object', + 'properties': { + 'Vertical span': { + 'type': 'integer', + 'minimum': 1, + 'default': 25 + }, + 'Horizontal span': { + 'type': 'integer', + 'minimum': 1, + 'default': 25 + } + } + } + + input_port_types = ( + {'name': 'Image', 'minimum': 1, 'maximum': 1, 'resource_types': lambda mime: mime.startswith('image/')}, + {'name': 'Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5'] }, + ) + output_port_types = ( + {'name': 'Background', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Music symbol', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Staff lines', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Text', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']} + ) + + """ + Entry point + """ + def run_my_task(self, inputs, settings, outputs): + # Ports + image_filepath = inputs['Image'][0]['resource_path'] + model_filepath = inputs['Model'][0]['resource_path'] + + # Settings + vspan = settings['Vertical span'] + hspan = settings['Horizontal span'] + + # Process + image = cv2.imread(image_filepath,True) + + analysis = recognition.process_image(image,model_filepath,vspan,hspan) + + # Let user define the number of labels? + for label in range(0,4): + lower_range = np.array(label, dtype=np.uint8) + upper_range = np.array(label, dtype=np.uint8) + mask = cv2.inRange(analysis, lower_range, upper_range) + + original_masked = cv2.bitwise_and(image,image,mask = mask) + original_masked[mask == 0] = (255, 255, 255) + + # Alpha = 0 when background + alpha_channel = np.ones(mask.shape, dtype=mask.dtype)*255 + alpha_channel[mask == 0] = 0 + b_channel, g_channel, r_channel = cv2.split(original_masked) + original_masked_alpha = cv2.merge((b_channel, g_channel, r_channel, alpha_channel)) + + if label == 0: + port = 'Background' + elif label == 1: + port = 'Music symbol' + elif label == 2: + port = 'Staff lines' + elif label == 3: + port = 'Text' + + if port in outputs: + cv2.imwrite(outputs[port][0]['resource_path']+'.png',original_masked_alpha) + os.rename(outputs[port][0]['resource_path']+'.png',outputs[port][0]['resource_path']) + + + return True diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_trainer.py b/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_trainer.py new file mode 100644 index 000000000..8dbc5a077 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/calvo_trainer.py @@ -0,0 +1,132 @@ +# ----------------------------------------------------------------------------- +# Program Name: calvo_trainer.py +# Program Description: Rodan wrapper for Calvo's classifier training +# ----------------------------------------------------------------------------- + +import cv2 +import numpy as np +import os + +from rodan.jobs.base import RodanTask +from . import training_engine as training + +"""Wrap Calvo classifier training in Rodan.""" + + +class CalvoTrainer(RodanTask): + name = "Training model for Pixelwise Analysis of Music Document" + author = "Jorge Calvo-Zaragoza, Gabriel Vigliensoni, and Ichiro Fujinaga" + description = "The job performs the training of a neural network model for the pixelwise analysis of music document images." + enabled = True + category = "OMR - Layout analysis" + interactive = False + + settings = { + 'title': 'Training parameters', + 'job_queue': 'GPU', + 'type': 'object', + 'properties': { + 'Maximum number of samples per class': { + 'type': 'integer', + 'minimum': 1, + 'default': 50 + }, + 'Maximum number of training epochs': { + 'type': 'integer', + 'minimum': 1, + 'default': 5 + }, + 'Vertical span': { + 'type': 'integer', + 'minimum': 1, + 'default': 25 + }, + 'Horizontal span': { + 'type': 'integer', + 'minimum': 1, + 'default': 25 + } + } + } + + input_port_types = ( + {'name': 'Image', 'minimum': 1, 'maximum': 1, 'resource_types': lambda mime: mime.startswith('image/')}, + {'name': 'rgba PNG - Background layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Music symbol layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Staff lines layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Text', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Selected regions', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']} + ) + + output_port_types = ( + {'name': 'Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + ) + + + """ + How it works: + - Layers are processed to create a categorical ground-truth: + - Matrix with the same shape as the original input + - Each cell contains a single categorical value + - When no information is known about a pixel, it is indicated as -1 + - Input and categorical images are used to call the training engine + - The output port is also passed in order to ensure the availability of the destination + - The training engine returns saves the model (+'.hdf5'), and return status + - Because of how Rodan works, the path is renamed to the exact output port (-'.hdf5') + """ + def run_my_task(self, inputs, settings, outputs): + # Ports + input_image = cv2.imread(inputs['Image'][0]['resource_path'], True) # 3-channel + background = cv2.imread(inputs['rgba PNG - Background layer'][0]['resource_path'], cv2.IMREAD_UNCHANGED) # 4-channel + notes = cv2.imread(inputs['rgba PNG - Music symbol layer'][0]['resource_path'], cv2.IMREAD_UNCHANGED) # 4-channel + lines = cv2.imread(inputs['rgba PNG - Staff lines layer'][0]['resource_path'], cv2.IMREAD_UNCHANGED) # 4-channel + text = cv2.imread(inputs['rgba PNG - Text'][0]['resource_path'], cv2.IMREAD_UNCHANGED) # 4-channel + regions = cv2.imread(inputs['rgba PNG - Selected regions'][0]['resource_path'], cv2.IMREAD_UNCHANGED) # 4-channel + + # Settings + vspan = settings['Vertical span'] + hspan = settings['Horizontal span'] + max_samples_per_class = settings['Maximum number of samples per class'] + max_number_of_epochs = settings['Maximum number of training epochs'] + + # Create categorical ground-truth + regions_mask = (regions[:, :, 3] == 255) + + notes_mask = (notes[:, :, 3] == 255) + notes_mask = np.logical_and(notes_mask, regions_mask) # restrict layer to only the notes in the selected regions + + lines_mask = (lines[:, :, 3] == 255) + lines_mask = np.logical_and(lines_mask, regions_mask) # restrict layer to only the staff lines in the selected regions + + text_mask = (text[:, :, 3] == 255) + text_mask = np.logical_and(text_mask, regions_mask) # restrict layer to only the text in the selected regions + + background_mask = (background[:, :, 3] == 255) # background is already restricted to the selected regions (based on Pixel.js' behaviour) + + gt = np.ones((background.shape[0],background.shape[1]), 'uint8')*-1 + gt += (background_mask*1 + notes_mask*2 + lines_mask*3 + text_mask*4) # -> -1 or 0,1,2,3 + ''' + labeled = background_mask + notes_mask + lines_mask + text_mask + + for row in range(gt.shape[0]): + for col in range(gt.shape[1]): + if labeled[row][col]: + # Single category per pixel is assumed + gt[row][col] = (background_mask[row][col]*0 + + notes_mask[row][col]*1 + + lines_mask[row][col]*2 + + text_mask[row][col]*3) + ''' + + output_model_path = outputs['Model'][0]['resource_path'] + + status = training.train_model(input_image,gt, + hspan,vspan, + output_model_path=output_model_path + '.hdf5', + max_samples_per_class=max_samples_per_class, + epochs=max_number_of_epochs) + + print('Finishing the job') + os.rename(output_model_path + '.hdf5', output_model_path) + + return True diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_classifier.py b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_classifier.py new file mode 100755 index 000000000..066dc9f2d --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_classifier.py @@ -0,0 +1,201 @@ +#----------------------------------------------------------------------------- +# Program Name: calvo_classifier.py +# Program Description: Rodan wrapper for Calvo's classifier +#----------------------------------------------------------------------------- + +# Core +import collections +import logging +# import json +import os +import sys + +# Third-party +from celery.utils.log import get_task_logger +import cv2 +from django.conf import settings as rodan_settings +import numpy as np + +# Project +from rodan.celery import app +from rodan.jobs.base import RodanTask +from rodan.models import Input +from . import recognition_engine as recognition + +"""Wrap Fast Calvo classifier in Rodan.""" + +logger = get_task_logger(__name__) + + +class FastCalvoClassifier(RodanTask): + name = "Fast Pixelwise Analysis of Music Document" + author = "Jorge Calvo-Zaragoza, Gabriel Vigliensoni, and Ichiro Fujinaga" + description = "Given a pre-trained Convolutional neural network, the job performs a (fast) pixelwise analysis of music document images." + enabled = True + category = "OMR - Layout analysis" + interactive = False + + settings = { + 'title': 'Parameters', + 'type': 'object', + 'job_queue': 'GPU', + 'properties': { + 'Height': { + 'type': 'integer', + 'minimum': 1, + 'default': 256 + }, + 'Width': { + 'type': 'integer', + 'minimum': 1, + 'default': 256 + }, + 'Threshold': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 100, + 'default': 50 + } + }, + } + + input_port_types = ( + {'name': 'Image', 'minimum': 1, 'maximum': 100, 'resource_types': lambda mime: mime.startswith('image/')}, + {'name': 'Background model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + # We did not go this route because it would be more difficult for the user to track layers. + # {'name': 'Adjustable models', 'minimum': 1, 'maximum': 10, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 0', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 1', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 2', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 3', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 4', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 5', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 6', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 7', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 8', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 9', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + ) + output_port_types = ( + {'name': 'Log File', 'minimum': 0, 'maximum': 1, 'resource_types': ['text/plain']}, + {'name': 'Background', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + # We did not go this route because it would be more difficult for the user to track layers + # {'name': 'Layers', 'minimum': 1, 'maximum': 10, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 0', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 1', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 2', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 3', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 4', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 5', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 6', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 7', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 8', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'Layer 9', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + ) + + """ + Entry point + """ + def run_my_task(self, inputs, settings, outputs): + oldouts = sys.stdout, sys.stderr + if 'Log File' in outputs and len(outputs['Log File']) > 0: + handler = logging.FileHandler(outputs['Log File'][0]['resource_path']) + handler.setFormatter( + logging.Formatter('%(asctime)s - %(name)s - %(message)s') + ) + logger.addHandler(handler) + try: + # Settings + height = settings['Height'] + width = settings['Width'] + threshold = settings['Threshold'] + rlevel = app.conf.CELERY_REDIRECT_STDOUTS_LEVEL + app.log.redirect_stdouts_to_logger(logger, rlevel) + + # Inner configuration + mode = 'logical' + + # Fail early if the number of ports doesn't match. + input_ports = len([x for x in inputs if x[:5] == 'Model']) + output_ports = len([x for x in outputs if x[:5] == 'Layer']) + if input_ports != output_ports: + raise Exception( + 'The number of input layers "Model" does not match the number of' + ' output "Layer"' + ) + + # Ports + background_model = inputs['Background model'][0]['resource_path'] + model_paths = [background_model] + + # Populate optional ports + for i in range(input_ports): + model_paths += [inputs['Model %d' % i][0]['resource_path']] + + # Simulate a switch statement, instead of a series of ifs + switch = { + 0: 'Background', + 1: 'Layer 0', + 2: 'Layer 1', + 3: 'Layer 2', + 4: 'Layer 3', + 5: 'Layer 4', + 6: 'Layer 5', + 7: 'Layer 6', + 8: 'Layer 7', + 9: 'Layer 8', + 10: 'Layer 9', + } + + # status = { + # "inputs": inputs, + # "outputs": outputs, + # "input_ports": input_ports, + # "output_ports": output_ports, + # "input_": [x for x in inputs if x[:5] == "Model"], + # "output_": [x for x in outputs if x[:5] == "Layer"], + # "len_model_paths": len(model_paths), + # "model_paths": model_paths, + # "ports": [] + # } + + # Image input is a list of images, you can classify a list of images and this iterates on each image. + for idx, _ in enumerate(inputs['Image']): + + # Process + image_filepath = inputs['Image'][idx]['resource_path'] + image = cv2.imread(image_filepath, 1) + analyses = recognition.process_image_msae(image, model_paths, height, width, mode = mode) + + for id_label, _ in enumerate(model_paths): + if mode == 'masks': + mask = ((analyses[id_label] > (threshold / 100.0)) * 255).astype('uint8') + elif mode == 'logical': + label_range = np.array(id_label, dtype=np.uint8) + mask = cv2.inRange(analyses, label_range, label_range) + + original_masked = cv2.bitwise_and(image, image, mask = mask) + original_masked[mask == 0] = (255, 255, 255) + + # Alpha = 0 when background + alpha_channel = np.ones(mask.shape, dtype=mask.dtype) * 255 + alpha_channel[mask == 0] = 0 + b_channel, g_channel, r_channel = cv2.split(original_masked) + original_masked_alpha = cv2.merge((b_channel, g_channel, r_channel, alpha_channel)) + + # status["ports"].append( + # { + # "switch": switch[id_label], + # "path": outputs[switch[id_label]][idx]['resource_path'], + # } + # ) + if switch[id_label] in outputs: + cv2.imwrite(outputs[switch[id_label]][idx]['resource_path']+'.png', original_masked_alpha) + os.rename(outputs[switch[id_label]][idx]['resource_path']+'.png', outputs[switch[id_label]][idx]['resource_path']) + + # raise Exception(json.dumps(status, indent=2)) + return True + finally: + sys.stdout, sys.stderr = oldouts + + def my_error_information(self, exc, traceback): + pass diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_trainer.py b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_trainer.py new file mode 100644 index 000000000..5860ee092 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_calvo_trainer.py @@ -0,0 +1,240 @@ +# ----------------------------------------------------------------------------- +# Program Name: calvo_trainer.py +# Program Description: Rodan wrapper for Fast Calvo's classifier training +# ----------------------------------------------------------------------------- + +# Core +import logging +import sys + +# Third-party +from celery.utils.log import get_task_logger + +# Project +from rodan.celery import app +from rodan.jobs.base import RodanTask +from rodan.jobs.Calvo_classifier.fast_trainer_lib import CalvoTrainer + +"""Wrap Patchwise (Fast) Calvo classifier training in Rodan.""" + +logger = get_task_logger(__name__) + + +class FastCalvoTrainer(RodanTask): + name = "Training model for Patchwise Analysis of Music Document" + author = "Jorge Calvo-Zaragoza, Francisco J. Castellanos, Gabriel Vigliensoni, and Ichiro Fujinaga" + description = "The job performs the training of many Selection Auto-Encoder model for the pixelwise analysis of music document images." + enabled = True + category = "OMR - Layout analysis" + interactive = False + + settings = { + "title": "Training parameters", + "type": "object", + "properties": { + "Batch Size": { + "type": "integer", + "minimum": 1, + "default": 16, + "maximum": 64, + }, + "Maximum number of training epochs": { + "type": "integer", + "minimum": 1, + "default": 50, + }, + "Maximum number of samples per label": { + "type": "integer", + "minimum": 100, + "default": 2000, + }, + "Patch height": {"type": "integer", "minimum": 32, "default": 256}, + "Patch width": {"type": "integer", "minimum": 32, "default": 256}, + }, + "job_queue": "GPU", + } + + input_port_types = ( + { + "name": "Image", + "minimum": 1, + "maximum": 5, + "resource_types": ["image/rgb+png", "image/rgb+jpg"], + }, + { + "name": "rgba PNG - Selected regions", + "minimum": 1, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + # We did not go this route because it would be more difficult for the user to track layers + # {'name': 'rgba PNG - Layers', 'minimum': 1, 'maximum': 10, 'resource_types': ['image/rgba+png']}, + { + "name": "rgba PNG - Layer 0 (Background)", + "minimum": 1, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 1", + "minimum": 1, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 2", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 3", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 4", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 5", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 6", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 7", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 8", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + { + "name": "rgba PNG - Layer 9", + "minimum": 0, + "maximum": 5, + "resource_types": ["image/rgba+png"], + }, + ) + + output_port_types = ( + # We did not go this route because it would be more difficult for the user to track layers + # {'name': 'Adjustable models', 'minimum': 1, 'maximum': 10, 'resource_types': ['keras/model+hdf5']}, + { + "name": "Log File", + "minimum": 1, + "maximum": 1, + "resource_types": ["text/plain"], + }, + { + "name": "Model 0", + "minimum": 1, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 1", + "minimum": 1, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 2", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 3", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 4", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 5", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 6", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 7", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 8", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + { + "name": "Model 9", + "minimum": 0, + "maximum": 1, + "resource_types": ["keras/model+hdf5"], + }, + ) + + def run_my_task(self, inputs, settings, outputs): + oldouts = sys.stdout, sys.stderr + if "Log File" in outputs: + handler = logging.FileHandler(outputs["Log File"][0]["resource_path"]) + handler.setFormatter( + logging.Formatter("%(asctime)s - %(name)s - %(message)s") + ) + logger.addHandler(handler) + try: + # Settings + batch_size = settings["Batch Size"] + patch_height = settings["Patch height"] + patch_width = settings["Patch width"] + max_number_of_epochs = settings["Maximum number of training epochs"] + max_samples_per_class = settings["Maximum number of samples per label"] + + rlevel = app.conf.CELERY_REDIRECT_STDOUTS_LEVEL + app.log.redirect_stdouts_to_logger(logger, rlevel) + + # Fail if arbitrary layers are not equal before training occurs. + trainer = CalvoTrainer( + batch_size, + patch_height, + patch_width, + max_number_of_epochs, + max_samples_per_class, + inputs, + outputs, + ) + trainer.runTrainer() + return True + finally: + sys.stdout, sys.stderr = oldouts + + def my_error_information(self, exc, traceback): + pass diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/fast_trainer_lib.py b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_trainer_lib.py new file mode 100644 index 000000000..958a34baf --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/fast_trainer_lib.py @@ -0,0 +1,124 @@ +"""Fast Trainer Library +This file provides the code for model generation. +Can be used in the standalone file or within Rodan. +""" + +import logging +import os +import sys +import cv2 +import numpy as np + +try: + import training_engine_sae as training +except Exception: + import rodan.jobs.Calvo_classifier.training_engine_sae as training + + +class CalvoTrainer: + def __init__( + self, + batch_size, + patch_height, + patch_width, + max_number_of_epochs, + max_samples_per_class, + inputs, + outputs, + ): + self.batch_size = batch_size + self.patch_height = patch_height + self.patch_width = patch_width + self.max_number_of_epochs = max_number_of_epochs + self.max_samples_per_class = max_samples_per_class + self.inputs = inputs + self.outputs = outputs + + def runTrainer(self): + + input_ports = len([x for x in self.inputs if "Layer" in x]) + output_ports = len([x for x in self.outputs if "Model" in x or "Log file" in x]) + if input_ports not in [ + output_ports, + output_ports - 1, + ]: # So it still works if Log File is added as an output. + raise Exception( + 'The number of input layers "rgba PNG - Layers" does not match the number of' + ' output "Adjustable models"\n' + "input_ports: " + + str(input_ports) + + " output_ports: " + + str(output_ports) + ) + + # Required input ports + # TODO assert that all layers have the same number of inputs (otherwise it will crack afterwards) + number_of_training_pages = len(self.inputs["Image"]) + + input_images = [] + gts = [] + + # Create output models + output_models_path = {} + + for idx in range(number_of_training_pages): + input_image = cv2.imread( + self.inputs["Image"][idx]["resource_path"], cv2.IMREAD_COLOR + ) # 3-channel + background = cv2.imread( + self.inputs["rgba PNG - Layer 0 (Background)"][idx]["resource_path"], + cv2.IMREAD_UNCHANGED, + ) # 4-channel + regions = cv2.imread( + self.inputs["rgba PNG - Selected regions"][idx]["resource_path"], + cv2.IMREAD_UNCHANGED, + ) # 4-channel + + # Create categorical ground-truth + gt = {} + TRANSPARENCY = 3 + regions_mask = regions[:, :, TRANSPARENCY] == 255 + # background is already restricted to the selected regions (based on Pixel.js' behaviour) + + # Populate remaining inputs and outputs + bg_mask = background[:, :, TRANSPARENCY] == 255 + gt["0"] = np.logical_and(bg_mask, regions_mask) + + for i in range(1, input_ports): + file_obj = cv2.imread( + self.inputs["rgba PNG - Layer {layer_num}".format(layer_num=i)][ + idx + ]["resource_path"], + cv2.IMREAD_UNCHANGED, + ) + file_mask = file_obj[:, :, TRANSPARENCY] == 255 + gt[str(i)] = np.logical_and(file_mask, regions_mask) + + input_images.append(input_image) + gts.append(gt) + + for i in range(input_ports): + output_models_path[str(i)] = self.outputs["Model " + str(i)][0][ + "resource_path" + ] + # THIS IS NOT TAKING INTO ACCOUNT ANY FILE NOT NAMED MODEL IE BACKGROUND AND LOG!!!! + + # Call in training function + status = training.train_msae( + input_images=input_images, + gts=gts, + num_labels=input_ports, + height=self.patch_height, + width=self.patch_width, + output_path=output_models_path, + epochs=self.max_number_of_epochs, + max_samples_per_class=self.max_samples_per_class, + batch_size=self.batch_size, + ) + + print("Finishing the Fast CM trainer job.") + for i in range(input_ports): + os.rename( + output_models_path[str(i)], + self.outputs["Model " + str(i)][0]["resource_path"], + ) diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/local_fast_trainer.py b/rodan-main/code/rodan/jobs/Calvo_classifier/local_fast_trainer.py new file mode 100644 index 000000000..d3255b5c8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/local_fast_trainer.py @@ -0,0 +1,58 @@ +"""Local Fast Trainer +This is the file for running Calvo Fast Trainer loaclly. Make sure +to have an 'Images' folder with the correct inputs in the same directory. +If not, you can change the values in 'inputs' and 'outputs'. + +Simply run `python local_fast_trainer.py` to see the output. +This will call `training_engine_sae.py`. + +It should generate 3 files in its current state. A background model, +a Model 0, and a Log File. + +If you're running it in a Rodan container, this will be located in code/Rodan/rodan/jobs/Calvo_classifier +If the container is already running, try `docker exec -it [container_name] bash` to run the script without +stopping. +""" + +from fast_trainer_lib import CalvoTrainer + +def main(): + + batch_size = 1 + patch_height = 32 + patch_width = 256 + max_number_of_epochs = 1 + max_samples_per_class = 100 + + # Fail if arbitrary layers are not equal before training occurs. + inputs = { + "Image": [{"resource_path": "Images/Halifax_Folio_42v.png"}], + "rgba PNG - Layer 0 (Background)": [ + {"resource_path": "Images/042v_BackgroundForNeumes.png"} + ], + "rgba PNG - Layer 1": [{"resource_path": "Images/042v_Neumes.png"}], + "rgba PNG - Selected regions": [ + {"resource_path": "Images/042v_SelectedRegion.png"} + ], + } + outputs = { + "Model 0": [{"resource_path": "Images/model0.hdf5"}], + "Model 1": [{"resource_path": "Images/model1.hdf5"}], + # "Log File": [{"resource_path": "Images/logfile"}], + } + + trainer = CalvoTrainer( + batch_size, + patch_height, + patch_width, + max_number_of_epochs, + max_samples_per_class, + inputs, + outputs, + ) + + trainer.runTrainer() + + +if __name__ == "__main__": + main() diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/recognition_engine.py b/rodan-main/code/rodan/jobs/Calvo_classifier/recognition_engine.py new file mode 100644 index 000000000..fceeef0eb --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/recognition_engine.py @@ -0,0 +1,94 @@ +from __future__ import division + +#import keras +import cv2 +import numpy as np + +from tensorflow.keras.models import load_model +from tensorflow.keras.backend import image_data_format + + +def process_image(image, model_path, vspan, hspan): + """ + Takes a document image and a pre-trained model path + and returns the process image (with logical labels). + """ + + model = load_model(model_path) + + [height, width, channels] = image.shape + + output = np.zeros((height, width), 'uint8') + + for row in range(vspan, height-vspan-1): + print(str(row) + ' / ' + str(height - vspan - 1)) + for col in range(hspan, width-hspan-1): + sample = image[row-vspan:row+vspan+1, col-hspan:col+hspan+1] + + if image_data_format() == 'channels_first': + sample = np.asarray(sample).reshape(1, 3, vspan*2 + 1, hspan*2 + 1) + else: + sample = np.asarray(sample).reshape(1, vspan*2 + 1, hspan*2 + 1, 3) + + prediction = model.predict(sample)[0] + label = np.argmax(prediction) + + output[row][col] = label + + return output + + +def process_image_msae(image, model_paths, w_height, w_width, mode='masks'): + """ + Takes a document image and pre-trained SAE model paths + and returns a single image with logical labels. + """ + + num_labels = len(model_paths) + + sae_models = [] + for id_label in range(num_labels): + sae_models.append(load_model(model_paths[id_label])) + + [img_height, img_width, channels] = image.shape + + if mode == 'masks': + output_images = [] + + for id_label in range(num_labels): + output_images.append(np.zeros((img_height, img_width))) + + elif mode == 'logical': + output_image = np.zeros((img_height, img_width), 'uint8') + + for row in range(0, img_height - w_height - 1, w_height): + print(str(row) + ' / ' + str(img_height)) + for col in range(0, img_width - w_width - 1, w_width): + sample = image[row:row+w_height, col:col+w_width] + + # Pre-process (check that training does the same!) + sample = (255. - sample) / 255. + + if image_data_format() == 'channels_first': + sample = np.asarray(sample).reshape(1, 3, w_height, w_width) + else: + sample = np.asarray(sample).reshape(1, w_height, w_width, 3) + + if mode == 'masks': + + for id_label in range(num_labels): + prediction = sae_models[id_label].predict(sample) + output_images[id_label][row:row+w_height,col:col+w_width] = 100*prediction[0,:,:,0] + + elif mode == 'logical': + predictions = [] + + for id_label in range(num_labels): + predictions.append( sae_models[id_label].predict(sample)[0,:,:,0] ) + + output_image[row:row+w_height,col:col+w_width] = np.argmax( predictions, axis = 0 ) + + if mode == 'masks': + return output_images + elif mode == 'logical': + return output_image diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/requirements.txt b/rodan-main/code/rodan/jobs/Calvo_classifier/requirements.txt new file mode 100644 index 000000000..aa68e7475 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/requirements.txt @@ -0,0 +1,12 @@ +h5py==2.10.0; python_version < "3.4" +h5py~=3.1.0; python_version > "3.4" +html5lib==0.9999999 +Keras==2.3.1 +numpy==1.16.6; python_version < "3.4" +numpy==1.19.2; python_version > "3.4" +opencv-python==3.2.0.8; python_version < "3.7" +opencv-python==3.4.2.17; python_version >= "3.7" +scipy>=1.0.0 +six>=1.12.0 +tensorflow==1.14.0; python_version < "3.4" +tensorflow==2.5.1; python_version > "3.4" diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/resource_types.yaml b/rodan-main/code/rodan/jobs/Calvo_classifier/resource_types.yaml new file mode 100644 index 000000000..9851851d3 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/resource_types.yaml @@ -0,0 +1,12 @@ +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: image/rgb+jpg + description: JPG image file + extension: jpg +- mimetype: image/rgba+png + description: PNG image file with alpha channel + extension: png +- mimetype: keras/model+hdf5 + description: Trained network from Keras framework + extension: hdf5 diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine.py b/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine.py new file mode 100644 index 000000000..6baaff8af --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine.py @@ -0,0 +1,159 @@ +import cv2 +import numpy as np +import random as rd +import os +from tensorflow.keras.models import Sequential, Model +from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten +from tensorflow.keras.layers import Conv2D, MaxPooling2D, Input +from tensorflow.keras.optimizers import Adadelta +from tensorflow.keras.callbacks import EarlyStopping,ModelCheckpoint +from tensorflow.keras.backend import image_data_format +from tensorflow.keras.layers import BatchNormalization + +# =========================== +# SETTINGS +# =========================== + +VALIDATION_SPLIT=0.2 +BATCH_SIZE = 16 + +# =========================== + +def get_input_shape(height, width, channels = 3): + if image_data_format() == 'channels_first': + return (channels, height, width) + else: + return (height, width, channels) + + +def get_convnet(height, width, labels): + img_input = Input(shape=get_input_shape(height,width)) + x = img_input + + for layer in range(1,5): + x = Conv2D(filters=32*layer, kernel_size=(3, 3), padding='same')(x) + x = BatchNormalization()(x) + x = Activation('relu')(x) + x = MaxPooling2D(pool_size=(2, 2))(x) + + x = Flatten()(x) + x = Dense(labels,activation='softmax')(x) + return Model(img_input, x, name='calvonet') + + +def getTrain(input_image, gt, hspan, vspan, num_labels, max_samples_per_class): + + X_train = [] + Y_train = [] + + # Speed-up factor + factor = 10. + + # Calculate the ratio per label + count = [0] * num_labels + + for page in range(len(input_image)): + for i in range(num_labels): + count[i] += (gt[page] == i).sum() + + samples_per_class = min(np.min(count), max_samples_per_class) + + ratio = [0] * num_labels + for i in range(num_labels): + ratio[i] = factor * (samples_per_class/float(count[i])) + + + # Just for checking ! + count_per_class = [0] * num_labels + + # Get samples according to the ratio per label + for page in range(len(input_image)): + + page_x = input_image[page] + page_y = gt[page] + + [height, width] = page_y.shape + + for row in range(vspan,height-vspan-1): + for col in range(hspan,width-hspan-1): + + if rd.random() < 1./factor: + + label = page_y[row][col] + + if 0 <= label < num_labels: # Avoid possible noise in the GT or -1 (unknown pixel) + + if rd.random() < ratio[label]: # Take samples according to its + + sample = page_x[row-vspan:row+vspan+1,col-hspan:col+hspan+1] + + # Categorical vector + y_label = [0]*num_labels + y_label[label] = 1 + + X_train.append(sample) + Y_train.append(y_label) + + count_per_class[label] += 1 + + # Manage different ordering + if image_data_format() == 'channels_first': + X_train = np.asarray(X_train).reshape(len(X_train), 3, vspan*2 + 1, hspan*2 + 1) + else: + X_train = np.asarray(X_train).reshape(len(X_train), vspan*2 + 1, hspan*2 + 1, 3) + + Y_train = np.asarray(Y_train).reshape(len(Y_train), num_labels) + + print('Distribution of data per class: ' + str(count_per_class)) + + return [X_train, Y_train] + + +def train_model(input_image, gt, hspan, vspan, output_model_path, max_samples_per_class, epochs, num_labels = 4): + # ------------------------------------------------------------------------------------------------------------------- + + # Create training set + [X_train, Y_train] = getTrain([input_image], [gt], + hspan, vspan, + num_labels, + max_samples_per_class=max_samples_per_class) + + print('Training created with ' + str(len(X_train)) + ' samples.') + + # Training configuration + print('Training a new model') + model = get_convnet( + height=hspan * 2 + 1, + width=vspan * 2 + 1, + labels=num_labels + ) + + #model.summary() + + # In Tensorflow 2, it is necessary to add '.h5' to the end of the filename to force saving + # in hdf5 format with a ModelCheckpoint. Rodan will not accept anything but the file's + # original filename, however, so we must rename it back after training. + new_output_path = os.path.join(output_model_path + '.h5') + + callbacks_list = [ + ModelCheckpoint(new_output_path, save_best_only=True, monitor='val_acc', verbose=1, mode='max'), + EarlyStopping(monitor='val_acc', patience=3, verbose=0, mode='max') + ] + + model.compile(loss='categorical_crossentropy', + optimizer=Adadelta(lr=1.0, rho=0.95, epsilon=1e-08, decay=0.0), + metrics=["accuracy"]) + + # Training stage + model.fit(X_train, Y_train, + verbose=2, + batch_size=BATCH_SIZE, + validation_split=VALIDATION_SPLIT, + callbacks=callbacks_list, + epochs=epochs + ) + + # Rename the file back to what Rodan expects. + os.rename(new_output_path, output_model_path) + + return 0 diff --git a/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine_sae.py b/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine_sae.py new file mode 100644 index 000000000..d1a598538 --- /dev/null +++ b/rodan-main/code/rodan/jobs/Calvo_classifier/training_engine_sae.py @@ -0,0 +1,236 @@ +from __future__ import division + +import cv2 +import numpy as np +import random as rd +import os +from tensorflow.keras.models import Model +from tensorflow.keras.layers import Dropout, UpSampling2D, Concatenate +from tensorflow.keras.layers import Conv2D, MaxPooling2D, Input +from tensorflow.keras.optimizers import Adam +from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint +from tensorflow.keras.backend import image_data_format +#import keras +import tensorflow as tf +import threading + + +# =========================== +# SETTINGS +# =========================== + +# gpu_options = tf.GPUOptions( +# allow_growth=True, +# per_process_gpu_memory_fraction=0.40 +# ) +# sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) +# keras.backend.tensorflow_backend.set_session(sess) +VALIDATION_SPLIT = 0.2 +# BATCH_SIZE = 16 + +# =========================== +class threadsafe_iter: + """Takes an iterator/generator and makes it thread-safe by + serializing call to the `next` method of given iterator/generator. + """ + + def __init__(self, it): + self.it = it + self.lock = threading.Lock() + + def __iter__(self): + return self + + def __next__(self): + with self.lock: + return next(self.it) + + +def get_input_shape(height, width, channels=3): + if image_data_format() == "channels_first": + return (channels, height, width) + else: + return (height, width, channels) + + +def get_sae(height, width, pretrained_weights=None): + ff = 32 + + inputs = Input(shape=get_input_shape(height, width)) + conv1 = Conv2D( + ff, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(inputs) + conv1 = Conv2D( + ff, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv1) + pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) + conv2 = Conv2D( + ff * 2, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(pool1) + conv2 = Conv2D( + ff * 2, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv2) + pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) + + conv3 = Conv2D( + ff * 8, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(pool2) + conv7 = Conv2D( + ff * 8, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv3) + up8 = UpSampling2D(size=(2, 2))(conv7) + up8 = Conv2D( + ff * 4, 2, activation="relu", padding="same", kernel_initializer="he_normal" + )(up8) + merge8 = Concatenate(axis=3)([conv2, up8]) + + conv8 = Conv2D( + ff * 4, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(merge8) + conv8 = Conv2D( + ff * 4, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv8) + up9 = UpSampling2D(size=(2, 2))(conv8) + up9 = Conv2D( + ff * 2, 2, activation="relu", padding="same", kernel_initializer="he_normal" + )(up9) + merge9 = Concatenate(axis=3)([conv1, up9]) + + conv9 = Conv2D( + ff * 2, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(merge9) + conv9 = Conv2D( + ff * 2, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv9) + conv9 = Conv2D( + 2, 3, activation="relu", padding="same", kernel_initializer="he_normal" + )(conv9) + conv10 = Conv2D(1, 1, activation="sigmoid")(conv9) + + model = Model(inputs=inputs, outputs=conv10) + + model.compile( + optimizer=Adam(lr=1e-4), loss="binary_crossentropy", metrics=["accuracy"] + ) + + if pretrained_weights is not None: + model.load_weights(pretrained_weights) + + return model + + +def threadsafe_generator(f): + """A decorator that takes a generator function and makes it thread-safe.""" + + def g(*a, **kw): + return threadsafe_iter(f(*a, **kw)) + + return g + + +@threadsafe_generator # Credit: https://anandology.com/blog/using-iterators-and-generators/ +def createGenerator(input_images, segmented_images, idx_label, patch_height, patch_width, batch_size): + while True: + + selected_page_idx = np.random.randint(len(input_images)) # Changed len to grs from gr + gr = input_images[selected_page_idx] + label = str(idx_label) + gt = segmented_images[selected_page_idx][label] + + potential_training_examples = np.where(gt[:-patch_height, :-patch_width] == 1) + + gr_chunks = [] + gt_chunks = [] + + num_coords = len(potential_training_examples[0]) + + index_coords_selected = [ + np.random.randint(0, num_coords) for _ in range(batch_size) + ] + x_coords = potential_training_examples[0][index_coords_selected] + y_coords = potential_training_examples[1][index_coords_selected] + + for i in range(batch_size): + row = x_coords[i] + col = y_coords[i] + gr_sample = gr[ + row : row + patch_height, col : col + patch_width + ] # Greyscale image + gt_sample = gt[ + row : row + patch_height, col : col + patch_width + ] # Ground truth + gr_chunks.append(gr_sample) + gt_chunks.append(gt_sample) + + gr_chunks_arr = np.array(gr_chunks) + gt_chunks_arr = np.array(gt_chunks) + # convert gr_chunks and gt_chunks to the numpy arrays that are yield below + + yield gr_chunks_arr, gt_chunks_arr # convert into npy before yielding + + +def getTrain(input_images, gts, num_labels, patch_height, patch_width, batch_size): + generator_labels = [] + + print("num_labels", num_labels) + for idx_label in range(num_labels): + print("idx_label", idx_label) + generator_label = createGenerator( + input_images, gts, idx_label, patch_height, patch_width, batch_size + ) + generator_labels.append(generator_label) + print(generator_labels) + + return generator_labels + + +def train_msae( + input_images, + gts, + num_labels, + height, + width, + output_path, + epochs, + max_samples_per_class, + batch_size=16, +): + + # Create ground_truth + print("Creating data generators...") + generators = getTrain(input_images, gts, num_labels, height, width, batch_size) + # Training loop + for label in range(num_labels): + print("Training a new model for label #{}".format(str(label))) + model = get_sae(height=height, width=width) + # model.summary() + new_output_path = os.path.join(output_path[str(label)] + '.h5') + callbacks_list = [ + ModelCheckpoint( + new_output_path, + save_best_only=True, + monitor="val_accuracy", + verbose=1, + mode="max", + ), + EarlyStopping(monitor="val_accuracy", patience=3, verbose=0, mode="max"), + ] + + # Training stage + model.fit( + generators[label], + verbose=2, + steps_per_epoch=max_samples_per_class // batch_size, + validation_data=generators[label], + validation_steps=100, + callbacks=callbacks_list, + epochs=epochs, + ) + os.rename(new_output_path, output_path[str(label)]) + + return 0 + + +# Debugging code +if __name__ == "__main__": + print("Must be run from Rodan") \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/.gitignore b/rodan-main/code/rodan/jobs/MEI_encoding/.gitignore new file mode 100644 index 000000000..092b00a79 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/.gitignore @@ -0,0 +1,123 @@ +jsomr*/ +syl_json/ +out_mei/ +old_split_mei/ +png/ +out_png/ +schemas/ + +*.jpg +*.png +*.DS_Store +*.ttf + +# test files +CF-011/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# my ignored stuff +ignore +venv* +.pytest_cache/ +output.mei diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/LICENSE b/rodan-main/code/rodan/jobs/MEI_encoding/LICENSE new file mode 100644 index 000000000..c1cf11437 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2018-2020 Noah Baxter, Timothy de Reuse, Juliette Regimbal, +Alex Daigle, Gabriel Vigliensoni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/MEI_encoding.py b/rodan-main/code/rodan/jobs/MEI_encoding/MEI_encoding.py new file mode 100644 index 000000000..060889f38 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/MEI_encoding.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +from rodan.jobs.base import RodanTask +import build_mei_file as bm +import parse_classifier_table as pct +import json + +from celery.utils.log import get_task_logger + + +class MEI_encoding(RodanTask): + name = 'MEI Encoding' + author = 'Tim de Reuse' + description = 'Builds an MEI file from pitchfinding information and transcript alignment results.' + enabled = True + category = "Encoding" + interactive = False + logger = get_task_logger(__name__) + + settings = { + 'title': 'Mei Encoding Settings', + 'type': 'object', + 'job_queue': 'Python2', + 'required': ['Neume Component Spacing'], + 'properties': { + 'Neume Component Spacing': { + 'type': 'number', + 'default': 0.5, + 'minimum': 0.0, + 'maximum': 10.0, + 'description': 'A multiplier controlling the spacing allowed between two neume components when grouping into neumes. 1.0 will use the median width of all glyphs on the page, 2.0 will use twice the median width, and so on. At 0, neume components will not be merged together, and each one will be treated as its own neume.', + } + } + } + + input_port_types = [{ + 'name': 'JSOMR', + 'resource_types': ['application/json'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }, { + 'name': 'Text Alignment JSON', + 'resource_types': ['application/json'], + 'minimum': 0, + 'maximum': 1, + 'is_list': False + }, { + 'name': 'MEI Mapping CSV', + 'resource_types': ['text/csv'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + } + ] + + output_port_types = [{ + 'name': 'MEI', + 'resource_types': ['application/mei+xml'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + def run_my_task(self, inputs, settings, outputs): + self.logger.info(settings) + + jsomr_path = inputs['JSOMR'][0]['resource_path'] + self.logger.info('loading jsomr...') + with open(jsomr_path, 'r') as file: + jsomr = json.loads(file.read()) + + try: + alignment_path = inputs['Text Alignment JSON'][0]['resource_path'] + except KeyError: + self.logger.warning('no text alignment given! using dummy syllables...') + syls = None + else: + self.logger.info('loading text alignment results..') + with open(alignment_path, 'r') as file: + syls = json.loads(file.read()) + + self.logger.info('fetching classifier...') + classifier_table, width_container = pct.fetch_table_from_csv(inputs['MEI Mapping CSV'][0]['resource_path']) + width_mult = settings[u'Neume Component Spacing'] + mei_string = bm.process(jsomr, syls, classifier_table, width_mult, width_container) + + self.logger.info('writing to file...') + outfile_path = outputs['MEI'][0]['resource_path'] + with open(outfile_path, 'w') as file: + file.write(mei_string) + + return True diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/README.md b/rodan-main/code/rodan/jobs/MEI_encoding/README.md new file mode 100644 index 000000000..799cdf319 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/README.md @@ -0,0 +1,7 @@ +# MEI Encoding Rodan Job + +Encodes the output from [`Pitch Finding`](https://github.com/DDMAL/heuristic-pitch-finding) into an [MEI](http://music-encoding.org/) file, as a job in the workflow builder [```Rodan```](https://github.com/DDMAL/Rodan). Requires a matching MEI mapping CSV that associates glyphs with snippets of MEI, created with the [`MEI Mapping Tool`](https://github.com/DDMAL/mei-mapping-tool). + +Can take additional JSON input from [Text Alignment](https://github.com/DDMAL/text-alignment), so that textual information will be included in the MEI and the neumes will be correctly partitioned into syllables. If this input is not present the output will still be valid MEI, just with "blank" syllables. + +**Currently uses Python 2; Next major version will update to Python 3** (at least, that's the plan). Requires numpy>=1.16.0 and libMEI>=3.1.0. Scripts requiring PIL>=6.1.0 are in ```visualize_alignment.py``` for local development. diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/__init__.py b/rodan-main/code/rodan/jobs/MEI_encoding/__init__.py new file mode 100644 index 000000000..424044cf6 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/__init__.py @@ -0,0 +1,7 @@ +import rodan +__version__ = "1.0.0" +import logging + +logger = logging.getLogger("rodan") +from rodan.jobs import module_loader +module_loader("rodan.jobs.MEI_encoding.MEI_encoding") diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/build_mei_file.py b/rodan-main/code/rodan/jobs/MEI_encoding/build_mei_file.py new file mode 100644 index 000000000..54c1db404 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/build_mei_file.py @@ -0,0 +1,627 @@ +# -*- coding: utf-8 -*- +import xml.etree.ElementTree as ET +import numpy as np +import json +import parse_classifier_table as pct +from pymei import MeiDocument, MeiElement, MeiAttribute, documentToText, documentToFile +from itertools import groupby +from visualize_alignment import draw_mei_doc + +try: + from rodan.jobs.MEI_encoding import __version__ +except ImportError: + __version__ = "[Not encoded using Rodan]" + + +def add_flags_to_glyphs(glyphs): + ''' + Given the raw list of glyphs from pitch-finding containing position and classification + information, add some information to the data structure. This lets us tell more easily where + line breaks are in the file without having to re-perform calculations. + ''' + + for g in glyphs: + for key in g['glyph'].keys(): + g[key] = g['glyph'][key] + for key in g['pitch'].keys(): + g[key] = g['pitch'][key] + del g['pitch'] + del g['glyph'] + g['bounding_box']['lrx'] = g['bounding_box']['ulx'] + g['bounding_box']['ncols'] + g['bounding_box']['lry'] = g['bounding_box']['uly'] + g['bounding_box']['nrows'] + + # sort glyphs in lexicographical order by staff #, left to right + glyphs.sort(key=lambda x: (int(x['staff']), int(x['offset']))) + + temp1 = 0 + temp2 = 0 + for i in range(len(glyphs)-1): + temp1 = glyphs[i] + temp2 = glyphs[i+1] + midpoint = (temp1['bounding_box']['lrx'] + temp1['bounding_box']['ulx']) / 2 + if temp2['bounding_box']['ulx'] < midpoint and temp2['bounding_box']['ulx'] >= temp1['bounding_box']['ulx']: + if (temp1['bounding_box']['uly'] < temp2['bounding_box']['uly']): + glyphs[i+1], glyphs[i] = temp1, temp2 + + + # add flag to every glyph denoting whether or not a line break should come immediately after + for i in range(len(glyphs)): + + glyphs[i]['system_begin'] = False + if i < len(glyphs) - 1: + + left_staff = int(glyphs[i]['staff']) + right_staff = int(glyphs[i + 1]['staff']) + + if left_staff < right_staff: + glyphs[i]['system_begin'] = True + + return glyphs + + +def neume_to_lyric_alignment(glyphs, syl_boxes, median_line_spacing): + ''' + Given the processed glyphs from add_flags_to_glyphs and the information from the text alignment + job (syl_boxes, median_line_spacing), finds out which syllables of text correspond to which + glyphs on the page and returns a list of ([neumes], syllable) pairs. + + Things like custos, clefs, and accidentals are included inside these lists even though they + are, strictly speaking, not part of the MEI for the syllable; that is handled in the method that + actually encodes the MEI. + ''' + + dummy_syl = {u'syl': '', u'ul': [0, 0], u'lr': [0, 0]} + + # if there's no syl information then make fake syllables for testing. this method makes one + # large syllable covering an entire staff line. + if not syl_boxes: + glyphs = sorted(glyphs, key=lambda x: int(x['staff'])) + + grouped_glyphs = [list(g) for k, g in groupby(glyphs, key=lambda x: int(x['staff']))] + + pairs = [(g, dummy_syl) for g in grouped_glyphs] + return pairs + + glyphs_pos = 0 + num_glyphs = len(glyphs) + + pairs = [] + starts = [] + last_used = 0 + for box in syl_boxes: + + # assign each syllable to an ANCHOR GLYPH. + # for each syl_box, look for glyphs that + # 1) have not been assigned to a syl_box yet, and + # 2) are within a median line width above the current box, and + # 3) are to the right of the current box. + above_glyphs = [ + g for g in glyphs[last_used:] if + (box['ul'][1] - median_line_spacing < g['bounding_box']['uly'] < box['ul'][1]) and + (box['ul'][0] < g['bounding_box']['ulx'] + g['bounding_box']['ncols'] // 2) + ] + + if not above_glyphs: + starts.append(last_used) + continue + + # find the glyph in above_glyphs that is closest to the current box + nearest_glyph = min(above_glyphs, key=lambda g: g['bounding_box']['ulx']) + + # append the index of this glyph to the start positions list + starts.append(glyphs.index(nearest_glyph)) + last_used = max(starts) + + # if there are unassigned "orphan" glyphs at the beginning of the page, assign them all to a + # dummy syl_box so they can be detected later + if not starts[0] == 0: + pairs.append( + (glyphs[:starts[0]], dummy_syl) + ) + + starts.append(len(glyphs)) + for i in range(len(starts) - 1): + + # it's possible that no glyphs are assigned to a syllable: in this case, just + # get rid of the syllable altogether. + glyph_range = glyphs[starts[i]:starts[i+1]] + if not glyph_range: + continue + + pair = (glyph_range, syl_boxes[i]) + pairs.append(pair) + + return pairs + + +def generate_base_document(): + ''' + Generates a generic template for an MEI document for neume notation. + + Currently a bit of this is hardcoded and should probably be made more customizable. + ''' + meiDoc = MeiDocument("4.0.0") + + mei = MeiElement("mei") + mei.addAttribute("meiversion", "4.0.0") + meiDoc.root = mei + + # placeholder meiHead + meihead = MeiElement('meiHead') + mei.addChild(meihead) + fileDesc = MeiElement('fileDesc') + meihead.addChild(fileDesc) + titleSt = MeiElement('titleStmt') + fileDesc.addChild(titleSt) + title = MeiElement('title') + titleSt.addChild(title) + title.setValue('MEI Encoding Output (%s)' % __version__) + pubStmt = MeiElement('pubStmt') + fileDesc.addChild(pubStmt) + + music = MeiElement("music") + mei.addChild(music) + + facs = MeiElement("facsimile") + music.addChild(facs) + + surface = MeiElement("surface") + facs.addChild(surface) + + body = MeiElement('body') + music.addChild(body) + + mdiv = MeiElement('mdiv') + body.addChild(mdiv) + + score = MeiElement('score') + mdiv.addChild(score) + + scoreDef = MeiElement('scoreDef') + score.addChild(scoreDef) + + staffGrp = MeiElement('staffGrp') + scoreDef.addChild(staffGrp) + + staffDef = MeiElement('staffDef') + staffGrp.addChild(staffDef) + + # these hardcoded attributes define a single staff with 4 lines, neume notation, with a default c clef + staffDef.addAttribute('n', '1') + staffDef.addAttribute('lines', '4') + staffDef.addAttribute('notationtype', 'neume') + staffDef.addAttribute('clef.line', '3') + staffDef.addAttribute('clef.shape', 'C') + + section = MeiElement('section') + score.addChild(section) + + staff = MeiElement('staff') + section.addChild(staff) + + layer = MeiElement('layer') + staff.addChild(layer) + + return meiDoc, surface, layer + + +def add_attributes_to_element(el, add): + ''' + A helper function that takes in a dictionary linking attributes --> values, and adds all these + attributes to the libMEI object @add. + ''' + for key in add.keys(): + if add[key] == 'None': + continue + el.addAttribute(key, str(add[key])) + return el + + +def create_primitive_element(xml, glyph, idx, surface): + ''' + Creates a "lowest-level" element out of the xml retrieved from the MEI mapping tool (passed as + an ElementTree object in @xml) and registers its bounding box in the given surface. + ''' + res = MeiElement(xml.tag) + attribs = xml.attrib + + # ncs, custos do not have a @line attribute. this is a bit of a hack... + if xml.tag == 'clef': + attribs['line'] = str(glyph['strt_pos']) + + attribs['oct'] = str(glyph['octave']) + attribs['pname'] = str(glyph['note']) + res = add_attributes_to_element(res, attribs) + + + if type(glyph['bounding_box']) == dict: + zoneId = generate_zone(surface, glyph['bounding_box']) + else: + zoneId = generate_zone(surface, glyph['bounding_box'][idx]) + res.addAttribute('facs', '#' + zoneId) + return res + + + +def glyph_to_element(classifier, width_container, glyph, surface): + ''' + Translates a glyph as output by the pitchfinder into an MEI element, registering bounding boxes + in the given surface. + + Currently the assumption is that no MEI information in the given classifier is more than one + level deep - that is, everything is either a single element (clef, custos) or the child of a + single element (neumes). THIS IS NOT TRUE FOR ALL NEUMATIC NOTATION TYPES! + ''' + name = str(glyph['name']) + try: + xml = classifier[name] + width = width_container[name] + except KeyError: + print('entry {} not found in classifier table!'.format(name)) + return None + + # remove everything up to the first dot in the name of the glyph + try: + name = name[:name.index('.')] + except ValueError: + pass + + # if this is an element with no children, then just apply a pitch and position to it + if not list(xml): + return create_primitive_element(xml, glyph, 0, surface) + + # else, this element has at least one child (is a neume) + ncs = list(xml) + + # divide bbox according to the width column + bb_org = glyph['bounding_box'] + bb_new = [] + length_org = bb_org['lrx'] - bb_org['ulx'] + length_nc = length_org / len(width) + # iterate the list + for i in range(len(width)): + # count down the element + for j in range(width[i]): + bb_temp = { + 'ulx': bb_org['ulx'] + i * length_nc, + 'uly': bb_org['uly'], + 'lrx': bb_org['lrx'] + (i+1) * length_nc, + 'lry': bb_org['uly'], + } + bb_new.append(bb_temp) + glyph['bounding_box'] = bb_new + + els = [] + # els = [create_primitive_element(nc, glyph, surface) for nc in ncs] + for i in range(len(ncs)): + try: + el = create_primitive_element(ncs[i], glyph, i, surface) + except IndexError: + print('Width column indicates {} neume components but gets {} neume components from input for classifier {}'.format(len(glyph['bounding_box']), len(ncs), str(glyph['name']))) + continue + els.append(el) + + parent = MeiElement(xml.tag) + parent.setChildren(els) + + if len(els) < 2: + return parent + + # if there's more than one element, must resolve intervals between ncs + for i in range(1, len(els)): + prev_nc = parent.children[i - 1] + cur_nc = parent.children[i] + new_pname, new_octave = resolve_interval(prev_nc, cur_nc) + cur_nc.addAttribute('pname', new_pname) + cur_nc.addAttribute('oct', new_octave) + cur_nc.removeAttribute('intm') + + return parent + + +def resolve_interval(prev_nc, cur_nc): + ''' + When given a ligature or something like that which specifies only the starting pitch and an + interval, we need to calculate what the pitch of the rest of the notes are going to be. Given + two neume components, where the second one has an 'intm' attribute, this calculates what the + correct scale degree and octave is. + + N.B. in MEI octave numbers increase when going from a B to a C. + ''' + + scale = ['c', 'd', 'e', 'f', 'g', 'a', 'b'] + + interval = cur_nc.getAttribute('intm').value + try: + interval = interval.lower().replace('s', '') + interval = int(interval) + except ValueError: + interval = 0 + except AttributeError: + interval = 0 + + starting_pitch = prev_nc.getAttribute('pname').value + starting_octave = int(prev_nc.getAttribute('oct').value) + end_octave = starting_octave + + try: + start_index = scale.index(starting_pitch) + except ValueError: + raise ValueError('pname {} is not in scale {}'.format(starting_pitch, scale)) + + end_idx = start_index + interval + + if end_idx >= len(scale): + end_octave += 1 + elif end_idx < 0: + end_octave -= 1 + + end_idx %= len(scale) + end_pname = scale[end_idx] + + return str(end_pname), str(end_octave) + + +def generate_zone(surface, bb): + ''' + Given a bounding box, generates a zone element, adds it to the given @surface, + and returns its ID. + ''' + el = MeiElement('zone') + surface.addChild(el) + + # could be cleaner, but necessary so that we don't add extra attributes from @bb + attribs = { + 'ulx': bb['ulx'], + 'uly': bb['uly'], + 'lrx': bb['lrx'], + 'lry': bb['lry'], + } + + el = add_attributes_to_element(el, attribs) + return el.getId() + + +def build_mei(pairs, classifier, width_container, staves, page): + ''' + Encodes the final MEI document using: + @pairs: Pairs from the neume_to_lyric_alignment. + @classifier: The MEI mapping dictionary output + by fetch_table_from_csv() in parse_classifier_table.py + @width_container: The width column by fetch_table_from_csv() in parse_classifier_table.py + the length of the list indicates the width of the neume, + the sum of the list indicates the number of the ncs in the neume + @staves: Bounding box information from pitch finding JSON. + @page: Page dimension information from pitch finding JSON. + ''' + meiDoc, surface, layer = generate_base_document() + surface_bb = { + 'ulx': page['bounding_box']['ulx'], + 'uly': page['bounding_box']['uly'], + 'lrx': page['bounding_box']['ulx'] + page['bounding_box']['ncols'], + 'lry': page['bounding_box']['uly'] + page['bounding_box']['nrows'] + } + surface.addAttribute('ulx', str(surface_bb['ulx'])) + surface.addAttribute('uly', str(surface_bb['uly'])) + surface.addAttribute('lrx', str(surface_bb['lrx'])) + surface.addAttribute('lry', str(surface_bb['lry'])) + + # add an initial system beginning + sb = MeiElement('sb') + bb = staves[0]['bounding_box'] + bb = { + 'ulx': bb['ulx'], + 'uly': bb['uly'], + 'lrx': bb['ulx'] + bb['ncols'], + 'lry': bb['uly'] + bb['nrows'], + } + zoneId = generate_zone(surface, bb) + sb.addAttribute('facs', '#' + zoneId) + layer.addChild(sb) + + # add to the MEI document, syllable by syllable + for gs, syl_box in pairs: + + # first add information about the text itself + cur_syllable = MeiElement('syllable') + bb = { + 'ulx': syl_box['ul'][0], + 'uly': syl_box['ul'][1], + 'lrx': syl_box['lr'][0], + 'lry': syl_box['lr'][1], + } + zoneId = generate_zone(surface, bb) + layer.addChild(cur_syllable) + + # add syl element containing text on page + syl = MeiElement('syl') + syl.setValue(str(syl_box['syl'])) + syl.addAttribute('facs', '#' + zoneId) + cur_syllable.addChild(syl) + + # iterate over glyphs on the page that fall within the bounds of this syllable + for i, glyph in enumerate(gs): + + # are we done with neume components in this grouping? + syllable_over = not any(('neume' in x['name']) for x in gs[i:]) + new_el = glyph_to_element(classifier, width_container, glyph, surface) + if not new_el: + continue + # four cases to consider: + # 1. no line break and done with this syllable (usually a clef) + # 2. no line break and not done with this syllable (more neume components to add) + # 3. a line break and done with this syllable (a custos OUTSIDE a tag) + # 4. a line break and not done with this syllable (a custos INSIDE a tag) + + if not glyph['system_begin']: + # case 1 + if syllable_over: + layer.addChild(new_el) + # case 2 + else: + cur_syllable.addChild(new_el) + continue + + sb = MeiElement('sb') + cur_staff = int(glyph['staff']) + + bb = staves[cur_staff]['bounding_box'] + bb = { + 'ulx': bb['ulx'], + 'uly': bb['uly'], + 'lrx': bb['ulx'] + bb['ncols'], + 'lry': bb['uly'] + bb['nrows'], + } + zoneId = generate_zone(surface, bb) + sb.addAttribute('facs', '#' + zoneId) + + # case 3: the syllable is over, so the custos goes outside the syllable + # do not include custos in tags! this was a typo in the MEI documentation + if syllable_over: + layer.addChild(new_el) + layer.addChild(sb) + # case 4 + else: + cur_syllable.addChild(new_el) + cur_syllable.addChild(sb) + + return meiDoc + + +def merge_nearby_neume_components(meiDoc, width_mult): + ''' + A heuristic to merge together neume components that are 1) consecutive 2) within the same + syllable 3) within a certain distance from each other. This distance is by default set to the + average width of a neume component within this page, but can be modified using the + @width_multiplier argument. The output MEI will still be correct even if this method is not run. + ''' + all_syllables = meiDoc.getElementsByName('syllable') + surface = meiDoc.getElementsByName('surface')[0] + + surf_dict = {} + neume_widths = [] + for c in surface.getChildren(): + surf_dict[c.id] = {} + for coord in c.attributes: + surf_dict[c.id][coord.name] = int(coord.value) + + + neume_widths = [x['lrx'] - x['ulx'] for x in surf_dict.values()] + med_neume_width = np.median(neume_widths) * width_mult + + # returns True if both inputs are of type 'neume' and they are close enough to be merged + def compare_neumes(nl, nr): + if not (nl.name == 'neume' and nr.name == 'neume'): + return False + + nl_right_bound = max([surf_dict[n.getAttribute('facs').value[1:]]['lrx'] for n in nl.children]) + nr_left_bound = min([surf_dict[n.getAttribute('facs').value[1:]]['ulx'] for n in nr.children]) + + distance = nr_left_bound - nl_right_bound + + return (distance <= med_neume_width) + + for syllable in all_syllables: + children = syllable.getChildren() + + # holds children of the current syllable that will be added to target + accumulator = [] + + # holds the first neume in a sequence of neumes that will be merged + target = None + + # holds children once in the accumulator that must be removed after iteration is done + children_to_remove = [] + + # iterate over all children. for each neume decide whether or not it should be merged + # with the next one using compare_neumes. if yes, add the next one to the accumulator. + # if not, empty the accumulator and add its contents to the target. + for i in range(len(children)): + if (i + 1 < len(children)) and (compare_neumes(children[i], children[i+1])): + accumulator.append(children[i+1]) + if not target: + target = children[i] + else: + ncs_to_merge = [] + for neume in accumulator: # empty contents of accumulator into ncs_to_merge + ncs_to_merge += neume.children + for nc in ncs_to_merge: # merge all neume components + target.addChild(nc) + children_to_remove += accumulator + # for neume in accumulator: # clean up neumes that were merged + # syllable.removeChild(neume) + target = None + accumulator = [] + + for neume in children_to_remove: + syllable.removeChild(neume) + + return meiDoc + + +def process(jsomr, syls, classifier, width_mult, width_container,verbose=True): + ''' + Runs the entire MEI encoding process given the three inputs to the rodan job and the + width_multiplier parameter for merging neume components. + ''' + glyphs = jsomr['glyphs'] + syl_boxes = syls['syl_boxes'] if syls is not None else None + median_line_spacing = syls['median_line_spacing'] if syls is not None else None + + glyphs = add_flags_to_glyphs(glyphs) + pairs = neume_to_lyric_alignment(glyphs, syl_boxes, median_line_spacing) + meiDoc = build_mei(pairs, classifier, width_container, jsomr['staves'], jsomr['page']) + + if width_mult > 0: + meiDoc = merge_nearby_neume_components(meiDoc, width_mult=width_mult) + + return documentToText(meiDoc) + + +if __name__ == '__main__': + + # A script for running the encoding process locally on the salzinnes manuscript. + # Replace paths and filenames as per your local setup. + # Assumes that all files are numbered with the "CF-" filenames that the images of the manuscript + # originally came with. + + classifier_fname = 'csv-square notation test_20190725015554.csv' + classifier, width_container = pct.fetch_table_from_csv(classifier_fname) + + f_inds = range(0, 200) + + for f_ind in f_inds: + fname = 'salzinnes_{:0>3}'.format(f_ind) + inJSOMR = './jsomr-split/pitches_{}.json'.format(fname) + in_syls = './syl_json/{}.json'.format(fname) + in_png = '/Users/tim/Desktop/PNG_compressed/CF-{:0>3}.png'.format(f_ind) + out_fname = './out_mei/output_split_{}.mei'.format(fname) + out_fname_png = './out_png/{}_alignment.png'.format(fname) + + try: + with open(inJSOMR, 'r') as file: + jsomr = json.loads(file.read()) + with open(in_syls) as file: + syls = json.loads(file.read()) + except IOError: + print('{} not found, skipping...'.format(fname)) + continue + + print('building mei for {}...'.format(fname)) + + glyphs = jsomr['glyphs'] + syl_boxes = syls['syl_boxes'] + median_line_spacing = syls['median_line_spacing'] + + print('adding flags to glyphs...') + glyphs = add_flags_to_glyphs(glyphs) + print('performing neume-to-lyric alignment...') + pairs = neume_to_lyric_alignment(glyphs, syl_boxes, median_line_spacing) + print('building MEI...') + meiDoc = build_mei(pairs, classifier, width_container, jsomr['staves'], jsomr['page']) + print('neume component spacing > 0, merging nearby components...') + meiDoc = merge_nearby_neume_components(meiDoc, width_mult=0.25) + + #draw_mei_doc(in_png, out_fname_png, meiDoc) + + documentToFile(meiDoc, out_fname) diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/parse_classifier_table.py b/rodan-main/code/rodan/jobs/MEI_encoding/parse_classifier_table.py new file mode 100644 index 000000000..ed90fb474 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/parse_classifier_table.py @@ -0,0 +1,75 @@ +import numpy as np +import xml.etree.ElementTree as ET +import csv +import codecs + +def fetch_table_from_excel(classifier_fname): + ''' + (deprecated) + + Given a path to an excel spreadsheet, returns a dictionary linking classification names to + MEI snippets, given that it contains a table with columns labeled "mei" and "classification." + ''' + from xlrd import open_workbook + from unidecode import unidecode + + name_col = u'Encoding classifier' + mei_col = u'Encoding MEI' + wb = open_workbook(classifier_fname) + sheet = wb.sheets()[0] + + for n in range(sheet.nrows): + row = [x.value for x in sheet.row(n)] + if name_col in row and mei_col in row: + name_pos = row.index(name_col) + mei_pos = row.index(mei_col) + starting_from = n + break + + name_to_mei = {} + for n in range(starting_from + 1, sheet.nrows): + item_name = sheet.cell(n, name_pos).value + item_mei = sheet.cell(n, mei_pos).value + item_mei = unidecode(item_mei) + if not item_name: + continue + try: + parsed = ET.fromstring(item_mei) + except ET.ParseError: + print('{} failed: row {}, col {}'.format(item_name, n, mei_pos)) + continue + name_to_mei[item_name] = parsed + return name_to_mei + + +def fetch_table_from_csv(fname): + ''' + Given a path to a .csv file that was output from the MEI mapping tool, + (github.com/DDMAL/mei-mapping-tool) + outputs a dictionary linking classifications of glyphs (e.g., podatus2, punctum, ligature3) + to ElementTree objects of MEI snippets. + ''' + with open(fname, 'r') as f: + table_reader = csv.reader(f) + full_table = [] + for row in table_reader: + full_table.append(row) + header = full_table[0] + mei_index = header.index('mei') + class_index = header.index('classification') + width_index = header.index('width') + name_to_mei = {} + name_to_width = {} + for row in full_table[1:]: + raw_xml = row[mei_index] + class_name = row[class_index] + width = [int(w) for w in row[width_index] if w.isdigit()] + try: + parsed = ET.fromstring(raw_xml) + except ET.ParseError: + print('{} failed: xml {}, width {}'.format(class_name, raw_xml, width)) + continue + name_to_mei[class_name] = parsed + name_to_width[class_name] = width + + return name_to_mei, name_to_width diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/requirements.txt b/rodan-main/code/rodan/jobs/MEI_encoding/requirements.txt new file mode 100644 index 000000000..1f69b62d5 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/requirements.txt @@ -0,0 +1,2 @@ +numpy==1.16.3 +lxml==4.5.2 diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/resource_types.yaml b/rodan-main/code/rodan/jobs/MEI_encoding/resource_types.yaml new file mode 100755 index 000000000..430bf66a8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/resource_types.yaml @@ -0,0 +1,9 @@ +- mimetype: application/json + description: JSON + extension: json +- mimetype: application/mei+xml + extension: mei + description: Music Encoding Initiative +- mimetype: text/csv + extension: csv + description: Comma Separated Values diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-Neumes.rng b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-Neumes.rng new file mode 100644 index 000000000..00ca7a556 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-Neumes.rng @@ -0,0 +1,25001 @@ + + + +
                  + + + false + true + + + + + nonzero + evenodd + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lr-tb + rl-tb + tb-rl + lr + rl + tb + inherit + + + + + + + + + + + + + auto + baseline + before-edge + text-before-edge + middle + central + after-edge + text-after-edge + ideographic + alphabetic + hanging + mathematical + inherit + + + + + + + + + + + + ltr + rtl + inherit + + + + + + + auto + use-script + no-change + reset-size + ideographic + alphabetic + hanging + mathematical + central + middle + text-after-edge + text-before-edge + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + start + middle + end + inherit + + + + + + + + + + + + normal + embed + bidi-override + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal + wider + narrower + ultra-condensed + extra-condensed + condensed + semi-condensed + semi-expanded + expanded + extra-expanded + ultra-expanded + inherit + + + + + + + normal + italic + oblique + inherit + + + + + + + normal + small-caps + inherit + + + + + + + normal + bold + bolder + lighter + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + 900 + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + sRGB + linearRGB + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + visible + hidden + scroll + auto + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + butt + round + square + inherit + + + + + + + + + miter + round + bevel + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + sRGB + linearRGB + inherit + + + + + + + + + auto + optimizeSpeed + optimizeQuality + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inline + block + list-item + run-in + compact + marker + table + inline-table + table-row-group + table-header-group + table-footer-group + table-row + table-column-group + table-column + table-cell + table-caption + none + inherit + + + + + + + + + auto + optimizeSpeed + optimizeQuality + inherit + + + + + + + + + visiblePainted + visibleFill + visibleStroke + visible + painted + fill + stroke + all + none + inherit + + + + + + + + + auto + optimizeSpeed + crispEdges + geometricPrecision + inherit + + + + + + + + + auto + optimizeSpeed + optimizeLegibility + geometricPrecision + inherit + + + + + + + + + visible + hidden + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + + + other + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + other + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + embed + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + new + replace + + + + + + onRequest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + disable + magnify + + + + + + 1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + align + stretch + + + + + + + auto + exact + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strokeWidth + userSpaceOnUse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + perceptual + relative-colorimetric + saturation + absolute-colorimetric + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + pad + reflect + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + pad + reflect + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal + multiply + screen + darken + lighten + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + matrix + saturate + hueRotate + luminanceToAlpha + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + over + in + out + atop + xor + arithmetic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + duplicate + wrap + none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + G + B + A + + + + + + + R + G + B + A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + erode + dilate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stitch + noStitch + + + + + + + fractalNoise + turbulence + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + disable + magnify + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + always + never + whenNotActive + + + + + + + + + + + + + remove + freeze + + + + + + + + + + + + + discrete + linear + paced + spline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + replace + sum + + + + + + + none + sum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + discrete + linear + paced + spline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + translate + scale + rotate + skewX + skewY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  + + + s + Sharp. + f + Flat. + ss + Double sharp (written as 2 sharps). + x + Double sharp (written using croix). + ff + Double flat. + xs + Triple sharp (written as a croix followed by a sharp). + sx + Triple sharp (written as a sharp followed by a croix). + ts + Triple sharp (written as 3 sharps). + tf + Triple flat. + n + Natural. + nf + Natural + flat; used to cancel preceding double flat. + ns + Natural + sharp; used to cancel preceding double sharp. + su + Sharp note raised by quarter tone (sharp modified by arrow). + sd + Sharp note lowered by quarter tone (sharp modified by arrow). + fu + Flat note raised by quarter tone (flat modified by arrow). + fd + Flat note lowered by quarter tone (flat modified by arrow). + nu + Natural note raised by quarter tone (natural modified by arrow). + nd + Natural note lowered by quarter tone (natural modified by arrow). + 1qf + 1/4-tone flat accidental. + 3qf + 3/4-tone flat accidental. + 1qs + 1/4-tone sharp accidental. + 3qs + 3/4-tone sharp accidental. + + + + + s + Sharp. + f + Flat. + ss + Double sharp. + ff + Double flat. + n + Natural. + su + Three quarter-tones sharp. + sd + Quarter-tone sharp. + fu + Quarter-tone flat. + fd + Three quarter-tones flat. + + + + + acc + Accent (Unicode 1D17B). + stacc + Staccato (Unicode 1D17C). + ten + Tenuto (Unicode 1D17D). + stacciss + Staccatissimo (Unicode 1D17E). + marc + Marcato (Unicode 1D17F). + spicc + Spiccato. + doit + Main note followed by short slide to higher, indeterminate pitch (Unicode 1D185). + scoop + Main note preceded by short slide from lower, indeterminate pitch (Unicode 1D186). + rip + Main note preceded by long slide from lower, often indeterminate pitch; also known as "squeeze". + plop + Main note preceded by "slide" from higher, indeterminate pitch. + fall + Main note followed by short "slide" to lower, indeterminate pitch. + longfall + Main note followed by long "slide" to lower, indeterminate pitch. + bend + "lip slur" to lower pitch, then return to written pitch. + flip + Main note followed by quick upward rise, then descent in pitch (Unicode 1D187). + smear + (Unicode 1D188). + shake + Alternation between written pitch and next highest overtone (brass instruments) or note minor third higher (woodwinds). + dnbow + Down bow (Unicode 1D1AA). + upbow + Up bow (Unicode 1D1AB). + harm + Harmonic (Unicode 1D1AC). + snap + Snap pizzicato (Unicode 1D1AD). + fingernail + Fingernail (Unicode 1D1B3). + damp + Stop harp string from sounding (Unicode 1D1B4). + dampall + Stop all harp strings from sounding (Unicode 1D1B5). + open + Full (as opposed to stopped) tone. + stop + "muffled" tone. + dbltongue + Double tongue (Unicode 1D18A). + trpltongue + Triple tongue (Unicode 1D18B). + heel + Use heel (organ pedal). + toe + Use toe (organ pedal). + tap + Percussive effect on guitar string(s). + lhpizz + Left-hand pizzicato. + dot + Uninterpreted dot. + stroke + Uninterpreted stroke. + + + + + 4 + + + + + mensur + Between staves only. + staff + Between and across staves as necessary. + takt + Short bar line through a subset of staff lines. + + + + + dashed + Dashed line (Unicode 1D104). + dotted + Dotted line. + dbl + (Unicode 1D101). + dbldashed + Double dashed line. + dbldotted + Double dotted line. + end + (Unicode 1D102). + invis + Bar line not rendered. + rptstart + Repeat start (Unicode 1D106). + rptboth + Repeat start and end. + rptend + Repeat end (Unicode 1D107). + single + (Unicode 1D100). + + + + + 0 + + + + + true + True. + false + False. + + + + + high + High certainty. + medium + Medium certainty. + low + Low certainty. + unknown + An unknown level of certainty. + + + + + + + + G + G clef (Unicode 1D11E). + GG + Double G clef. + F + F clef (Unicode 1D122). + C + C clef (Unicode 1D121). + perc + Drum clef (Unicode 1D125 or Unicode 1D126). + TAB + Tablature "clef"; i.e. usually "TAB" rendered vertically. + + + + + white + White keys. + black + Black keys. + chromatic + Mixed black and white keys. + + + + + 0 + 1 + + + + + aliceblue + Hex: #f0f8ff / RGB: 240,248,255 + antiquewhite + Hex: #faebd7 / RGB: 250,235,215 + aqua + Hex: #00ffff / RGB: 0,255,255 + aquamarine + Hex: #7fffd4 / RGB: 127,255,212 + azure + Hex: #f0ffff / RGB: 240,255,255 + beige + Hex: #f5f5dc / RGB: 245,245,220 + bisque + Hex: #ffe4c4 / RGB: 255,228,196 + black + Hex: #000000 / RGB: 0,0,0 + blanchedalmond + Hex: #ffebcd / RGB: 255,235,205 + blue + Hex: #0000ff / RGB: 0,0,255 + blueviolet + Hex: #8a2be2 / RGB: 138,43,226 + brown + Hex: #a52a2a / RGB: 165,42,42 + burlywood + Hex: #deb887 / RGB: 222,184,135 + cadetblue + Hex: #5f9ea0 / RGB: 95,158,160 + chartreuse + Hex: #7fff00 / RGB: 127,255,0 + chocolate + Hex: #d2691e / RGB: 210,105,30 + coral + Hex: #ff7f50 / RGB: 255,127,80 + cornflowerblue + Hex: #6495ed / RGB: 100,149,237 + cornsilk + Hex: #fff8dc / RGB: 255,248,220 + crimson + Hex: #dc143c / RGB: 220,20,60 + cyan + Hex: #00ffff / RGB: 0,255,255 + darkblue + Hex: #00008b / RGB: 0,0,139 + darkcyan + Hex: #008b8b / RGB: 0,139,139 + darkgoldenrod + Hex: #b8860b / RGB: 184,134,11 + darkgray + Hex: #a9a9a9 / RGB: 169,169,169 + darkgreen + Hex: #006400 / RGB: 0,100,0 + darkgrey + Hex: #a9a9a9 / RGB: 169,169,169 + darkkhaki + Hex: #bdb76b / RGB: 189,183,107 + darkmagenta + Hex: #8b008b / RGB: 139,0,139 + darkolivegreen + Hex: #556b2f / RGB: 85,107,47 + darkorange + Hex: #ff8c00 / RGB: 255,140,0 + darkorchid + Hex: #9932cc / RGB: 153,50,204 + darkred + Hex: #8b0000 / RGB: 139,0,0 + darksalmon + Hex: #e9967a / RGB: 233,150,122 + darkseagreen + Hex: #8fbc8f / RGB: 143,188,143 + darkslateblue + Hex: #483d8b / RGB: 72,61,139 + darkslategray + Hex: #2f4f4f / RGB: 47,79,79 + darkslategrey + Hex: #2f4f4f / RGB: 47,79,79 + darkturquoise + Hex: #00ced1 / RGB: 0,206,209 + darkviolet + Hex: #9400d3 / RGB: 148,0,211 + deeppink + Hex: #ff1493 / RGB: 255,20,147 + deepskyblue + Hex: #00bfff / RGB: 0,191,255 + dimgray + Hex: #696969 / RGB: 105,105,105 + dimgrey + Hex: #696969 / RGB: 105,105,105 + dodgerblue + Hex: #1e90ff / RGB: 30,144,255 + firebrick + Hex: #b22222 / RGB: 178,34,34 + floralwhite + Hex: #fffaf0 / RGB: 255,250,240 + forestgreen + Hex: #228b22 / RGB: 34,139,34 + fuchsia + Hex: #ff00ff / RGB: 255,0,255 + gainsboro + Hex: #dcdcdc / RGB: 220,220,220 + ghostwhite + Hex: #f8f8ff / RGB: 248,248,255 + gold + Hex: #ffd700 / RGB: 255,215,0 + goldenrod + Hex: #daa520 / RGB: 218,165,32 + gray + Hex: #808080 / RGB: 128,128,128 + green + Hex: #008000 / RGB: 0,128,0 + greenyellow + Hex: #adff2f / RGB: 173,255,47 + grey + Hex: #808080 / RGB: 128,128,128 + honeydew + Hex: #f0fff0 / RGB: 240,255,240 + hotpink + Hex: #ff69b4 / RGB: 255,105,180 + indianred + Hex: #cd5c5c / RGB: 205,92,92 + indigo + Hex: #4b0082 / RGB: 75,0,130 + ivory + Hex: #fffff0 / RGB: 255,255,240 + khaki + Hex: #f0e68c / RGB: 240,230,140 + lavender + Hex: #e6e6fa / RGB: 230,230,250 + lavenderblush + Hex: #fff0f5 / RGB: 255,240,245 + lawngreen + Hex: #7cfc00 / RGB: 124,252,0 + lemonchiffon + Hex: #fffacd / RGB: 255,250,205 + lightblue + Hex: #add8e6 / RGB: 173,216,230 + lightcoral + Hex: #f08080 / RGB: 240,128,128 + lightcyan + Hex: #e0ffff / RGB: 224,255,255 + lightgoldenrodyellow + Hex: #fafad2 / RGB: 250,250,210 + lightgray + Hex: #d3d3d3 / RGB: 211,211,211 + lightgreen + Hex: #90ee90 / RGB: 144,238,144 + lightgrey + Hex: #d3d3d3 / RGB: 211,211,211 + lightpink + Hex: #ffb6c1 / RGB: 255,182,193 + lightsalmon + Hex: #ffa07a / RGB: 255,160,122 + lightseagreen + Hex: #20b2aa / RGB: 32,178,170 + lightskyblue + Hex: #87cefa / RGB: 135,206,250 + lightslategray + Hex: #778899 / RGB: 119,136,153 + lightslategrey + Hex: #778899 / RGB: 119,136,153 + lightsteelblue + Hex: #b0c4de / RGB: 176,196,222 + lightyellow + Hex: #ffffe0 / RGB: 255,255,224 + lime + Hex: #00ff00 / RGB: 0,255,0 + limegreen + Hex: #32cd32 / RGB: 50,205,50 + linen + Hex: #faf0e6 / RGB: 250,240,230 + magenta + Hex: #ff00ff / RGB: 255,0,255 + maroon + Hex: #800000 / RGB: 128,0,0 + mediumaquamarine + Hex: #66cdaa / RGB: 102,205,170 + mediumblue + Hex: #0000cd / RGB: 0,0,205 + mediumorchid + Hex: #ba55d3 / RGB: 186,85,211 + mediumpurple + Hex: #9370db / RGB: 147,112,219 + mediumseagreen + Hex: #3cb371 / RGB: 60,179,113 + mediumslateblue + Hex: #7b68ee / RGB: 123,104,238 + mediumspringgreen + Hex: #00fa9a / RGB: 0,250,154 + mediumturquoise + Hex: #48d1cc / RGB: 72,209,204 + mediumvioletred + Hex: #c71585 / RGB: 199,21,133 + midnightblue + Hex: #191970 / RGB: 25,25,112 + mintcream + Hex: #f5fffa / RGB: 245,255,250 + mistyrose + Hex: #ffe4e1 / RGB: 255,228,225 + moccasin + Hex: #ffe4b5 / RGB: 255,228,181 + navajowhite + Hex: #ffdead / RGB: 255,222,173 + navy + Hex: #000080 / RGB: 0,0,128 + oldlace + Hex: #fdf5e6 / RGB: 253,245,230 + olive + Hex: #808000 / RGB: 128,128,0 + olivedrab + Hex: #6b8e23 / RGB: 107,142,35 + orange + Hex: #ffa500 / RGB: 255,165,0 + orangered + Hex: #ff4500 / RGB: 255,69,0 + orchid + Hex: #da70d6 / RGB: 218,112,214 + palegoldenrod + Hex: #eee8aa / RGB: 238,232,170 + palegreen + Hex: #98fb98 / RGB: 152,251,152 + paleturquoise + Hex: #afeeee / RGB: 175,238,238 + palevioletred + Hex: #db7093 / RGB: 219,112,147 + papayawhip + Hex: #ffefd5 / RGB: 255,239,213 + peachpuff + Hex: #ffdab9 / RGB: 255,218,185 + peru + Hex: #cd853f / RGB: 205,133,63 + pink + Hex: #ffc0cb / RGB: 255,192,203 + plum + Hex: #dda0dd / RGB: 221,160,221 + powderblue + Hex: #b0e0e6 / RGB: 176,224,230 + purple + Hex: #800080 / RGB: 128,0,128 + red + Hex: #ff0000 / RGB: 255,0,0 + rosybrown + Hex: #bc8f8f / RGB: 188,143,143 + royalblue + Hex: #4169e1 / RGB: 65,105,225 + saddlebrown + Hex: #8b4513 / RGB: 139,69,19 + salmon + Hex: #fa8072 / RGB: 250,128,114 + sandybrown + Hex: #f4a460 / RGB: 244,164,96 + seagreen + Hex: #2e8b57 / RGB: 46,139,87 + seashell + Hex: #fff5ee / RGB: 255,245,238 + sienna + Hex: #a0522d / RGB: 160,82,45 + silver + Hex: #c0c0c0 / RGB: 192,192,192 + skyblue + Hex: #87ceeb / RGB: 135,206,235 + slateblue + Hex: #6a5acd / RGB: 106,90,205 + slategray + Hex: #708090 / RGB: 112,128,144 + slategrey + Hex: #708090 / RGB: 112,128,144 + snow + Hex: #fffafa / RGB: 255,250,250 + springgreen + Hex: #00ff7f / RGB: 0,255,127 + steelblue + Hex: #4682b4 / RGB: 70,130,180 + tan + Hex: #d2b48c / RGB: 210,180,140 + teal + Hex: #008080 / RGB: 0,128,128 + thistle + Hex: #d8bfd8 / RGB: 216,191,216 + tomato + Hex: #ff6347 / RGB: 255,99,71 + turquoise + Hex: #40e0d0 / RGB: 64,224,208 + violet + Hex: #ee82ee / RGB: 238,130,238 + wheat + Hex: #f5deb3 / RGB: 245,222,179 + white + Hex: #ffffff / RGB: 255,255,255 + whitesmoke + Hex: #f5f5f5 / RGB: 245,245,245 + yellow + Hex: #ffff00 / RGB: 255,255,0 + yellowgreen + Hex: #9acd32 / RGB: 154,205,50 + + + + + + #[0-9A-Fa-f]{6,6} + + + #[0-9A-Fa-f]{8,8} + + + rgb\((\s*(([01]?[0-9]?[0-9])|2[0-4][0-9]|25[0-5])\s*,\s*){2}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*\) + + + rgba\(\s*(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*,\s*){3}(0(\.\d+)?|1(\.0+)?)\s*\)|rgba\(\s*(((\d{1,2})?%|100%)\s*,\s*){2}(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + + + hsl\(\s*((\d{1,2})|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|100%)\s*,\s*(\d{1,2}%|100%)\s*\) + + + hsla\(\s*(\d{1,2}|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|100%)\s*,\s*(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + + + + + + + + + + + + + + + + + + n + In a northern direction. + e + In an eastern direction. + s + In a southern direction. + w + In a western direction. + + + + + ne + In a north-eastern direction. + nw + In a north-western direction. + se + In a south-eastern direction. + sw + In a south-western direction. + + + + + 360.0 + -360.0 + + + + + + + + + + + paren + Parentheses: ( and ). + brack + Square brackets: [ and ]. + + + + + + + + + + + above + Above. + below + Below. + left + Left. + right + Right. + + + + + above-left + Above and left; north-west. + above-right + Above and right; north-east. + below-left + Below and left; south-west. + below-right + Below and right; south-east. + + + + + void + Unfilled + solid + Filled + top + Top half filled + bottom + Bottom half filled + left + Left half filled + right + Right half filled + + + + + + + + + + + + + + + + + + \d*(\.\d+)?(pt|vu) + + + + (pt|vu) + + + 0+(pt|vu) + + + 0+(\.0+)?(pt|vu) + + + \.0+(pt|vu) + + + + + + + + 1 + 9 + + + + + xx-small + Smaller than x-small. + x-small + Smaller than small, larger than xx-small. + small + Smaller than normal, larger than x-small. + normal + Smaller than large, larger than small. + large + Smaller than x-large, larger than normal. + x-large + Smaller than xx-large, larger than large. + xx-large + Larger than x-large. + smaller + One size smaller than the current size. + larger + One size larger than the current size. + + + + + italic + Text slants to right. + normal + Unadorned. + oblique + Text slants to the left. + + + + + bold + Bold or heavy. + normal + Not bold. + + + + + + + + + + + + quarter + Filled, rotated oval (Unicode 1D158). + half + Unfilled, rotated oval (Unicode 1D157). + whole + Unfilled, rotated oval (Unicode 1D15D). + backslash + Unfilled backslash (~ reflection of Unicode 1D10D). + circle + Unfilled circle (Unicode 25CB). + + + Plus sign (Unicode 1D144). + diamond + Unfilled diamond (Unicode 1D1B9). + isotriangle + Unfilled isosceles triangle (Unicode 1D148). + oval + Unfilled, unrotated oval (Unicode 2B2D). + piewedge + Unfilled downward-pointing wedge (Unicode 1D154). + rectangle + Unfilled rectangle (Unicode 25AD). + rtriangle + Unfilled right triangle (Unicode 1D14A). + semicircle + Unfilled semi-circle (Unicode 1D152). + slash + Unfilled slash (~ Unicode 1D10D). + square + Unfilled square (Unicode 1D146). + x + X (Unicode 1D143). + + + + + (#x|U\+)[A-F0-9]+ + + + + + left + Left aligned. + right + Right aligned. + center + Centered. + justify + Left and right aligned. + + + + + [AdMmP][0-9]+ + + + + + + u|d|s|n|sd|su + + + (\+|\-)?([AdMmP])?[0-9]+ + + + (\+|\-)?\d+(\.\d+)?hs + + + + + + + + + + + + + + + [0-9.,DHMPRSTWYZ/:+\-]+ + + + + + + + + + mixed|0|([1-9]|1[0-2])[f|s] + + + + + 1 + Single layer. + 2o + Two layers with opposing stems. + 2f + Two layers with 'floating' stems. + 3o + Three layers with opposing stems. + 3f + Three layers with 'floating' stems. + + + + + dashed + Dashed line. + dotted + Dotted line. + solid + Straight, uninterrupted line. + wavy + Undulating line. + + + + + angledown + 90 degree turn down (similar to Unicode 231D at end of line, 231C at start). + angleup + 90 degree turn up (similar to Unicode 231F at end of line, 231E at start). + angleright + 90 degree turn right (syntactic sugar for "angledown" for vertical or angled lines). + angleleft + 90 degree turn left (syntactic sugar for "angleup" for vertical or angled lines). + arrow + Filled, triangular arrowhead (similar to Unicode U+25C0 or SMuFL U+EB78). + arrowopen + Open triangular arrowhead (similar to Unicode U+02C3 or SMuFL U+EB8A). + arrowwhite + Unfilled, triangular arrowhead (similar to Unicode U+25C1 or SMuFL U+EB82). + harpoonleft + Harpoon-shaped arrowhead left of line (similar to arrowhead of Unicode U+21BD). + harpoonright + Harpoon-shaped arrowhead right of line (similar to arrowhead of Unicode U+21BC). + H + Hauptstimme (Unicode U+1D1A6 or SMuFL U+E860). + N + Nebenstimme (Unicode U+1D1A7 or SMuFL U+E861). + Th + Theme (SMuFL U+E864). + ThRetro + Theme, retrograde (SMuFL U+E865). + ThRetroInv + Theme, retrograde inversion (SMuFL U+E866). + ThInv + Theme, inverted (SMuFL U+E867). + T + Theme (SMuFL U+E868). + TInv + Theme, inverted (SMuFL U+E869). + CH + Choralemelodie (SMuFL U+E86A). + RH + Hauptrhythmus (SMuFL U+E86B). + none + No start/end symbol. + + + + + + + + + + + narrow + Default line width. + medium + Twice as wide as narrow. + wide + Twice as wide as medium. + + + + + ([0-9]+m\s*\+\s*)?[0-9]+(\.?[0-9]*)? + + + + + (\+|-)?[0-9]+m\+[0-9]+(\.[0-9]*)? + + + + + (\+)?\d+(\.\d+)?(cm|mm|in|pt|pc|px|vu)? + + + + + (\+|-)?\d+(\.\d+)?(cm|mm|in|pt|pc|px|vu)? + + + + + aln + Accented lower neighbor. + ant + Anticipation. + app + Appogiatura. + apt + Accented passing tone. + arp + Arpeggio tone (chordal tone). + arp7 + Arpeggio tone (7th added to the chord). + aun + Accented upper neighbor. + chg + Changing tone. + cln + Chromatic lower neighbor. + ct + Chord tone (i.e., not an embellishment). + ct7 + Chord tone (7th added to the chord). + cun + Chromatic upper neighbor. + cup + Chromatic unaccented passing tone. + et + Escape tone. + ln + Lower neighbor. + ped + Pedal tone. + rep + Repeated tone. + ret + Retardation. + 23ret + 2-3 retardation. + 78ret + 7-8 retardation. + sus + Suspension. + 43sus + 4-3 suspension. + 98sus + 9-8 suspension. + 76sus + 7-6 suspension. + un + Upper neighbor. + un7 + Upper neighbor (7th added to the chord). + upt + Unaccented passing tone. + upt7 + Unaccented passing tone (7th added to the chord). + + + + + C + Tempus imperfectum. + O + Tempus perfectum. + + + + + common + Common time; i.e. 4/4. + cut + Cut time; i.e. 2/2. + + + + + 0|([1-9]|1[0-5])o?|16o + + + + + + + + + + + Acoustic Grand Piano + Program #0. + Bright Acoustic Piano + Program #1. + Electric Grand Piano + Program #2. + Honky-tonk Piano + Program #3. + Electric Piano 1 + Program #4. + Electric Piano 2 + Program #5. + Harpsichord + Program #6. + Clavi + Program #7. + Celesta + Program #8. + Glockenspiel + Program #9. + Music_Box + Program #10. + Vibraphone + Program #11. + Marimba + Program #12. + Xylophone + Program #13. + Tubular Bells + Program #14. + Dulcimer + Program #15. + Drawbar Organ + Program #16. + Percussive Organ + Program #17. + Rock Organ + Program #18. + Church Organ + Program #19. + Reed Organ + Program #20. + Accordion + Program #21. + Harmonica + Program #22. + Tango Accordion + Program #23. + Acoustic Guitar (nylon) + Program #24. + Acoustic Guitar (steel) + Program #25. + Electric Guitar (jazz) + Program #26. + Electric Guitar (clean) + Program #27. + Electric Guitar (muted) + Program #28. + Overdriven Guitar + Program #29. + Distortion Guitar + Program #30. + Guitar harmonics + Program #31. + Acoustic Bass + Program #32. + Electric Bass (finger) + Program #33. + Electric Bass (pick) + Program #34. + Fretless Bass + Program #35. + Slap Bass 1 + Program #36. + Slap Bass 2 + Program #37. + Synth Bass 1 + Program #38. + Synth Bass 2 + Program #39. + Violin + Program #40. + Viola + Program #41. + Cello + Program #42. + Contrabass + Program #43. + Tremolo Strings + Program #44. + Pizzicato Strings + Program #45. + Orchestral Harp + Program #46. + Timpani + Program #47. + String Ensemble 1 + Program #48. + String Ensemble 2 + Program #49. + SynthStrings 1 + Program #50. + SynthStrings 2 + Program #51. + Choir Aahs + Program #52. + Voice Oohs + Program #53. + Synth Voice + Program #54. + Orchestra Hit + Program #55. + Trumpet + Program #56. + Trombone + Program #57. + Tuba + Program #58. + Muted Trumpet + Program #59. + French Horn + Program #60. + Brass Section + Program #61. + SynthBrass 1 + Program #62. + SynthBrass 2 + Program #63. + Soprano Sax + Program #64. + Alto Sax + Program #65. + Tenor Sax + Program #66. + Baritone Sax + Program #67. + Oboe + Program #68. + English Horn + Program #69. + Bassoon + Program #70. + Clarinet + Program #71. + Piccolo + Program #72. + Flute + Program #73. + Recorder + Program #74. + Pan Flute + Program #75. + Blown Bottle + Program #76. + Shakuhachi + Program #77. + Whistle + Program #78. + Ocarina + Program #79. + Lead 1 (square) + Program #80. + Lead 2 (sawtooth) + Program #81. + Lead 3 (calliope) + Program #82. + Lead 4 (chiff) + Program #83. + Lead 5 (charang) + Program #84. + Lead 6 (voice) + Program #85. + Lead 7 (fifths) + Program #86. + Lead 8 (bass + lead) + Program #87. + Pad 1 (new age) + Program #88. + Pad 2 (warm) + Program #89. + Pad 3 (polysynth) + Program #90. + Pad 4 (choir) + Program #91. + Pad 5 (bowed) + Program #92. + Pad 6 (metallic) + Program #93. + Pad 7 (halo) + Program #94. + Pad 8 (sweep) + Program #95. + FX 1 (rain) + Program #96. + FX 2 (soundtrack) + Program #97. + FX 3 (crystal) + Program #98. + FX 4 (atmosphere) + Program #99. + FX 5 (brightness) + Program #100. + FX 6 (goblins) + Program #101. + FX 7 (echoes) + Program #102. + FX 8 (sci-fi) + Program #103. + Sitar + Program #104. + Banjo + Program #105. + Shamisen + Program #106. + Koto + Program #107. + Kalimba + Program #108. + Bagpipe + Program #109. + Fiddle + Program #110. + Shanai + Program #111. + Tinkle Bell + Program #112. + Agogo + Program #113. + Steel Drums + Program #114. + Woodblock + Program #115. + Taiko Drum + Program #116. + Melodic Tom + Program #117. + Synth Drum + Program #118. + Reverse Cymbal + Program #119. + Guitar Fret Noise + Program #120. + Breath Noise + Program #121. + Seashore + Program #122. + Bird Tweet + Program #123. + Telephone Ring + Program #124. + Helicopter + Program #125. + Applause + Program #126. + Gunshot + Program #127. + Acoustic Bass Drum + Key #35. + Bass Drum 1 + Key #36. + Side Stick + Key #37. + Acoustic Snare + Key #38. + Hand Clap + Key #39. + Electric Snare + Key #40. + Low Floor Tom + Key #41. + Closed Hi Hat + Key #42. + High Floor Tom + Key #43. + Pedal Hi-Hat + Key #44. + Low Tom + Key #45. + Open Hi-Hat + Key #46. + Low-Mid Tom + Key #47. + Hi-Mid Tom + Key #48. + Crash Cymbal 1 + Key #49. + High Tom + Key #50. + Ride Cymbal 1 + Key #51. + Chinese Cymbal + Key #52. + Ride Bell + Key #53. + Tambourine + Key #54. + Splash Cymbal + Key #55. + Cowbell + Key #56. + Crash Cymbal 2 + Key #57. + Vibraslap + Key #58. + Ride Cymbal 2 + Key #59. + Hi Bongo + Key #60. + Low Bongo + Key #61. + Mute Hi Conga + Key #62. + Open Hi Conga + Key #63. + Low Conga + Key #64. + High Timbale + Key #65. + Low Timbale + Key #66. + High Agogo + Key #67. + Low Agogo + Key #68. + Cabasa + Key #69. + Maracas + Key #70. + Short Whistle + Key #71. + Long Whistle + Key #72. + Short Guiro + Key #73. + Long Guiro + Key #74. + Claves + Key #75. + Hi Wood Block + Key #76. + Low Wood Block + Key #77. + Mute Cuica + Key #78. + Open Cuica + Key #79. + Mute Triangle + Key #80. + Open Triangle + Key #81. + + + + + 0|([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-7]))o?|128o + + + + + + + + + + + + + + + + + major + Major mode. + minor + Minor mode. + dorian + Dorian mode. + phrygian + Phrygian mode. + lydian + Lydian mode. + mixolydian + Mixolydian mode. + aeolian + Aeolian mode. + locrian + Locrian mode. + + + + + preceding + Temporal predecessor of the resource. + succeeding + Temporal successor to the resource. + original + Original form of the resource. + host + Parent containing the resource. + constituent + Intellectual or physical component of the resource. + otherVersion + Version of the resource's intellectual content not changed enough to be a different work. + otherFormat + Version of the resource in a different physical format. + isReferencedBy + Published bibliographic description, review, abstract, or index of the resource's content. + references + Cited or referred to in the resource. + + + + + + + + + + + + + + botmar + At the foot of the page. + topmar + At the top of the page. + leftmar + At the left of the page. + rightmar + At the right of the page. + facing + On the opposite, i.e. facing, page. + overleaf + On the other side of the leaf. + end + At the end of this division; e.g., chapter, volume, etc. + inter + Within a line text; i.e., an insertion. + intra + Between the lines of text, less exact than "sub" or "super". + super + Above a line of text, more exact than "intra(linear)". Do not confuse with superscript rendition. + sub + Below a line of text, more exact than "intra(linear)". Do not confuse with subscript rendition. + inspace + In a predefined space; i.e., that left by an earlier scribe. + superimposed + Obscures original text; e.g., via overstrike, addition of new writing surface material, etc. + + + + + cmn + Common Music Notation. + mensural + Mensural notation. + mensural.black + Black mensural notation. + mensural.white + White mensural notation. + neume + Neumatic notation. + tab + Tablature notation. + + + + + + + + + + + slash + Slash (upper right to lower left). + backslash + Backslash (upper left to lower right). + vline + Vertical line. + hline + Horizontal line. + centerdot + Center dot. + paren + Enclosing parentheses. + brack + Enclosing square brackets. + box + Enclosing box. + circle + Enclosing circle. + dblwhole + Enclosing "fences". + + + + + + centertext\((A|B|C|D|E|F|G)(f|♭|n|♮|s|♯)?\) + + + centertext\(H(s|♯)?\) + + + + + + 9 + + + + + 8|15|22 + + + + + 1 + 2 + + + + + [0-9]+(\.?[0-9]*)?% + + + + + (([0-9]|[1-9][0-9])(\.[0-9]+)?|100)% + + + + + (\+|-)?(([0-9]|[1-9][0-9])(\.[0-9]+)?|100)% + + + + + + + + 11 + + + + + [a-g] + + + + + [a-g]|none + + + + + + + + + + + + + + + + + + + + + + + + + + + + none + No rotation. + down + Rotated 180 degrees. + left + Rotated 270 degrees clockwise. + ne + Rotated 45 degrees clockwise. + nw + Rotated 315 degrees clockwise. + se + Rotated 135 degrees clockwise. + sw + Rotated 225 degrees clockwise. + + + + + (\^|v)?[1-7](\+|\-)? + + + + + 1 + 6 + + + + + + + + + + + accid + Accidentals. + annot + Annotations. + artic + Articulations. + dir + Directives. + dynam + Dynamics. + harm + Harmony indications. + ornam + Ornaments. + sp + Spoken text. + stageDir + Stage directions. + tempo + Tempo markings. + + + + + + + + + + + + + + above + Above the staff. + below + Below the staff. + + + + + between + Between staves. + within + Within/on the staff. + + + + + + + + + + + up + Stem points upwards. + down + Stem points downwards. + + + + + left + Stem points left. + right + Stem points right. + ne + Stem points up and right. + se + Stem points down and right. + nw + Stem points up and left. + sw + Stem points down and left. + + + + + none + No modifications to stem. + 1slash + 1 slash through stem. + 2slash + 2 slashes through stem. + 3slash + 3 slashes through stem. + 4slash + 4 slashes through stem. + 5slash + 5 slashes through stem. + 6slash + 6 slashes through stem. + sprech + X placed on stem. + z + Z placed on stem. + + + + + left + Stem attached to left side of note head. + right + Stem attached to right side of note head. + center + Stem is originates from center of note head. + + + + + equal + Equal or 12-tone temperament. + just + Just intonation. + mean + Meantone intonation. + pythagorean + Pythagorean tuning. + + + + + + + + quote + Surrounded by single quotes. + quotedbl + Surrounded by double quotes. + italic + Italicized (slanted to right). + oblique + Oblique (slanted to left). + smcaps + Small capitals. + bold + Relative font weight. + bolder + Relative font weight. + lighter + Relative font weight. + box + Enclosed in box. + circle + Enclosed in ellipse/circle. + dbox + Enclosed in diamond. + tbox + Enclosed in triangle. + bslash + Struck through by '\' (back slash). + fslash + Struck through by '/' (forward slash). + line-through + Struck through by '-'; may be qualified to indicate multiple parallel lines, e.g. line-through(2). + none + Not rendered, invisible. + overline + Line above the text; may be qualified to indicate multiple parallel lines, e.g. overline(3). + overstrike + Use for deleted text fully or partially obscured by other text (such as 'XXXXX') or musical symbols (such as notes, rests, etc.). + strike + Struck through by '-'; equivalent to line-through; may be qualified to indicate multiple parallel lines, e.g. strike(3). + sub + Subscript. + sup + Superscript. + superimpose + Use for added text or musical symbols that fully or partially obscure text from an earlier writing stage. + underline + Underlined; may be qualified to indicate multiple parallel lines, e.g. underline(2). + x-through + Crossed-out; equivalent to 'bslash' (\) plus 'fslash' (/); that is, a hand-written 'X'; may be qualified to indicate multiple parallel lines, e.g. x-through(2). + ltr + Left-to-right (BIDI embed). + rtl + Right-to-left (BIDI embed). + lro + Left-to-right (BIDI override). + rlo + Right-to-left (BIDI override). + + + + + + (underline|overline|line-through|strike|x-through)\(\d+\) + + + (letter-spacing|line-height)\((\+|-)?\d+(\.\d+)?%?\) + + + + + + + + + + + + + + + + + + top + Top aligned. + middle + Middle aligned. + bottom + Bottom aligned. + baseline + Baseline aligned. + + + + + (\p{L}|\p{N}|\p{P}|\p{S})* + + + + + hasAbridgement + Target is an abridgement, condensation, or expurgation of the current entity. + isAbridgementOf + Reciprocal relationship of hasAbridgement. + hasAdaptation + Target is an adaptation, paraphrase, free translation, variation (music), harmonization (music), or fantasy (music) of the current entity. + isAdaptationOf + Reciprocal relationship of hasAdaptation. + hasAlternate + Target is an alternate format or simultaneously released edition of the current entity. + isAlternateOf + Reciprocal relationship of hasAlternate. + hasArrangement + Target is an arrangement (music) of the current entity. + isArrangementOf + Reciprocal relationship of hasArrangement. + hasComplement + Target is a cadenza, libretto, choreography, ending for unfinished work, incidental music, or musical setting of a text of the current entity. + isComplementOf + Reciprocal relationship of hasComplement. + hasEmbodiment + Target is a physical embodiment of the current abstract entity; describes the expression-to-manifestation relationship. + isEmbodimentOf + Reciprocal relationship of hasEmbodiment. + hasExemplar + Target is an exemplar of the class of things represented by the current entity; describes the manifestation-to-item relationship. + isExemplarOf + Reciprocal relationship of hasExamplar. + hasImitation + Target is a parody, imitation, or travesty of the current entity. + isImitationOf + Reciprocal relationship of hasImitation. + hasPart + Target is a chapter, section, part, etc.; volume of a multivolume manifestation; volume/issue of serial; intellectual part of a multi-part work; illustration for a text; sound aspect of a film; soundtrack for a film on separate medium; soundtrack for a film embedded in film; monograph in a series; physical component of a particular copy; the binding of a book of the current entity. + isPartOf + Reciprocal relationship of hasPart. + hasRealization + Target is a realization of the current entity; describes the work-to-expression relationship. + isRealizationOf + Reciprocal relationship of hasRealization. + hasReconfiguration + Target has been reconfigured: bound with, split into, extracted from the current entity. + isReconfigurationOf + Reciprocal relationship of hasReconfiguration. + hasReproduction + Target is a reproduction, microreproduction, macroreproduction, reprint, photo-offset reprint, or facsimile of the current entity. + isReproductionOf + Reciprocal relationship of hasReproduction. + hasRevision + Target is a revised edition, enlarged edition, or new state (graphic) of the current entity. + isRevisionOf + Reciprocal relationship of hasRevision. + hasSuccessor + Target is a sequel or succeeding work of the current entity. + isSuccessorOf + Reciprocal relationship of hasSuccessor. + hasSummarization + Target is a digest or abstract of the current entity. + isSummarizationOf + Reciprocal relationship of hasSummarization. + hasSupplement + Target is an index, concordance, teacher's guide, gloss, supplement, or appendix of the current entity. + isSupplementOf + Reciprocal relationship of hasSupplement. + hasTransformation + Target is a dramatization, novelization, versification, or screenplay of the current entity. + isTransformationOf + Reciprocal relationship of hasTransformation. + hasTranslation + Target is a literal translation or transcription (music) of the current entity. + isTranslationOf + Reciprocal relationship of hasTranslation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + byte + Bytes. + smil + Synchronized Multimedia Integration Language. + midi + MIDI clicks. + mmc + MIDI machine code. + mtc + MIDI time code. + smpte-25 + SMPTE 25 EBU. + smpte-24 + SMPTE 24 Film Sync. + smpte-df30 + SMPTE 30 Drop. + smpte-ndf30 + SMPTE 30 Non-Drop. + smpte-df29.97 + SMPTE 29.97 Drop. + smpte-ndf29.97 + SMPTE 29.97 Non-Drop. + tcf + AES Time-code character format. + time + ISO 24-hour time format: HH:MM:SS.ss. + + + + + + + + + + Contains classification of the notation contained or described by the element bearing this attribute. + + + + + + + + Provides any sub-classification of the notation contained or described by the element, additional to that given by its notationtype attribute. + + + + + + + An element with a notationsubtype attribute must have + a notationtype attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates to what degree the harmonic label is supported by the notation. + + explicit + The notation contains all the notes necessary for the harmonic label, e.g., the notes "D F♯ A" for the harmonic label "D". + implied + The harmonic label relies on notes implied, but not actually present, in the notation, e.g., the notes "D F♯ C" for the harmonic label "D7". The note "A" is missing from the notation, but can be implied. + + + + + + + + + + + Captures scale degree information using Humdrum **deg syntax -- an optional indicator of melodic approach (^ = ascending approach, v = descending approach), a scale degree value (1 = tonic ... 7 = leading tone), and an optional indication of chromatic alteration, "1", "v7", "^1", or "v5+", for example. The amount of chromatic alternation is not indicated. + + + + + + + + + + + + + + + + + Encodes the harmonic interval between pitches occurring at the same time. + + + + + + + + + + + + + + + Encodes the melodic interval from the previous pitch. The value may be a general directional indication (u, d, s, etc.), an indication of diatonic interval direction, quality, and size, or a precise numeric value in half steps. + + + + + + + + + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + + + + + + Contains an accidental for the tonic key, if one is required, e.g., if key.pname equals 'c' and key.accid equals 's', then a tonic of C# is indicated. + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + Holds the pitch name of the tonic key, e.g. 'c' for the key of C. + + + + + + + + + + + + + + + + + + + + + + + Describes melodic function using Humdrum **embel syntax. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds pitch class information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains sol-fa designation, e.g., do, re, mi, etc., in either a fixed or movable Do system. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (MEI corpus) – A group of related MEI documents, consisting of a header for the group, and one or more mei elements, each with its own complete header. + + + + + + + + + + + + + + + + + + + Classifies the cause for the variant reading, according to any appropriate typology of possible origins. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (apparatus) – Contains one or more alternative encodings. + + + + + + + + + + + + + + (lemma) – Contains the lemma, or base text, of a textual variation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (reading) – Contains a single reading within a textual variation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (speech) – Contains an individual speech in a performance text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + Must not have any of the attributes: startid, endid, tstamp, tstamp2, tstamp.ges, + tstamp.real, startho, endho, to, startto, endto, staff, layer, place, or + plist. + + + + + + + + + + + + + + + (stage direction) – Contains any kind of stage direction within a dramatic text or fragment. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + Must not have any of the attributes: startid, endid, tstamp, tstamp2, tstamp.ges, + tstamp.real, startho, endho, to, startto, endto, staff, layer, place, or + plist. + + + + + + + + + + + + + + + + + + + Signifies the causative agent of damage, illegibility, or other loss of original text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds a short phrase describing the reason for missing textual material (gap), why material is supplied (supplied), or why transcription is difficult (unclear). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (abbreviation) – A generic element for 1) a shortened form of a word, including an acronym or 2) a shorthand notation. + + + + + + + + + + + + + + + + + + + + + + + + + + Records the expansion of a text abbreviation. + + + + + + + + + (addition) – Marks an addition to the text. + + + + + + + + + + + + + + + + + + + + + + + + + Location of the addition. + + + + + + + + + + + + + Groups a number of alternative encodings for the same point in a text. + + + + + + + + + + (correction) – Contains the correct form of an apparent erroneous passage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (copy/colla parte mark) – A verbal or graphical indication to copy musical material written elsewhere. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2 + + + + + + + + + + + + + + Contains an area of damage to the physical medium. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records the degree of damage. + + + + + + + + + (deletion) – Contains information deleted, marked as deleted, or otherwise indicated as superfluous or spurious in the copy text by an author, scribe, annotator, or corrector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (expansion) – Contains the expansion of an abbreviation. + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures the abbreviated form of the text. + + + + + + + + + Indicates a point where material has been omitted in a transcription, whether as part of sampling practice or for editorial reasons described in the MEI header. + + + + + + + + + + + + Marks the beginning of a passage written in a new hand, or of a change in the scribe, writing style, ink or character of the document hand. + + + + + + + + Describes the character of the new hand. + + + + + + Identifies the new hand. The value must contain the ID of a hand element given elsewhere in the document. + + + + + + @new attribute should + have content. + The value in @new should correspond to the @xml:id attribute of a hand + element. + + + + + Identifies the old hand. The value must contain the ID of a hand element given elsewhere in the document. + + + + + + @old attribute should + have content. + The value in @old should correspond to the @xml:id attribute of a hand + element. + + + + + + + + A graphical or textual statement with additional / explanatory information about the musical text. The textual consequences of this intervention are encoded independently via other means; that is, with elements such as <add>, <del>, etc. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real + + + + + + + + + + + + + Describes the purpose of the metaMark. +Suggested values include: 1] confirmation; 2] addition; 3] deletion; 4] substitution; 5] clarification; 6] question; 7] investigation; 8] restoration; 9] navigation + + confirmation + confirmation of a previous textual decision; i.e., cancellation of a deleted passage in a different writing medium. + addition + denoted material is to be inserted in the musical text. + deletion + denoted material is no longer part of the musical text. + substitution + denoted material is replaced, either by the musical text pointed at with the @target attribute or the musical content of the metaMark element itself. + clarification + attempt to clarify a potentially illegible or otherwise unclear part of the musical text. + question + marks a section of the musical text which is to be considered further. + investigation + marks a section of the musical text as an investigation of the consequences of certain compositional decisions or potential alternatives. + restoration + declares a formerly cancelled part of the musical text as valid again. + navigation + clarification of the reading order of the musical text. + + + + + + + + + + (original) – Contains material which is marked as following the original, rather than being normalized or corrected. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (regularization) – Contains material which has been regularized or normalized in some sense. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates restoration of material to an earlier state by cancellation of an editorial or authorial marking or instruction. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a description of the means of restoration, 'stet' or 'strike-down', for example. + + + + + + + + + Contains apparently incorrect or inaccurate material. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (substitution) – Groups transcriptional elements when the combination is to be regarded as a single intervention in the text. + + + + + + + + + + + + + Contains material supplied by the transcriber or editor for any reason. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains material that cannot be transcribed with certainty because it is illegible or inaudible in the source. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A name or label associated with the controlled vocabulary from which the value of glyph.name or glyph.num is taken. +Suggested values include: 1] smufl + + smufl + Standard Music Font Layout. + + + + + + + + + Glyph name. + + + + + + + @glyph.name attribute + should have content. + + + + + + Numeric glyph reference in hexadecimal notation, e.g. "#xE000" or "U+E000". N.B. SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + + SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + The web-accessible location of the controlled vocabulary from which the value of glyph.name or glyph.num is taken. + + + + + + + + + + + Permits the current element to reference a facsimile surface or image zone which corresponds to it. + + + + + + + + + + + @facs attribute should + have content. + Each value in @facs should correspond to the @xml:id attribute of a surface or zone + element. + + + + + Contains a representation of a written source in the form of a set of images rather than as transcribed or encoded text. + + + + + + + + + + + + + + Defines a writing surface in terms of a rectangular coordinate space, optionally grouping one or more graphic representations of that space, and rectangular zones of interest within it. + + + + + + + + + + + + + + + + + + + + Defines an area of interest within a surface or graphic file. + + + + + + + + + + + + + + + + + + + + The number of columns spanned by this cell. + + + + + + + + The number of rows spanned by this cell. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (figure) – Groups elements representing or containing graphic information such as an illustration or figure. + + + + + + + + + + + + + + + + + + + (figure description) – Contains a brief prose description of the appearance or content of a graphic figure, for use when documenting an image without displaying it. + + + + + + + + + + + + + + + + + + + Indicates the location of an inline graphic. + + + + + + Graphic child of zone should not have + children. + + + + + Graphic should have either a + startid attribute or ulx and uly attributes. + + + + + Graphic should not have @ulx or @uly + attributes. + Graphic should not have @ho or @vo + attributes. + + + + + + + + + + + + + Indicates the upper-left corner x coordinate. + + + + + + Indicates the upper-left corner y coordinate. + + + + + + + + + Contains text displayed in tabular form. + + + + + + + + + + + + + + + + + + + (table data) – Designates a table cell that contains data as opposed to a cell that contains column or row heading information. + + + + + + + + + + + + + + + + + + + + (table header) – Designates a table cell containing column or row heading information as opposed to one containing data. + + + + + + + + + + + + + + + + + + + + (table row) – A formatting element that contains one or more cells (intersection of a row and a column) in a table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Intellectual or artistic realization of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gathers bibliographic expression entities. + + + + + + + + + + + + + Single instance or exemplar of a source/manifestation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gathers bibliographic item entities. + + + + + + + + + + + + + A bibliographic description of a physical embodiment of an expression of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Item children are not permitted when @singleton + equals "true". + + + + + + + + + + + + + + + + + + + + + + A container for the descriptions of physical embodiments of an expression of a work. + + + + + + + + + + + + + + + + + + The @instant attribute is syntactic sugar for classifying a scribal intervention as an ad-hoc modification; that is, one which does not interrupt the writing process. + + + unknown + + + + + + + + Points to the genetic state that results from this modification. + + + + + + + + + + + @state attribute should + have content. + The value in @state should correspond to the @xml:id attribute of a genState + element. + + + + + (genetic description) - Bundles information about the textual development of a work. + + + + + + + + + + + When set to "true" the child elements are known to be in chronological order. When set to "false" or when not provided, the order of child elements is unknown. + + + + + + + + + Describes a distinctive state in the textual development of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records the performed pitch inflection. + + + + + + + The value of @accid.ges should + not duplicate the value of @accid. + + + + + + + + + + + + + + + + + + + + Records performed articulation that differs from the written value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the performance of the next musical division should begin immediately following this one. + + + + + + + + + + + + + + + + + + + + + + + Records performed duration information that differs from the written duration. + + + + + + + + Number of dots required for a gestural duration when different from that of the written duration. + + + + + + + + Duration as a count of units provided in the time signature denominator. + + \d+(\.\d+)? + + + + + + + + Duration recorded as pulses-per-quarter note, e.g. MIDI clicks or MusicXML divisions. + + + + + + + + Duration in seconds, e.g. '1.732'. + + \d+(\.\d+)? + + + + + + + + Duration as an optionally dotted Humdrum *recip value. + + \d+(\.)* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records performed octave information that differs from the written value. + + + + + + + + Contains a performed pitch name that differs from the written value. + + + + + + + + Holds a pitch-to-number mapping, a base-40 or MIDI note number, for example. + + + + + + + + + + + + + + + + + + + + + + + + + Indicates an extreme, indefinite performed pitch. + + highest + Highest note the performer can play. + lowest + Lowest note the performer can play. + + + + + + + + Records performed octave information that differs from the written value. + + + + + + + + Contains a performed pitch name that differs from the written value. + + + + + + + + Holds a pitch-to-number mapping, a base-40 or MIDI note number, for example. + + + + + + + When the @extremis attribute is used, + the @pname.ges and @oct.ges attributes are not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds the pitch name of a tuning reference pitch. + + + + + + + + Holds a value for cycles per second, i.e., Hertz, for a tuning reference pitch. + + + + + + + + Provides an indication of the tuning system, 'just', for example. + + + + + + + + + + + Indicates that the performance of the next section should begin immediately following this one. + + + + + + + + + + + + + + + The lateral or left-to-right plane. + + + + + + + + The above-to-below axis. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Encodes the onset time in terms of musical time, i.e., beats[.fractional beat part], as expressed in the written time signature. + + + + + + + + Records the onset time in terms of ISO time. + + + + + + + + + + + + Encodes the ending point of an event, i.e., a count of measures plus a beat location in the ending measure. + + + + + + + + Records the ending point of an event in terms of ISO time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a reference to a chordDef element elsewhere in the document. + + + + + + + @chordref attribute + should have content. + The value in @chordref should correspond to the @xml:id attribute of a chordDef + element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (chord definition) – Chord tablature definition. + + + + + + + + + + + + + + An individual pitch in a chord defined by a chordDef element. + + + + + + + + + + + + Chord/tablature look-up table. + + + + + + + + + + (figure) – Single element of a figured bass indication. + + + + + + + + + + + + + + + + + + + + (figured bass) – Symbols added to a bass line that indicate harmony. Used to improvise a chordal accompaniment. Sometimes called Generalbass, thoroughbass, or basso continuo. + + + + + + + + + + + + + + + (harmony) – An indication of harmony, e.g., chord names, tablature grids, harmonic analysis, figured bass. + + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + + + + + + + A reference to a surface element positioned on the outer recto side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the inner verso side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the inner recto side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the outer verso side of a (folded) sheet. + + + + + + + + + + + + A reference to a surface element positioned on the recto side of the sheet. + + + + + + + + A reference to a surface element positioned on the verso side of the sheet. + + + + + + + + + + + + + a + Language material. + c + Notated music. + d + Manuscript notated music. + e + Non-manuscript cartographic material. + f + Manuscript cartographic material. + g + Projected medium. + i + Nonmusical sound recording. + j + Musical sound recording. + k + Two-dimensional nonprojectable graphic. + m + Computer file. + o + Kit. + p + Mixed materials. + r + Three-dimensional artifact or naturally occurring object. + t + Manuscript language material. + + + + + + + + + + + Indicates the method employed to mark corrections and normalizations. + + silent + Corrections and normalizations made silently. + tags + Corrections and normalizations indicated using elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Container for intellectual or physical component parts of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + + Only child elements of the same name as the parent of the componentList are + allowed. + + + + + When any child + element has a comptype attribute, it is recommended that comptype appear on all child + elements. + + + + + + + + + (access restriction) – Describes the conditions that affect the accessibility of material. + + + + + + + + + + + Records information concerning the process by which an item was acquired by the holding institution. + + + + + + + + + + + (alternative identifier) – May contain a bibliographic identifier that does not fit within the meiHead element's id attribute, for example because the identifier does not fit the definition of an XML id or because multiple identifiers are needed. + + + + + + + + + + + + + + + (application information) – Groups information about applications which have acted upon the MEI file. + + + + + + + + + + + + + Provides information about an application which has acted upon the current document. + + + + + + + + + + + + + + + + Supplies a version number for an application, independent of its identifier or display name. + + + + + + + + + Documents the usage of a specific attribute of the element. + + + + + + @context attribute should + contain an XPath expression. + + + + + + Name of the attribute. + + + + + Circumstances in which the element appears, an XPath expression. + + + + + + + + + Defines the class of user for which the work is intended, as defined by age group (e.g., children, young adults, adults, etc.), educational level (e.g., primary, secondary, etc.), or other categorization. + + + + + + + + + + + Groups elements that describe the availability of and access to a bibliographic item, including an MEI-encoded document. + + + + + + + + + + Describes a folded sheet of paper. + + + + + + + + + + + + + + + + + + + + + + Contains the primary statement of responsibility given for a work on its title page. + + + + + + + + + + + + + + + + + (capture mode) – The means used to record notation, sound, or images in the production of a source/manifestation (e.g., analogue, acoustic, electric, digital, optical etc.). + + + + + + + + + + + (carrier form) – The specific class of material to which the physical carrier of the source/manifestation belongs (e.g., sound cassette, videodisc, microfilm cartridge, transparency, etc.). The carrier for a manifestation comprising multiple physical components may include more than one form (e.g., a filmstrip with an accompanying booklet, a separate sound disc carrying the sound track for a film, etc.). + + + + + + + + + + + Contains an individual descriptive category in a user-defined taxonomy, possibly nested within a superordinate category. + + + + + + + + + + + + + + + + + + To be addressable, the category element must + have an xml:id attribute. + + + + + + + + + + + + (category relationship) – Contains the name of a related category. + + + + + + + + + + + + + + + Provides a description of the relationship between the current and the target categories. + + broader + Category to which the current category is hierarchically subordinate. + narrower + Category which is hierarchically subordinate to the current category. + related + Category that is associatively but not hierarchically linked to the current category. + usefor + Non-preferred category; often a synonym or near-synonym for the preferred category label. + + + + + + + + Individual change within the revision description. + + + + + + + + + + The date of the change must be recorded in an + isodate attribute or date element. + It is recommended that the agent responsible for the change be recorded + in a resp attribute or in a name, corpName, or persName element in the respStmt + element. + + + + + + + + + + + (change description) – Description of a revision of the MEI file. + + + + + + + + + + + + Groups information which describes the nature or topic of an entity. + + + + + + + + + + + + + + Groups information which describes the nature or topic of an entity. + + + + + + + + + + + + + + + The physical condition of an item, particularly any variances between the physical make-up of the item and that of other copies of the same item (e.g., missing pages or plates, brittleness, faded images, etc.). + + + + + + + + + + Contains a single entry within a content description element. + + + + + + + + + + + + + + + + + List of the material contained within a resource. + + + + + + + + + + + + + + + + + When labels + are used, usually each content item has one. + + + + + + + + + + + The historical, social, intellectual, artistic, or other context within which the work was originally conceived (e.g., the 17th century restoration of the monarchy in England, the aesthetic movement of the late 19th century, etc.) or the historical, social, intellectual, artistic, or other context within which the expression was realized. + + + + + + + + + + + States how and under what circumstances corrections have been made in the text. + + + + + + + + + + + + + + Indicates the degree of correction applied to the text. + + high + The text has been thoroughly checked and proofread. + medium + The text has been checked at least once. + low + The text has not been checked. + unknown + The correction status of the text is unknown. + + + + + + + + + A cutout is a section of a document sheet that has been removed and is now missing. + + + + + + + + + + + + + + Describes the position of the cutout on the parent folium / bifolium. + + outer.recto + removed from outer recto side of bifolium. + inner.verso + removed from inner verso side of bifolium. + inner.recto + removed from inner recto side of bifolium. + outer.verso + removed from outer verso side of bifolium. + recto + removed from recto side of folium. + verso + removed from verso side of folium. + + + + + Describes the method of removing the cutout. +Suggested values include: 1] cut; 2] rip + + cut + section is cleanly cut by a knife, scissor or other sharp blade. + rip + section is ripped off the page, leaving a rough edge. + + + + + + + + + + Contains a dedicatory statement. + + + + + + + + + + + + + + + + + + + + + + + + + + (domains declaration) – Indicates which domains are included in the encoding. + + + + + + + + + + + + + + + + + + + + + (edition statement) – Container for meta-data pertaining to a particular edition of the material being described. + + + + + + + + + + + + + + + + + + + + + (editorial declaration) – Used to provide details of editorial principles and practices applied during the encoding of musical text. + + + + + + + + + + + + + + + + + + + + + + + + + + (encoding description) – Documents the relationship between an electronic file and the source or sources from which it was derived as well as applications used in the encoding/editing process. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (exhibition history) – A record of public exhibitions, including dates, venues, etc. + + + + + + + + + + (extended metadata) – Provides a container element for non-MEI metadata formats. + + + + + + + + + + + + + + + (file characteristics) – Standards or schemes used to encode the file (e.g., ASCII, SGML, etc.), physical characteristics of the file (e.g., recording density, parity, blocking, etc.), and other characteristics that have a bearing on how the file can be processed. + + + + + + + + + + (file description) – Contains a full bibliographic description of the MEI file. + + + + + + + + + + + + + + + + + + + + + + + + + Contains a string that uniquely identifies an item, such as those constructed by combining groups of characters transcribed from specified pages of a printed item or a file's checksum. + + + + + + + + + + Describes the order of folia and bifolia making up the text block of a manuscript or print. + + + + + + + + + + + + + + + + + + Describes a single leaf of paper. + + + + + + + + + + + + + Defines a distinct scribe or handwriting style. + + + + + + + + + + + + + + Marks this hand as the first one of the document. + + + + + + + + + Container for one or more hand elements. + + + + + + + + + + + + When labels are used, + usually each hand has one. + + + + + + + + + + Provides a container for information about the history of a resource other than the circumstances of its creation. + + + + + + + + + + + + + + The acquisition and provenance + elements are not permitted in the work or expression context. + + + + + + + + + + Incipit coded in a non-XML, plain text format, such as Plaine & Easie Code. + + + + incipCode must have a form or mimetype + attribute. + + + + + + + + + + Form of the encoded incipit. +Suggested values include: 1] plaineAndEasie; 2] humdrumKern; 3] parsons + + plaineAndEasie + Plaine & Easie Code. + humdrumKern + Humdrum Kern format. + parsons + Parsons code. + + + + + + + + + + Opening words of a musical composition. + + + + + + + + + + + + + + + + + + + + An inscription added to an item, such as a bookplate, a note designating the item as a gift, and/or the author's signature. + + + + + + + + + + Describes the scope of any analytic or interpretive information added to the transcription of the music. + + + + + + + + + + + + + Key captures information about tonal center and mode. + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + + Description of a language used in the document. + + + + + + + + + + + + + + + + (language usage) – Groups elements describing the languages, sub-languages, dialects, etc., represented within the encoded resource. + + + + + + + + + + + + + + + (MEI header) – Supplies the descriptive and declarative metadata prefixed to every MEI-conformant text. + + + + + + + + + + + + + + + + + + + + + + The meiHead type attribute can have the value 'music' + only when the document element is "mei". + + + + + The meiHead type attribute can have the value + 'corpus' only when the document element is "meiCorpus". + + + + + The meiHead type attribute can have the value + 'independent' only when the document element is "meiHead". + + + + + + + + + + + Specifies the kind of document to which the header is attached, for example whether it is a corpus or individual text. + + music + Header is attached to a music document. + corpus + Header is attached to a corpus. + independent + Header is independent; i.e., not attached to either a music or a corpus document. + + + + + + + + + Captures information about mensuration within bibliographic descriptions. + + + + + + + + + + + Captures information about the time signature within bibliographic descriptions. + + + + + + + + + + + Supplies the formal name of the namespace to which the elements documented by its children belong. + + + + + + + + + + + + + + + Formal namespace identifier; that is, a uniform resource identifier (URI). + + + + + Prefix associated with the formal identifier. + + + + + + + + + Indicates the extent of normalization or regularization of the original source carried out in converting it to electronic form. + + + + + + + + + + + + + + + + + (notes statement)– Collects any notes providing information about a text additional to that recorded in other parts of the bibliographic description. + + + + + + + + + + + + + + (other distinguishing characteristic) – Any characteristic that serves to differentiate a work or expression from another. + + + + + + + + + + Describes a physical writing surface attached to the original document. + + + + + + + The allowed positions of a patch depend on its parent element. + A patch element must contain either a folium + or a bifolium element. + + + + + + + + + Describes the position of the patch on the parent folium / bifolium. + + outer.recto + patch attached to outer recto side of bifolium. + inner.verso + patch attached to inner verso side of bifolium. + inner.recto + patch attached to inner recto side of bifolium. + outer.verso + patch attached to outer verso side of bifolium. + recto + patch attached to recto side of folium. + verso + patch attached to verso side of folium. + + + + + Describes the method of attachment of the patch. +Suggested values include: 1] glue; 2] thread; 3] needle; 4] tape; 5] staple + + glue + patch is glued on surface beneath. + thread + patch is sewn on surface beneath. + needle + patch is pinned to the surface beneath. + tape + patch is taped on surface beneath using an adhesive strip. + staple + patch is attached on surface beneath using a staple. + + + + + + + + + + (performance duration) – Used to express the duration of performance of printed or manuscript music or the playing time for a sound recording, videorecording, etc. + + + + + + + + Holds a W3C duration value, e.g., "PT2H34M45.67S". + + + + + + + + + (performance medium) – Indicates the number and character of the performing forces used in a musical composition. + + + + + + + + + + + + + + + + + + + + + (performance resource) – Name of an instrument on which a performer plays, a performer's voice range, or a standard performing ensemble designation. + + + + + + + + + + + + + + + Indicates the number of performers. + + + + + + Marks this instrument or vocal part as a soloist. Do not use this attribute for a solo instrument which is not accompanied. + + + + + + + + + Several instrumental or vocal resources treated as a group. + + + + + + + + + + + + + + + + + + Indicates the number of performers. + + + + + + + + + (physical description) – Container for information about the appearance, construction, or handling of physical materials, such as their dimension, quantity, color, style, and technique of creation. + + + + + + + + + + + + + + + + + (physical medium) – Records the physical materials used in the source, such as ink and paper. + + + + + + + + + + + (plate number) – Designation assigned to a resource by a music publisher, usually printed at the bottom of each page, and sometimes appearing also on the title page. + + + + + + + + + + + Playing speed for a sound recording is the speed at which the carrier must be operated to produce the sound intended (e.g., 33 1/3 rpm, 19 cm/s, etc.). + + + + + + + + + + The cost of access to a bibliographic item. + + + + + + + + + + + + + + + Numeric value capturing a cost. Can only be interpreted in combination with the currency attribute. + + [0-9]+\.[0-9]{2} + + + + + + Monetary unit. + + + + + + + + + (project description) – Project-level meta-data describing the aim or purpose for which the electronic file was encoded, funding agencies, etc. together with any other relevant information concerning the process by which it was assembled or collected. + + + + + + + + + + + + + + + + The record of ownership or custodianship of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (publication statement) – Container for information regarding the publication or distribution of a bibliographic item, including the publisher's name and address, the date of publication, and other relevant details. + + + + + + + + + + + + + + + + + + + (revision description) – Container for information about alterations that have been made to an MEI file. + + + + + + + + + + + + + + (sampling declaration) – Contains a prose description of the rationale and methods used in sampling texts in the creation of a corpus or collection. + + + + + + + + + + + + + + + + Describes the type of score used to represent a musical composition (e.g., short score, full score, condensed score, close score, etc.). + + + + + + + + + + + Describes the principles according to which the musical text has been segmented, for example into movements, sections, etc. + + + + + + + + + + + + + + + + (series statement) – Groups information about the series, if any, to which a publication belongs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (sound channels) – Reflects the number of apparent sound channels in the playback of a recording (monaural, stereophonic, quadraphonic, etc.). + + + + + + + + + + + + + Records the channel configuration in numeric form. + + + + + + + + + A bibliographic description of a source used in the creation of the electronic file. + + + + + + + + + + + + + + + @target attribute should + have content. + Each value in @target should correspond to the @xml:id attribute of a source or + manifestation element or be an external URI. + + + + + + + + + + + + + + + + (source description) – A container for the descriptions of the source(s) used in the creation of the electronic file. + + + + + + + + + + + + + (special reproduction characteristic) – The equalization system, noise reduction system, etc. used in making the recording (e.g., NAB, DBX, Dolby, etc.). + + + + + + + + + + + (standard values) – Specifies the format used when standardized date or number values are supplied. + + + + + + + + + + + + + + + + (system requirements) – System requirements for using the electronic item. + + + + + + + + + + (tagging declaration) – Provides detailed information about the tagging applied to a document. + + + + + + + + + + + + + + + + + Documents the usage of a specific element within the document. + + + + + + + + + @context attribute should + contain an XPath expression. + + + + + + Name of the element. + + + + + Circumstances in which the element appears, an XPath expression. + + + + + + Number of occurrences in the defined context. + + + + + + Number of occurrences in the defined context that have an xml:id attribute. + + + + + + + + + Defines a typology either implicitly, by means of a bibliographic citation, or explicitly by a structured taxonomy. + + + + + + + + + + + + + + + + + + + + + + + Collection of text phrases which describe a resource. + + + + + + + + + + + + When labels are used, + usually each term has one. + + + + + + + + + + + (title statement) – Container for title and responsibility meta-data. + + + + + + + + + + + + + + + + + (track configuration) – Number of physical/input tracks on a sound medium (e.g., eight track, twelve track). + + + + + + + + Records the track configuration in numeric form. + + + + + + + + + (treatment history) – A record of the treatment the item has undergone (e.g., de-acidification, restoration, etc.). + + + + + + + + + + (treatment scheduled) – Scheduled treatment, e.g. de-acidification, restoration, etc., for an item. + + + + + + + + + + (unpublished) – Used to explicitly indicate that a bibliographic resource is unpublished. + + + + + + + + + + (usage restrictions) – Container for information about the conditions that affect use of a bibliographic item after access has been granted. + + + + + + + + + + + Contains a description of a watermark or similar device. + + + + + + + + + + + Provides a detailed description of a work — a distinct intellectual or artistic creation — specifically its history, language use, and high-level musical attributes (e.g., key, tempo, meter, medium of performance, and intended duration). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (work list) – Grouping mechanism for information describing non-bibliographic aspects of a text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Recurring lyrics, especially at the end of each verse or stanza of a poem or song lyrics; a chorus. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Division of a poem or song lyrics, sometimes having a fixed length, meter or rhyme scheme; a stanza. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sung text for a specific iteration of a repeated section of music. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records a MIDI channel value. + + + + + + + + Specifies the 'on' part of the duty cycle as a percentage of a note's duration. + + + + + + + + Sets the MIDI port value. + + + + + + + + Sets the MIDI track. + + + + + + + + + + + + + + Provides a way of pointing to a MIDI instrument definition. It must contain the ID of an instrDef element elsewhere in the document. + + + + + + + @instr attribute + should have content. + The value in @instr should correspond to the @xml:id attribute of an instrDef + element. + + + + + + + + + + + + + + + + + + + + + + + + + + Captures the General MIDI instrument number. Use an integer for a 0-based value. An integer preceded by "in" indicates a 1-based value. + + + + + + + + Provides a General MIDI label for the MIDI instrument. + + + + + + + + Sets the instrument's position in a stereo field. MIDI values of 0 and 1 both pan left, 127 or 128 pans right, and 63 or 64 pans to the center. Positve percentage values pan to the right, negative ones to the left. 0% is centered. + + + + + + + + Records a non-General MIDI patch/instrument name. + + + + + + + + Records a non-General MIDI patch/instrument number. + + + + + + + + Sets the instrument's volume. + + + + + + Only one of @midi.instrname and @midi.instrnum + allowed. + + + + + Only one of @midi.patchname and @midi.patchnum + allowed. + + + + + + + + MIDI number in the range set by data.MIDIVALUE. + + + + + + + + + + + Captures the number of *quarter notes* per minute. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. + + + + + + + + Records the number of microseconds per *quarter note*. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. At 120 quarter notes per minute, each quarter note will last 500,000 microseconds. + + + + + + + + + + + MIDI number. + + + + + + + + + + + MIDI number. + + + + + + + + + + + MIDI Note-on/off velocity. + + + + + + + + + + + Indicates the number of pulses (sometimes referred to as ticks or divisions) per quarter note. Unlike MIDI, MEI permits different values for a score and individual staves. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (control change) – MIDI parameter/control change. + + + + + + + + + + + (channel) – MIDI channel assignment. + + + + + MIDI number in the range set by data.MIDICHANNEL. + + + + + + + + (channel pressure) – MIDI channel pressure/after touch. + + + + + + + + + + MIDI cue point. + + + + + + + + + + Arbitrary MIDI data in hexadecimal form. + + + + + + + + + (instrument definition) – MIDI instrument declaration. + + + + + + + + + + + + (instrument group) – Collects MIDI instrument definitions. + + + + + + + + + + MIDI marker meta-event. + + + + + + + + + + MIDI text meta-event. + + + + + + + + + + Container for elements that contain information useful when generating MIDI output. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MIDI note-off event. + + + + + + + + + + MIDI note-on event. + + + + + + + + + + MIDI port. + + + + + + + + + + (program) – MIDI program change. + + + + + + + + + + (sequence number) – MIDI sequence number. + + + + + Number in the range 0-65535. + + 65535 + + + + + + + + (track name) – MIDI track/sequence name. + + + + + + + + + + (velocity) – MIDI Note-on/off velocity. + + + + + + Indicates whether this is note-on or note-off velocity data. + + on + Note-on velocity. + off + Note-off velocity. + + + + + + + + + + + + + + constituent + A physical and logical part of entity. + boundwith + A physical, but not logical component of the entity, usually included as part of the binding process. + separated + A logical component of the entity physically held elsewhere. + + + + + + + + The comptype attribute may occur on + only when it is a descendant of a + componentList. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds a description of any additional material bound with an item, such as non-contemporaneous documents or fragments. + + + + + + + + + + (addition description) – Provides a description of significant additions found within an item, such as marginalia or other annotations. + + + + + + + + + + (binding) – Contains a description of one binding, i.e. type of covering, boards, etc. applied to an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + (binding description) – Describes the present and former bindings of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the system used to ensure correct ordering of the quires making up an item, typically by means of annotations at the foot of the page. + + + + + + + + + + Records a description of how the leaves or bifolia of an item are physically arranged. + + + + + + + + + + Contains a statement providing information regarding the date, place, agency, or reason for production of the item. + + + + + + + + + + + (decoration description) – Contains a description of the decoration of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (decoration note) – Contains a description of one or more decorative features of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the explicit of a manuscript item; that is, the closing words of the text proper, exclusive of any rubric or colophon which might follow it. + + + + + + + + + + + Describes the numbering system or systems used to count the leaves or pages in a codex. + + + + + + + + + + Contains a heraldic formula or phrase, typically found as part of a blazon, coat of arms, etc. + + + + + + + + + + + Describes how text is laid out on the page, including information about any ruling, pricking, or other evidence of page-preparation techniques. + + + + + + + Specifies the number of columns per page. + + + + + + + + + + + Specifies the number of ruled text lines per column. + + + + + + + + + + + Specifies the number of written text lines per column. + + + + + + + + + + + Specifies the number of ruled staves per column. + + + + + + + + + + + Specifies the number of written staves per column. + + + + + + + + + + + + + + (layout description) – Collects layout descriptions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines a location within a manuscript or manuscript component, usually as a (possibly discontinuous) sequence of folio references. + + + + + + + + + + + + + + Identifies the foliation scheme in terms of which the location is being specified by pointing to some foliation element defining it, or to some other equivalent resource. + + + + + + Specifies the starting point of the location in a normalized form. + + + + + + Specifies the end-point of the location in a normalized form. + + + + + + + + + (locus group) – Groups locations which together form a distinct but discontinuous item within a manuscript or manuscript part, according to a specific foliation. + + + + + + + + + Identifies the foliation scheme in terms of which the location is being specified by pointing to some foliation element defining it, or to some other equivalent resource. + + + + + + + + + Contains a string of words through which a manuscript signals the beginning or end of a text division, often with an assertion as to its author and title, which is in some way set off from the text itself, usually in red ink, or by use of different size or type of script, or some other such visual device. + + + + + + + + + + initial + Signals beginning of a text division. + final + Makrs the end of a text division. + + + + + + + + + (script description) – Contains a description of the letters or characters used in an autographic item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (script note) – Describes a particular script distinguished within the description of an autographic item. + + + + + + + + + + A single seal or similar attachment. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (seal description) – Describes the seals or similar external attachments applied to an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (second folio) – Marks the word or words taken from a fixed point in a codex (typically the beginning of the second leaf) in order to provide a unique identifier for the item. + + + + + + + + + + + Provides a description of the leaf or quire signatures found within a codex. + + + + + + + + + + Contains a word or phrase describing an official mark indicating ownership, genuineness, validity, etc. + + + + + + + + + + + + Provides a description of the physical support material of a written item. + + + + + + + + + + + + + + + + + + + + (support description) – Groups elements describing the physical support material of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Short, project-defined name for the material composing the majority of the support. +Suggested values include: 1] paper; 2] parch; 3] mixed + + paper + Paper. + parch + Parchment. + mixed + Mixed materials. + + + + + + + + + + (type description) – Contains a description of the typefaces or other aspects of the printing of a printed source. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (type note) – Describes a particular font or other significant typographic feature of a printed resource. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (additional name) – Contains an additional name component, such as a nickname, epithet, or alias, or any other descriptive phrase used within a personal name. + + + + + + + + + + + + + + + + + + + + Contains the name of a geopolitical unit consisting of two or more nation states or countries. + + + + + + + + + + + + + + + + + + + + (corporate name) – Identifies an organization or group of people that acts as a single entity. + + + + + + + + + + + + + + + + + + + + Contains the name of a geopolitical unit, such as a nation, country, colony, or commonwealth, larger than or administratively superior to a region and smaller than a bloc. + + + + + + + + + + + + + + + + + + + + Contains the name of any kind of subdivision of a settlement, such as a parish, ward, or other administrative or geographic unit. + + + + + + + + + + + + + + + + + + + + (family name) – Contains a family (inherited) name, as opposed to a given, baptismal, or nick name. + + + + + + + + + + + + + + + + + + + + + Contains a forename, given or baptismal name. + + + + + + + + + + + + + + + + + + + + (generational name component) – Contains a name component used to distinguish otherwise similar names on the basis of the relative ages or generations of the persons named. + + + + + + + + + + + + + + + + + + + + (geographical feature name) – Contains a common noun identifying a geographical feature. + + + + + + + + + + + + + + + + + + + + (geographic name) – The proper noun designation for a place, natural feature, or political jurisdiction. + + + + + + + + + + + + + + + + + + + + (name link) – Contains a connecting phrase or link used within a name but not regarded as part of it, such as "van der" or "of", "from", etc. + + + + + + + + + + + + + + + + + + + + (period name) – A label that describes a period of time, such as 'Baroque' or '3rd Style period'. + + + + + + + + + + + + + + + + + + + + (personal name) – Designation for an individual, including any or all of that individual's forenames, surnames, honorific titles, and added names. + + + + + + + + + + + + + + + + + + + + + (postal box or post office box) contains a number or other identifier for some postal delivery point other than a street address. + + + + + + + + + + + + + + + + (postal code) contains a numerical or alphanumeric code used as part of a postal address to simplify sorting or delivery of mail. + + + + + + + + + + + + + + + + Contains the name of an administrative unit such as a state, province, or county, larger than a settlement, but smaller than a country. + + + + + + + + + + + + + + + + + + + + (role name) – Contains a name component which indicates that the referent has a particular role or position in society, such as an official title or rank. + + + + + + + + + + + + + + + + + + + + Contains the name of a settlement such as a city, town, or village identified as a single geopolitical or administrative unit. + + + + + + + + + + + + + + + + + + + + full street address including any name or number identifying a building as well as the name of the street or route on which it is located. + + + + + + + + + + + + + + + + + (style name) – A label for a characteristic style of writing or performance, such as 'bebop' or 'rock-n-roll'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures written octave information. + + + 9 + + + unknown + + + + + + + + + Contains a written pitch name. + + [a-g]|unknown + + + + + + + + + + + + + + + + + + + + + + + + + + Connection to the previous component within the same neume; this attribute should not be used for the first component of a neume. + + g + Gapped; not connected. + l + Looped. + e + Extended. + + + + + + + + Records direction of curvature. + + a + Anti-clockwise curvature. + c + Clockwise curvature. + + + + + + + + Pen stroke has an extension; specific to Hispanic notation. + + + + + + + + Indicates participation in a ligature. + + + + + + + + Length of the pen stroke relative to the previous component within the same neume; this attribute should not be used for the first component of a neume. + + l + Longer. + s + Shorter. + + + + + + + + Direction of the initial direction for an s-shaped pen stroke; i.e., "w" for the standard letter S, "e" for its mirror image, "s" for the letter S turned 90-degrees anti-clockwise, and "n" for its mirror image. + + + + + + + + Direction of the pen stroke. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Episema. + + + + + + + + + + + + + Hispanic tick. + + + + + + + + + + + + + Liquescent. + + + + + + + + + + + + + Sign representing a single pitched event, although the exact pitch may not be known. + + + + + + + + + + + + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] apostropha; 2] bistropha; 3] climacus; 4] clivis; 5] oriscus; 6] pes; 7] pessubpunctis; 8] porrectus; 9] porrectusflexus; 10] pressusmaior; 11] pressusmaior; 12] pressusminor; 13] pressusminor; 14] punctum; 15] quilisma; 16] scandicus; 17] strophicus; 18] torculus; 19] torculusresupinus; 20] tristropha; 21] virga; 22] virgastrata + + + + apostropha + + bistropha + + climacus + + clivis + + oriscus + + pes + + pessubpunctis + + porrectus + + porrectusflexus + + pressusmaior + + pressusmaior + + pressusminor + + pressusminor + + punctum + + quilisma + + scandicus + + strophicus + + torculus + + torculusresupinus + + tristropha + + virga + + virgastrata + + + + + + + + + + + + + Collection of one or more neume components. + + + + + + + + + + + + + + + + + + + + + + Sign representing one or more musical pitches. + + + + + + + + + + + + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] apostropha; 2] bistropha; 3] climacus; 4] clivis; 5] oriscus; 6] pes; 7] pessubpunctis; 8] porrectus; 9] porrectusflexus; 10] pressusmaior; 11] pressusmaior; 12] pressusminor; 13] pressusminor; 14] punctum; 15] quilisma; 16] scandicus; 17] strophicus; 18] torculus; 19] torculusresupinus; 20] tristropha; 21] virga; 22] virgastrata + + + + apostropha + + bistropha + + climacus + + clivis + + oriscus + + pes + + pessubpunctis + + porrectus + + porrectusflexus + + pressusmaior + + pressusmaior + + pressusminor + + pressusminor + + punctum + + quilisma + + scandicus + + strophicus + + torculus + + torculusresupinus + + tristropha + + virga + + virgastrata + + + + + + + + + + + + + Oriscus. + + + + + + + + + + + + + Quilisma. + + + + + + + + + + + + + Significantive letter(s). + + + + + + + + + + + + + + + + + + + + + Strophicus. + + + + + + + + + + + + + Neume notation can be thought of as "neumed text". Therefore, the syllable element provides high-level organization in this repertoire. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates the point of occurrence of this feature along a time line. Its value must be the ID of a when element elsewhere in the document. + + + + + + + @when attribute should + have content. + A + value in @when should correspond to the @xml:id attribute of a when + element. + + + + + (audio/video file) – References an external digital audio or video file. + + + + + + An avFile child of clip cannot have + children. + + + + + + + + + + + + + + Defines a time segment of interest within a recording or within a digital audio or video file. + + + + + + + + + When @begin or @end + is used, @betype should appear on clip or one of its ancestors. + + + + + + + + + + + + + A presentation of one or more musical works. + + + + + + + + + + + A recorded performance. + + + + + + + + + + + + When @begin or @end is used, @betype should be + present. + + + + + + + + + + + + + Indicates a point in time either absolutely (using the absolute attribute), or relative to another when element (using the since, interval and inttype attributes). + + + + @since must be present when @interval is used. + The value in @since should correspond to the @xml:id attribute of a when + element. + + + + + When @interval contains an integer value, + @inttype cannot be 'time'. + + + + + When @interval contains a time value, @inttype must + be 'time'. + + + + + When @absolute is + present, @abstype should be present or @betype should be present on an + ancestor. + + + + + + + Provides an absolute value for the time point. + + + + + + Specifies the time interval between this time point and the one designated by the since attribute. This attribute can only be interpreted meaningfully in conjunction with the inttype attribute. + + + 1 + + + + + + + + Specifies the kind of values used in the absolute attribute. + + + + + + Specifies the kind of values used in the interval attribute. + + + + + + Identifies the reference point for determining the time of the current when element, which is obtained by adding the interval to the time of the reference point. The value should be the ID of another when element within the same parent element. If the since attribute is omitted and the absolute attribute is not specified, then the reference point is understood to be the immediately preceding when element. + + + + + + @since attribute + should have content. + The value in @since should correspond to the @xml:id attribute of a when + element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (pointer) – Defines a traversible pointer to another location, using only attributes to describe the destination. + + + + + + + + + + + + (reference) – Defines a traversible reference to another location. May contain text and sub-elements that describe the destination. + + + + + + + + + + + + + + + + + + + + + + + + Records the function of an accidental. + + caution + Cautionary accidental. + edit + Editorial accidental. + + + + + + + + + + + Captures a written accidental. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Encodes the written articulation(s). Articulations are normally encoded in order from the note head outward; that is, away from the stem. See additional notes at att.vis.note. Only articulations should be encoded in the artic attribute; for example, fingerings should be encoded using the fing element. + + + + + + + + + + + + + + + The intended audience. + + private + Internal use only. + public + Available to all audiences. + + + + + + + + + + + Records the number of augmentation dots required by a written dotted duration. + + + + + + + An element with a dots attribute must also have a dur + attribute. + + + + + + + + + + + A name or label associated with a controlled vocabulary or other authoritative source for this element or its content. + + + + + + + + A web-accessible location of the controlled vocabulary or other authoritative source of identification or definition for this element or its content. This attribute may contain a complete URI or a partial URI which is completed by the value of the codedval attribute. + + + + + + + + + + + + Records the appearance and usually the function of the bar line. + + + + + + + + + + + + + States the length of barlines in virtual units. The value must be greater than 0 and is typically equal to 2 times (the number of staff lines - 1); e.g., a value of '8' for a 5-line staff. + + 0 + + + + + + + + Records the method of barring. + + + + + + + "mensur" not allowed in this + context. + + + + + + Denotes the staff location of bar lines, if the length is non-standard; that is, not equal to 2 times (the number of staff lines - 1). + + + + + + + + + + + + Provides a base URI reference with which applications can resolve relative URI references into absolute URI references. + + + + + + + + + + + Contains a reference to a field or element in another descriptive encoding system to which this MEI element is comparable. + + + + + + + + + + + + + + + + + + Indicates the calendar system to which a date belongs, for example, Gregorian, Julian, Roman, Mosaic, Revolutionary, Islamic, etc. + + + + + + + + + + + A value that represents or identifies other data. Often, it is a primary key in the database or a unique value in the coded list identified by the auth or auth.uri attributes. + + + + + + + + + + + + + + + + + + + + + + + Contains one or more URIs which denote classification terms that apply to the entity bearing this attribute. + + + + + + + + + + + The value in @class must either correspond to the @xml:id attribute of a category + element or be an external URL. + + + + + + + + + + + + + Records the function of the clef. A "cautionary" clef does not change the following pitches. + + + + + + + + + + + + + + Encodes a value for the clef symbol. + + + + + + + + Contains a default value for the position of the clef. The value must be in the range between 1 and the number of lines on the staff. The numbering of lines starts with the lowest line of the staff. + + + + + + + + Records the amount of octave displacement to be applied to the clef. + + + + + + + + Records the direction of octave displacement to be applied to the clef. + + + + + + + An 'F', 'C', or 'G' clef requires that its position be + specified. + + + + + A TAB or percussion clef requires that the number of lines be + specified. + + + + + + + + + + + + Describes a clef's shape. + + + + + + + When @shape is present, @line must also be + specified. + + + + + + + + + Used to indicate visual appearance. Do not confuse this with the musical term 'color' as used in pre-CMN notation. + + + + + + + + + + + Indicates this feature is 'colored'; that is, it is a participant in a change in rhythmic values. In mensural notation, coloration is indicated by colored notes (red, black, etc.) where void notes would otherwise occur. In CMN, coloration is indicated by an inverse color; that is, the note head is void when it would otherwise be filled and vice versa. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates the upper-left corner x coordinate. + + + + + + + + Indicates the upper-left corner y coordinate. + + + + + + + + Indicates the lower-right corner x coordinate. + + + + + + + + Indicates the lower-left corner x coordinate. + + + + + + + + + + + + + + + + + + + + + + + + Records the placement of Bezier control points as a series of pairs of space-separated values; e.g., 19 45 -32 118. + + + + + + + + + + + + + Describes a curve as one or more pairs of values with respect to an imaginary line connecting the starting and ending points of the curve. The first value captures a distance to the left (positive value) or right (negative value) of the line, expressed in virtual units. The second value of each pair represents a point along the line, expressed as a percentage of the line's length. N.B. An MEI virtual unit (VU) is half the distance between adjacent staff lines. + + + + + + + + + + + + + Describes a curve with a generic term indicating the direction of curvature. + + above + Upward curve. + below + Downward curve. + mixed + A "meandering" curve, both above and below the items it pertains to. + + + + + + + + + + + + Describes the line style of a curve. + + + + + + + + Width of a curved line. + + + + + + + + + + + + Encodes the target note when its pitch differs from the pitch at which the custos appears. + + + + + + + @target attribute + should have content. + The value in @target should correspond to the @xml:id attribute of a note + element. + + + + + + + + + + + + + Contains the end point of a date range in standard ISO form. + + + + + + + + Provides the value of a textual date in standard ISO form. + + + + + + + + Contains an upper boundary for an uncertain date in standard ISO form. + + + + + + + + Contains a lower boundary, in standard ISO form, for an uncertain date. + + + + + + + + Contains the starting point of a date range in standard ISO form. + + + + + + + + + + + Used to link metadata elements to one or more data-containing elements. + + + + + + + + + + + @data attribute should + have content. + The value in @data should correspond to the @xml:id attribute of a descendant of + the music element. + + + + + + + + + + + + Identifies one or more metadata elements (other than classification terms) within the header, which are understood to apply to the element bearing this attribute and its content. + + + + + + + + + + + @decls attribute + should have content. + Each value in @decls should correspond to the @xml:id attribute of an element + within the metadata header. + No value in @decls should correspond to the @xml:id attribute of a classification + term. Use @class for this purpose. + + + + + + + + + + + + + + + + + + + + Records the default distance from the staff for dynamic marks. + + + + + + + + Records the default distance from the staff of harmonic indications, such as guitar chord grids or functional labels. + + + + + + + + Determines how far from the staff to render text elements. + + + + + + + + + + + + Records the function of the dot. + + aug + Augmentation dot. + div + Dot of division. + + + + + + + + + + + + + Contains a default duration in those situations when the first note, rest, chord, etc. in a measure does not have a duration specified. + + + + + + + + Along with numbase.default, describes the default duration as a ratio. num.default is the first value in the ratio. + + + + + + + + Along with num.default, describes the default duration as a ratio. numbase.default is the second value in the ratio. + + + + + + + + + + + Records the duration of a feature using the relative durational values provided by the data.DURATION datatype. + + + + + + + + + + + + Along with numbase, describes duration as a ratio. num is the first value in the ratio, while numbase is the second. + + + + + + + + Along with num, describes duration as a ratio. num is the first value in the ratio, while numbase is the second. + + + + + + + + + + + + + + + + Records the characters often used to mark accidentals, articulations, and sometimes notes as having a cautionary or editorial function. For an example of cautionary accidentals enclosed in parentheses, see Read, p. 131, ex. 9-14. + + + + + + + + + + + + + + Describes where ending marks should be displayed. + + top + Ending rendered only above top staff. + barred + Ending rendered above staves that have bar lines drawn across them. + grouped + Endings rendered above staff groups. + + + + + + + + + + + + + + + + + + + Signifies the degree of certainty or precision associated with a feature. + + + + + + + + Indicates the nature of the evidence supporting the reliability or accuracy of the intervention or interpretation. +Suggested values include: 1] internal; 2] external; 3] conjecture + + internal + There is evidence within the document to support the intervention. + external + There is evidence outside the document to support the intervention. + conjecture + The assertion has been made by the editor, cataloguer, or scholar on the basis of their expertise. + + + + + + + + + + + + + Indicates the presence of an extension symbol, typically a line. + + + + + + + + + + + + + Captures a measurement, count, or description. When extent contains a numeric value, use the unit attribute to indicate the measurement unit. + + + + + + + The @unit attribute is + recommended. + + + + + Separation into value (@extent) and unit + (@unit) is recommended. + + + + + + + + + Holds the number of initial characters (such as those constituting an article or preposition) that should not be used for sorting a title or name. + + + + + + + + + + + + + Indicates the nesting level of staff grouping symbols. + + + + + + + + + + + Signifies the hand responsible for an action. The value must be the ID of a hand element declared in the header. + + + + + + + @hand attribute should + have content. + Each value in @hand should correspond to the @xml:id attribute of a hand + element. + + + + + + + + + Measurement of the vertical dimension of an entity. + + + + + + + + + + + Records horizontal alignment. + + + + + + + + + + + Regularizes the naming of an element and thus facilitates building links between it and other resources. Each id attribute within a document must have a unique value. + + + + + + + + + + + Specifies the applicable MIME (multimedia internet mail extension) type. The value should be a valid MIME media type defined by the Internet Engineering Task Force in RFC 2046. + + + + + + + + + + + Used for linking visually separate entities that form a single logical entity, for example, multiple slurs broken across a system break that form a single musical phrase. Also used to indicate a measure which metrically completes the current one. Record the identifiers of the separately encoded components, excluding the one carrying the attribute. + + + + + + + + + + + @join attribute should + have content. + Each + value in @join should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + Written key signature. + + + + + + + + + + + + + + + Written key signature. + + + + + + + + + + + + + + + Captures text to be used to generate a label for the element to which it's attached, a "tool tip" or prefatory text, for example. Should not be used to record document content. + + + + + + + + + + + + Identifies the language of the element's content. The values for this attribute are language 'tags' as defined in BCP 47. All language tags that make use of private use sub-tags must be documented in a corresponding language element in the MEI header whose id attribute is the same as the language tag's value. + + + + + + + + Specifies the transliteration technique used. + + + + + + + + + + + + Provides a mechanism for linking the layer to a layerDef element. + + + + + + + @def attribute should + have content. + The value in @def should correspond to the @xml:id attribute of a layerDef + element. + + + + + + + + + + + + + + Identifies the layer to which a feature applies. + + + + + + + + + + + + + + + Indicates the line upon which a feature stands. The value must be in the range between 1 and the number of lines on the staff. The numbering of lines starts with the lowest line of the staff. + + + + + + + + + + + + + + + Symbol rendered at end of line. + + + + + + + + Holds the relative size of the line-end symbol. + + + + + + + + Symbol rendered at start of line. + + + + + + + + Holds the relative size of the line-start symbol. + + + + + + + + + + + + + Describes the line style of a line. + + + + + + + + Describes the number of segments into which a dashed or dotted line may be divided, or the number of "peaks" of a wavy line; a pair of space-separated values (minimum and maximum, respectively) provides a range between which a rendering system-supplied value may fall, while a single value indicates a fixed amount of space; that is, the minimum and maximum values are equal. + + + 2 + + + + 2 + + + + + + + + + @lform attribute + matching "dashed", "dotted", or "wavy" required. + + + + + + Width of a line. + + + + + + + + + + + + + + + + + + Points to an element of which the current element is a copy. + + + + + + + An + element with a copyof attribute can only have comment or processing instruction + descendents. + + + + + @copyof attribute + should have content. + The + value in @copyof should correspond to the @xml:id attribute of an + element. + + + + + + Used to point to other elements that correspond to this one in a generic fashion. + + + + + + + + + + + @corresp attribute + should have content. + Each + value in @corresp should correspond to the @xml:id attribute of an + element. + + + + + + points to one or more events in a user-defined collection that are known to be predecessors of the current element. + + + + + + + + + + + @follows attribute + should have content. + Each + value in @follows must correspond to the @xml:id attribute of an + element. + + + + + + Used to point to the next event(s) in a user-defined collection. + + + + + + + + + + + @next attribute should + have content. + Each + value in @next should correspond to the @xml:id attribute of an + element. + + + + + + Points to one or more events in a user-defined collection that are known to be successors of the current element. + + + + + + + + + + + @precedes attribute + should have content. + Each + value in @precedes must correspond to the @xml:id attribute of an + element. + + + + + + Points to the previous event(s) in a user-defined collection. + + + + + + + + + + + @prev attribute should + have content. + Each + value in @prev should correspond to the @xml:id attribute of an + element. + + + + + + Points to an element that is the same as the current element but is not a literal copy of the current element. + + + + + + + + + + + @sameas attribute + should have content. + Each + value in @sameas should correspond to the @xml:id attribute of an + element. + + + + + + Points to elements that are synchronous with the current element. + + + + + + + + + + + @synch attribute + should have content. + Each + value in @synch should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + + Describes the alignment of lyric syllables associated with a note or chord. + + + + + + + + Sets the font family default value for lyrics. + + + + + + + + Sets the font name default value for lyrics. + + + + + + + + Sets the default font size value for lyrics. + + + + + + + + Sets the default font style value for lyrics. + + + + + + + + Sets the default font weight value for lyrics. + + + + + + + + + + + Indicates the unit of measurement. +Suggested values include: 1] byte; 2] char; 3] cm; 4] deg; 5] in; 6] issue; 7] ft; 8] m; 9] mm; 10] page; 11] pc; 12] pt; 13] px; 14] rad; 15] record; 16] vol; 17] vu + + byte + Byte. + char + Character. + cm + Centimeter. + deg + Degree. + in + Inch. + issue + Serial issue. + ft + Foot. + m + Meter. + mm + Millimeter. + page + Page. + pc + Pica. + pt + Point. + px + Pixel. + rad + Radian. + record + Record. + vol + Serial volume. + vu + MEI virtual unit. + + + + + + + + + + + + Indicates whether measure numbers should be displayed. + + + + + + + + + + + + + Specifies a point where the relevant content begins. A numerical value must be less and a time value must be earlier than that given by the end attribute. + + + + + + + + Specifies a point where the relevant content ends. If not specified, the end of the content is assumed to be the end point. A numerical value must be greater and a time value must be later than that given by the begin attribute. + + + + + + + + Type of values used in the begin/end attributes. The begin and end attributes can only be interpreted meaningfully in conjunction with this attribute. + + + + + + + + + + + Describes the writing medium. + + + + + + + + + + + Specifies a generic MEI version label. + + 4.0.0 + First release of MEI 4 + 4.0.1 + Bugfix Release 4.0.1 + + + + + + + + + + + + + + Specifies whether a dot is to be added to the base symbol. + + + + + + + + The base symbol in the mensuration sign/time signature of mensural notation. + + + + + + + + + + + Indicates the relationship between the content of a staff or layer and the prevailing meter. + + c + Complete; i.e., conformant with the prevailing meter. + i + Incomplete; i.e., not enough beats. + o + Overfull; i.e., too many beats. + + + + + + + + + + + + Indicates the relationship between the content of a measure and the prevailing meter. + + + + + + + + Indicates whether or not a bar line is "controlling"; that is, if it indicates a point of alignment across all the parts. Bar lines within a score are usually controlling; that is, they "line up". Bar lines within parts may or may not be controlling. When applied to measure, this attribute indicates the nature of the right barline but not the left. + + + + + + + + + + + + + Captures the number of beats in a measure, that is, the top number of the meter signature. It must contain a decimal number or an additive expression that evaluates to a decimal number, such as 2+3. + + \d+(\.\d+)?(\s*\+\s*\d+(\.\d+)?)* + + + + + + + + Indicates the use of a meter symbol instead of a numeric meter signature, that is, 'C' for common time or 'C' with a slash for cut time. + + + + + + + + Contains the number indicating the beat unit, that is, the bottom number of the meter signature. + + + + + + + + + + + + + Captures the number of beats in a measure, that is, the top number of the meter signature. It must contain a decimal number or an additive expression that evaluates to a decimal number, such as 2+3. + + \d+(\.\d+)?(\s*\+\s*\d+(\.\d+)?)* + + + + + + + + Contains the number indicating the beat unit, that is, the bottom number of the meter signature. + + + + + + + + Indicates the use of a meter symbol instead of a numeric meter signature, that is, 'C' for common time or 'C' with a slash for cut time. + + + + + + + + + + + + + Used to describe tempo in terms of beats (often the meter signature denominator) per minute, ala M.M. (Maezel's Metronome). Do not confuse this attribute with midi.bpm or midi.mspb. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. + + + + + + + + Captures the metronomic unit. + + + + + + + + Records the number of augmentation dots required by a dotted metronome unit. + + + + + + + + + + + Indicates whether programmatically calculated counts of multiple measures of rest (mRest) and whole measure repeats (mRpt) in parts should be rendered. + + + + + + + + + + + + + + + Used to record a pointer to the regularized form of the name elsewhere in the document. + + + + + + + @nymref attribute + should have content. + The + value in @nymref should correspond to the @xml:id attribute of an + element. + + + + + + Used to specify further information about the entity referenced by this name, for example, the occupation of a person or the status of a place. + + + + + + + + + + + Provides a numeric designation that indicates an element's position in a sequence of similar elements. Its value must be a non-negative integer. + + + + + + + + + + + Provides a number-like designation that indicates an element's position in a sequence of similar elements. May not contain space characters. + + + + + + + + + + + + Sets the default music font name. + + + + + + + + Sets the default music font size. + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a way of pointing to a user-defined symbol. It must contain a reference to an ID of a symbolDef element elsewhere in the document. + + + + + + + @head.altsym attribute + should have content. + The value in @head.altsym should correspond to the @xml:id attribute of a symbolDef + element. + + + + + + A name or label associated with the controlled vocabulary from which a numerical value of head.shape is taken. +Suggested values include: 1] smufl + + smufl + Standard Music Font Layout. + + + + + + + + When + @head.auth matches 'smufl', @head.shape must contain a numeric glyph reference in + hexadecimal notation, e.g. "#xE000" or "U+E000". + + + + + + Captures the overall color of a notehead. + + + + + + + + Describes how/if the notehead is filled. + + + + + + + + Captures the fill color of a notehead if different from the overall note color. + + + + + + + + Records any additional symbols applied to the notehead. + + + + + + + + + + + + Describes rotation applied to the basic notehead shape. A positive value rotates the notehead in a counter-clockwise fashion, while negative values produce clockwise rotation. + + + + + + + + Used to override the head shape normally used for the given duration. + + + + + + + SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + Indicates if a feature should be rendered when the notation is presented graphically or sounded when it is presented in an aural form. + + + + + + + + + + + Captures written octave information. + + + + + + + + + + + Contains a default octave specification for use when the first note, rest, chord, etc. in a measure does not have an octave value specified. + + + + + + + + + + + + Records the amount of octave displacement. + + + + + + + + Records the direction of octave displacement. + + + + + + + + + + + Determines the placement of notes on a 1-line staff. A value of 'true' places all notes on the line, while a value of 'false' places stems-up notes above the line and stems-down notes below the line. + + + + + + + + + + + Indicates whether staves without notes, rests, etc. should be displayed. When the value is 'true', empty staves are displayed. + + + + + + + + + + + identifies the layer on which referenced notation occurs. + + + + + + + + + + + + + + + signifies the staff on which referenced notation occurs. Defaults to the same value as the local staff. Mandatory when applicable. + + + + + + + + + + + + + + + + indicates the first element in a sequence of events. + + + + + + + + indicates the final element in a sequence of events. + + + + + + + + + + + + encodes the starting point of musical material in terms of musical time, i.e., a (potentially negative) count of measures plus a beat location. + + + + + + + + encodes the ending point of musical material in terms of musical time, i.e., a count of measures plus a beat location. The values are relative to the measure identified by origin.tstamp. + + + + + + + When @origin.tstamp2 is used @origin.tstamp must + also be present. + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the height of the page; may be expressed in real-world units or staff steps. + + + + + + + + Describes the width of the page; may be expressed in real-world units or staff steps. + + + + + + + + Indicates the amount of whitespace at the top of a page. + + + + + + + + Indicates the amount of whitespace at the bottom of a page. + + + + + + + + Indicates the amount of whitespace at the left side of a page. + + + + + + + + Indicates the amount of whitespace at the right side of a page. + + + + + + + + Indicates the number of logical pages to be rendered on a single physical page. + + + + + + + + Indicates how the page should be scaled when rendered. + + + + + + + + + + + + + + + Indicates the part in which the current feature should appear. Use '%all' when the feature should occur in every part. + + + + (%all|#[\i][\c]+) + + + + + + + + + '%all' cannot be mixed with other + values. + + + + + + Signifies the part staff on which a notated feature occurs. Use '%all' when the feature should occur on every staff. + + + + (%all|\d+(-\d+)?) + + + + + + + + + '%all' cannot be mixed with other + values. + + + + + + + + + + + + + + + + + + + + Contains a written pitch name. + + + + + + + + + + + + + + + Captures the placement of the item with respect to the staff with which it is associated. + + + + + + + + + + + When the target attribute is present, plist identifies the active participants; that is, those entities pointed "from", in a relationship with the specified target(s). When the target attribute is not present, it identifies participants in a mutual relationship. + + + + + + + + + + + @plist attribute + should have content. + Each + value in @plist should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + Defines whether a link occurs automatically or must be requested by the user. + + onLoad + Load the target resource(s) immediately. + onRequest + Load the target resource(s) upon user request. + none + Do not permit loading of the target resource(s). + other + Behavior other than allowed by the other values of this attribute. + + + + + + + + Characterization of the relationship between resources. The value of the role attribute must be a URI. + + + + + + + + Defines how a remote resource is rendered. + + new + Open in a new window. + replace + Load the referenced resource in the same window. + embed + Embed the referenced resource at the point of the link. + none + Do not permit traversal to the referenced resource. + other + Behavior other than permitted by the other values of this attribute. + + + + + + + + Identifies passive participants in a relationship; that is, the entities pointed "to". + + + + + + + + + + + + Characterization of target resource(s) using any convenient classification scheme or typology. + + + + + + + + + + + + + Numeric value capturing a measurement or count. Can only be interpreted in combination with the unit attribute. + + 0 + + + + + + + + + + + + + + + Gives a minimum estimated value for an approximate measurement. + + + + + + + + Gives a maximum estimated value for an approximate measurement. + + + + + + + + Where the measurement summarizes more than one observation or a range of values, supplies the minimum value observed. + + + + + + + + Where the measurement summarizes more than one observation or a range of values, supplies the maximum value observed. + + + + + + + + Specifies the degree of statistical confidence (between zero and one) that a value falls within the range specified by min and max, or the proportion of observed values that fall within that range. + + + + + + + The attributes @min and @max are required when + @confidence is present. + + + + + + + + + Indicates the agent(s) responsible for some aspect of the text's transcription, editing, or encoding. Its value must point to one or more identifiers declared in the document header. + + + + + + + + + + + @resp attribute should + have content. + The value in @resp should correspond to the @xml:id attribute of an element within + the metadata header. + + + + + + + + + + + + + + + + + + Scale factor to be applied to the feature to make it the desired display size. + + + + + + + + + + + + + + + + + + + + + + + + + Used to assign a sequence number related to the order in which the encoded features carrying this attribute are believed to have occurred. + + + + + + + + + + + Indicates the number of slashes present. + + + + + + + + + + + Contains a list of one or more pointers indicating the sources which attest to a given reading. Each value should correspond to the ID of a source or manifestationelement located in the document header. + + + + + + + + + + + @source attribute + should have content. + Each value in @source should correspond to the @xml:id attribute of a source or + manifestation element. + + + + + + + + + + + + + + + + + Describes a note's spacing relative to its time value. + + + + + + + + Describes the note spacing of output. + + + + + + + + Specifies the minimum amount of space between adjacent staves in the same system; measured from the bottom line of the staff above to the top line of the staff below. + + + + + + + + Describes the space between adjacent systems; a pair of space-separated values (minimum and maximum, respectively) provides a range between which a rendering system-supplied value may fall, while a single value indicates a fixed amount of space; that is, the minimum and maximum values are equal. + + + + + + + + + + + + + + + + + Provides a mechanism for linking the staff to a staffDef element. + + + + + + + @def attribute should + have content. + The value in @def should correspond to the @xml:id attribute of a staffDef + element. + + + + + + + + + + + + + + + + Indicates the number of staff lines. + + + + + + + + + + + Specifies the symbol used to group a set of staves. + + brace + Curved symbol, i.e., {. + bracket + Square symbol, i.e., [, but with curved/angled top and bottom segments. + bracketsq + Square symbol, i.e., [, with horizontal top and bottom segments. + line + Line symbol, i.e., |, (wide) line without top and bottom curved/horizontal segments. + none + Grouping symbol missing. + + + + + + + + + + + + + + Signifies the staff on which a notated event occurs or to which a control event applies. Mandatory when applicable. + + + + + + + + + + + + + + + + + Describes vertical order of items printed above a staff, from closest to farthest away from the staff. + + + + + + + + + + + + Describes vertical order of items printed below a staff, from closest to farthest away from the staff. + + + + + + + + + + + + Describes vertical order of items printed between staves, from top to bottom. + + + + + + + + + + + + + + + Holds the staff location of the feature. + + + + + + + + + + + + Captures staff location in terms of written pitch name. + + + + + + + + Records staff location in terms of written octave. + + + + + + + + + + + + Indicates the final element in a sequence of events to which the feature applies. + + + + + + + @endid attribute + should have content. + The + value in @endid should correspond to the @xml:id attribute of an + element. + + + + + + + + + Holds a reference to the first element in a sequence of events to which the feature applies. + + + + + + + @startid attribute + should have content. + The + value in @startid should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + + + Describes the direction of a stem. + + + + + + + + Encodes the stem length. + + + + + + + + Encodes any stem "modifiers"; that is, symbols rendered on the stem, such as tremolo or Sprechstimme indicators. + + + + + + + + Records the position of the stem in relation to the note head(s). + + + + + + + + Determines whether a stem should be displayed. + + + + + + + + Records the output x coordinate of the stem's attachment point. + + + + + + + + Records the output y coordinate of the stem's attachment point. + + + + + + + + + + + + Describes the symbols typically used to indicate breaks between syllables and their functions. + + s + Space (word separator). + d + Dash (syllable separator). + u + Underscore (syllable extension). + t + Tilde (syllable elision). + c + Circumflex [angled line above] (syllable elision). + v + Caron [angled line below] (syllable elision). + i + Inverted breve [curved line above] (syllable elision). + b + Breve [curved line below] (syllable elision). + + + + + + + + Records the position of a syllable within a word. + + i + (initial) first syllable. + m + (medial) neither first nor last syllable. + t + (terminal) last syllable. + + + + + + + + + + + Holds an associated sung text syllable. + + + + + + + + + + + + + + + + + Indicates whether the staves are joined at the left by a continuous line. The default value is "true". Do not confuse this with the heavy vertical line used as a grouping symbol. + + + + + + + + Describes the amount of whitespace at the left system margin relative to page.leftmar. + + + + + + + + Describes the amount of whitespace at the right system margin relative to page.rightmar. + + + + + + + + Describes the distance from page's top edge to the first system; used for first page only. + + + + + + + + + + + Specifies the intended meaning when a participant in a relationship is itself a pointer. + + all + If an element pointed to is itself a pointer, then the target of that pointer will be taken, and so on, until an element is found which is not a pointer. + one + If an element pointed to is itself a pointer, then its target (whether a pointer or not) is taken as the target of this pointer. + none + No further evaluation of targets is carried out beyond that needed to find the element(s) specified in plist or target attribute. + + + + + + + + + + + + + + Records the function of a tempo indication. + + continuous + Marks a gradual change of tempo, such as "accel." or "rit." + instantaneous + Represents a static tempo instruction, such as a textual term like "Adagio", a metronome marking like "♩=70", or a combination of text and metronome indication. + metricmod + Captures a change in pulse rate (tempo) and/or pulse grouping (subdivision) in an "equation" of the form [tempo before change] = [tempo after change]. + precedente + Indicates a change in pulse rate (tempo) and/or pulse grouping (subdivision) in an "equation" of the form [tempo after change] = [tempo before change]. The term "precedente" often appears following the "equation" to distinguish this kind of historical usage from the modern metric modulation form. + + + + + + + + + + + + Used to extend the values of the rend attribute. + + + + + + + + + + + + Captures the appearance of the element's contents using MEI-defined descriptors. + + + + + + + + + + + + + + + + + + + Provides a default value for the font family name of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font name of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font size of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font style of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font weight for text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + + + + Encodes the onset time in terms of musical time, i.e., beats[.fractional beat part], as expressed in the written time signature. + + + + + + + + + + + Encodes the ending point of an event, i.e., a count of measures plus a beat location in the ending measure. + + + + + + + + + + + + Records the amount of diatonic pitch shift, e.g., C to C♯ = 0, C to D♭ = 1, necessary to calculate the sounded pitch from the written one. + + + + + + + + Records the amount of pitch shift in semitones, e.g., C to C♯ = 1, C to D♭ = 1, necessary to calculate the sounded pitch from the written one. + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. + + + + + + + + + + + + + + + + + + + Contains the name of a font-family. + + + + + + + + Holds the name of a font. + + + + + + + + Indicates the size of a font expressed in printers' points, i.e., 1/72nd of an inch, relative terms, e.g., "small", "larger", etc., or percentage values relative to "normal" size, e.g., "125%". + + + + + + + + Records the style of a font, i.e, italic, oblique, or normal. + + + + + + + + Used to indicate bold type. + + + + + + + + + + + Records vertical alignment. + + + + + + + + + + + Provides a label for members of a vertically aligned group. + + + + + + + + + + + Indicates if a feature should be rendered when the notation is presented graphically or sounded when it is presented in an aural form. + + + + + + + + + + + + + + + + Records a horizontal adjustment to a feature's programmatically-determined location in terms of staff interline distance; that is, in units of 1/2 the distance between adjacent staff lines. + + + + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined location in terms of musical time; that is, beats. + + + + + + + + + + + Records the vertical adjustment of a feature's programmatically-determined location in terms of staff interline distance; that is, in units of 1/2 the distance between adjacent staff lines. + + + + + + + + + + + + + + + + + Records the horizontal adjustment of a feature's programmatically-determined start point. + + + + + + + + Records the horizontal adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined start point. + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + + Records a vertical adjustment of a feature's programmatically-determined start point. + + + + + + + + Records a vertical adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + Specifies the symbol used to group lyrics. + + brace + Curved symbol, i.e., {. + bracket + Square symbol, i.e., [, but with curved/angled top and bottom segments. + bracketsq + Square symbol, i.e., [, with horizontal top and bottom segments. + line + Line symbol, i.e., |, (wide) line without top and bottom curved/horizontal segments. + none + Grouping symbol missing. + + + + + + + + + + + Allows one to signal to an application whether an element's white space is "significant". The behavior of xml:space cascades to all descendant elements, but it can be turned off locally by setting the xml:space attribute to the value "default". + + default + Allows the application to handle white space as necessary. Not including an xml:space attribute produces the same result as using the default value. + preserve + Instructs the application to maintain white space "as-is", suggesting that it might have meaning. + + + + + + + + + + + Measurement of the horizontal dimension of an entity. + + + + + + + + + + + + Encodes an x coordinate for a feature in an output coordinate system. When it is necessary to record the placement of a feature in a facsimile image, use the facs attribute. + + + + + + + + Encodes a y coordinate for a feature in an output coordinate system. When it is necessary to record the placement of a feature in a facsimile image, use the facs attribute. + + + + + + + + + + + + Encodes the optional 2nd x coordinate. + + + + + + + + Encodes the optional 2nd y coordinate. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (accidental) – Records a temporary alteration to the pitch of a note. + + + + + + + + + + + + + Name of an actor appearing within a cast list. + + + + + + + + + + + + + + + Contains a postal address, for example of a publisher, an organization, or an individual. + + + + + + + + + + + + + + + + + (address line) – Single line of a postal address. + + + + + + + + + + + + + + + + + Range of a voice, instrument or piece. + + + + + + + + + + + + + + + Highest or lowest pitch in a score, staff, or layer. + + + + + + + + + + + + + (analytic level) – Contains bibliographic elements describing an item (e.g. an article or poem) published within a monograph or journal and not as an independent publication. + + + + + + + + + + + + + + + + + + + + + + + + + + (annotation) – Provides a statement explaining the text or indicating the basis for an assertion. + + + + + + + + + + + + + + + + + + + + + The @data attribute may only occur on an + annotation within the notesStmt element. + + + + + + + + + + + + + + + + + + + + + A person or organization who transcribes a musical composition, usually for a different medium from that of the original; in an arrangement the musical substance remains essentially unchanged. + + + + + + + + + + + + + + + + + (articulation) – An indication of how to play a note or chord. + + + + + + + + + + + + + The name of the creator of the intellectual content of a non-musical, literary work. + + + + + + + + + + + + + + + + + Vertical line drawn through one or more staves that divides musical notation into metrical units. + + + + + + The value of @taktplace must be less than or equal to two times the number of staff + lines. + + + + + + + + + + + + + + + + (bibliographic reference) – Provides a loosely-structured bibliographic citation in which the sub-components may or may not be explicitly marked. + + + + + + + + + + + + + + + + + + + List of bibliographic references. + + + + + + + + + + + + + + + + + When labels are used, + usually each bibliographic item has one. + + + + + + + + + + + + (scope of citation) – Defines the scope of a bibliographic reference, for example as a list of page numbers, or a named subdivision of a larger work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (structured bibliographic citation) – Contains a bibliographic citation in which bibliographic sub-elements must appear in a specified order. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the whole of a single musical text, excluding any front or back matter. + + + + + + + + + + + + + + Break, pause, or interruption in the normal tempo of a composition. Typically indicated by "railroad tracks", i.e., two diagonal slashes. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + A label which accompanies an illustration or a table. + + + + + + + + + + + + + + + + + (cast group) – Groups one or more individual castItem elements within a cast list. + + + + + + + + + + + + + + + + Contains a single entry within a cast list, describing either a single role or a list of non-speaking roles. + + + + + + + + + + + + + + + + + + + Contains a single cast list or dramatis personae. + + + + + + + + + + + + + + + + + + + (column beginning) – An empty formatting element that forces text to begin in a new column. + + + + + + + + + + Records the column number. + + + + + + Column beginning must be preceded by a + colLayout element. + The value of @n should be less than or equal + to the value of @cols () of the preceding + colLayout element. + + + + + + + + A simultaneous sounding of two or more notes in the same layer *with the same duration*. + + + + + + + + + + + + + + + + + + + + + + Indication of the exact location of a particular note on the staff and, therefore, the other notes as well. + + + + + The clef position must be less than or equal to the number of lines of an ancestor + staff. + + + + + + The clef position must be less than or equal to the number of lines of a preceding + staff. + + + + + + + + + + + + + + + (clef group) – A set of simultaneously-occurring clefs. + + + + + + + + + + + + + + + + (column layout) – An empty formatting element that signals the start of columnar layout. + + + + + Records the number of columns. + + + + + + + + The name of the creator of the intellectual content of a musical work. + + + + + + + + + + + + + + + + + Names of individuals, institutions, or organizations responsible for contributions to the intellectual content of a work, where the specialized elements for authors, editors, etc. do not suffice or do not apply. + + + + + + + + + The value of @role must not contain the name of another element available in this + context. + + + + + + + + + + Used to specify the contributor's function. + + + + + + + + + Non-bibliographic details of the creation of an intellectual entity, in narrative form, such as the date, place, and circumstances of its composition. More detailed information may be captured within the history element. + + + + + + + + + + + + + + + + + + + + + Symbol placed at the end of a line of music to indicate the first note of the next line. Sometimes called a "direct". + + + + + + + + + + + + + + A string identifying a point in time or the time period between two such points. + + + + + + + + + + + + + + + + + + + Entity to whom a creative work is formally offered. + + + + + + + + + The dedicatee element may not be + recursively nested. + + + + + + + + + + + + Description of a measurement taken through a three-dimensional object. + + + + + + + + + + + + + + + + (description) – Container for text that briefly describes the feature to which it is attached, including its intended usage, purpose, or application as appropriate. + + + + + + + + + + + + + + + + + + (dimension) – Any single dimensional specification. + + + + + + + + + + + + Aspect of the object being measured. +Suggested values include: 1] alt; 2] angle; 3] circum; 4] depth; 5] diameter; 6] elevation; 7] height; 8] length; 9] radius; 10] relief; 11] width + + alt + Altitude. Refers to the distance above a given level, commonly mean sea level. + angle + Angle. Amount of rotation needed to bring one line or plane into coincidence with another. + circum + Circumference of a circular area. + depth + Dimension taken through an object or body of material, usually downward from an upper surface, horizontally inward from an outer surface, or from top to bottom of something regarded as one of several layers. + diameter + Length of a straight line passing through the center of a circle or sphere and meeting the circumference or surface at each end. + elevation + Distance to which something has been raised or uplifted above a level, e.g. a hill's elevation above the surrounding country. + height + Denotes extent upward (as from foot to head) as well as any measurable distance above a given level. + length + Measure of the greatest dimension of a plane or solid figure. + radius + Half the diameter of a circular, spherical, or cylindrical object. + relief + Projection of a figure or part from the plane on which it is formed. + width + Extent from side to side; breadth. + + + + + + + + + Information about the physical size of an entity; usually includes numerical data. + + + + The depth element may only appear + once. + The height element may only appear + once. + The width element may only appear + once. + + + + + + + + + + + + + (directive) – An instruction expressed as a combination of text and symbols — such as segno and coda symbols, fermatas over a bar line, etc., typically above, below, or between staves, but not on the staff — that is not encoded elsewhere in more specific elements, like tempo or dynam. + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + Person or agency, other than a publisher, from which access (including electronic access) to a bibliographic entity may be obtained. + + + + + + + + + + + + + + + + (division) – Major structural division of text, such as a preface, chapter or section. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Characterizes the textual division in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] abstract; 2] ack; 3] appendix; 4] bibliography; 5] colophon; 6] contents; 7] dedication; 8] frontispiece; 9] glossary; 10] half-title; 11] index; 12] annotations; 13] preface + + abstract + A summary of the content of a text as continuous prose. + ack + A formal declaration of acknowledgment by the author in which persons and institutions are thanked for their part in the creation of a text. + appendix + An ancillary self-contained section of a work, often providing additional but in some sense extra-canonical text. + bibliography + A list of bibliographic citations. + colophon + A statement appearing at the end of a book describing the conditions of its physical production. + contents + A table of contents, specifying the structure of a work and listing its constituents. The list element should be used to mark its structure. + dedication + A formal offering or dedication of a text to one or more persons or institutions by the author. + frontispiece + A pictorial frontispiece, possibly including some text. + glossary + A list of terms associated with definition texts (‘glosses’). + half-title + A page containing only the title of a book — as opposed to the title page, which also lists subtitle, author, imprint and similar data. + index + Any form of index to the work. + annotations + A section in which annotations on the text are gathered together. + preface + A foreword or preface addressed to the reader in which the author or publisher explains the content, purpose, or origin of the text. + + + + + + + + + + Dot of augmentation or division. + + + + + + + + + + + + + (dynamic) – Indication of the volume of a note, phrase, or section of music. + + + + + + + + + + + Must have one of + the attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + When @val2 is present, either + @dur, @dur.ges, @endid, or @tstamp2 must also be present. + + + + + + + + + + + + + + + (edition designation) – A word or text phrase that indicates a difference in either content or form between the item being described and a related item previously issued by the same publisher/distributor (e.g. 2nd edition, version 2.0, etc.), or simultaneously issued by either the same publisher/distributor or another publisher/distributor (e.g. large print edition, British edition, etc.). + + + + + + + + + + + + + + + + + + The name of the individual(s), institution(s) or organization(s) acting in an editorial capacity. + + + + + + + + + + + + + + + + + Alternative ending for a repeated passage of music; i.e., prima volta, seconda volta, etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a free-text event description. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains historical information given as a sequence of significant past events. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates how a section may be programmatically expanded into its 'through-composed' form. + + + + + + + + + + + Used to express size in terms other than physical dimensions, such as number of pages, records, bytes, physical components, etc. + + + + + + + + + + + + + + + + + Names of individuals, institutions, or organizations responsible for funding. Funders provide financial support for a project; they are distinct from sponsors, who provide intellectual support and authority. + + + + + + + + + + + + + + + + + Term or terms that designate a category characterizing a particular style, form, or content. + + + + + + + + + + + + + + + + + Contains a composite musical text, grouping together a sequence of distinct musical texts (or groups of such musical texts) which are regarded as a unit for some purpose, for example, the collected works of a composer. + + + + + + + + + + + + + + + + + + (group symbol) – A brace or bracket used to group two or more staves of a score or part. + + + + + + In scoreDef, grpSym must have startid, + endid, and level attributes. + + + + + In staffGrp, grpSym must not have + startid, endid, or level attributes. + + + + + + + + + + + + + + (heading) – Contains any heading, for example, the title of a section of text, or the heading of a list. + + + + + + + + + + + + + + + + + + Description of the vertical size of an object. + + + + + + + + + + + + + + + + An alpha-numeric string that establishes the identity of the described material. + + + + + + + + + + + + + + + + + + Information relating to the publication or distribution of a bibliographic item. + + + + + + + + + + + + + + + + + + (incipit) – The opening music and/or words of a musical or textual work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (key accidental) – Accidental in a key signature. + + + + One of the following is required: @x and + @y attribute pair, @pname attribute, or @loc attribute. + + + + + + + + + + + Specifies whether enharmonic (written) values or implicit ("perform-able") values are allowed. + + implicit + Only performed values (sharp, flat, natural) allowed. + explicit + All enharmonic (written) values allowed. + + + + + + + + + (key signature) – Written key signature. + + + + + + + + + If the @oct attribute + appears on any keyAccid element, it must be provided on all keyAccid + elements. + + + + + Only keyAccid elements are allowed + here. + + + + + + + + + + + + + + A container for document text that identifies the feature to which it is attached. For a "tool tip" or other generated label, use the label attribute. + + + + + + + + + + + + + + + + + + A label on the pages following the first. + + + + + + + + + + + + + + + + + + An independent stream of events on a staff. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (layer definition) – Container for layer meta-information. + + + + + + + + + + + + + + + + + + + + + + + + + + (line beginning) – An empty formatting element that forces text to begin on a new line. + + + + + + + + + + (line group) – May be used for any section of text that is organized as a group of lines; however, it is most often used for a group of verse lines functioning as a formal unit, e.g. a stanza, refrain, verse paragraph, etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + Person or organization who is a writer of the text of an opera, oratorio, etc. + + + + + + + + + + + + + + + + + Person or organization who is a writer of the text of a song. + + + + + + + + + + + + + + + + + (musical division) – Contains a subdivision of the body of a musical text. + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a single MEI-conformant document, consisting of an MEI header and a musical text, either in isolation or as part of an meiCorpus element. + + + + + The values in @staff must correspond to @n attribute of a staffDef + element. + + + + + + + + + + + (monograph level) – Contains bibliographic elements describing an item, for example, a published book or journal, score, recording, or an unpublished manuscript. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a single musical text of any kind, whether unitary or composite, for example, an etude, opera, song cycle, symphony, or anthology of piano solos. + + + + + + + + + + + + + Proper noun or noun phrase. + + + + + + + + + + + Recommended practice is to use name elements to capture sub-parts of a generic + name. + + + + + + + + + + + + + + + + Characterizes the name in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] person; 2] corporation; 3] location; 4] process; 5] style; 6] time + + person + A personal name. + corporation + Name of a corporate body. + location + Name of a location. + process + Name of a process or software application. + style + Name of a musical style; i.e., form, genre, technique, etc. + time + Name of a period of time. + + + + + + + + + + A single pitched event. + + + + + + + + + + + + + + + + + + + + + + (number) – Numeric information in any form. + + + + + + + + + + + + + + + + Numeric value capturing a measurement or count. Can only be interpreted in combination with the unit attribute. + + + + + + + + + An element indicating an ornament that is not a mordent, turn, or trill. + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (paragraph) – One or more text phrases that form a logical prose passage. + + + + + + + + + + + + + + + + + (padding) – An indication of extra visual space between notational elements. + + + + + + + + + + + + An alternative visual rendition of the score from the point of view of a particular performer (or group of performers). + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a container for performers' parts. + + + + + + + + + + + + + + + (page beginning) – An empty formatting element that forces text to begin on a new page. + + + + + + + + + + + + + + + (page description) – Contains a brief prose description of the appearance or description of the content of a physical page. + + + + + + + + + + + + + + + + + (page footer) – A running footer on the first page. Also, used to temporarily override a running footer on individual pages. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page footer. + + + + + + + + + (page footer 2) – A running footer on the pages following the first. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page footer. Use multiple values to capture an alternating pattern. + + + + + + + + + + + + + (page header) – A running header on the first page. Also, used to temporarily override a running header on individual pages. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page header. + + + + + + + + + (page header 2) – A running header on the pages following the first. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page header. Use multiple values to capture an alternating pattern. + + + + + + + + + + + + + Indication of 1) a "unified melodic idea" or 2) performance technique. + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + The visual attributes of the phrase (@bezier, @bulge, @curvedir, @lform, + @lwidth, @ho, @startho, @endho, @to, @startto, @endto, @vo, @startvo, @endvo, @x, @y, + @x2, and @y2) will be overridden by visual attributes of the contained curve + elements. + + + + + + + + + + + + + + (physical location) – Groups information about the current physical location of a bibliographic item, such as the repository in which it is located and its shelf mark(s), and its previous locations. + + + + + + + + + + + + + + + + + + + + + + + Name of the organization responsible for the publication of a bibliographic item. + + + + + + + + + + + + + + + + (publication place) – Name of the place where a bibliographic item was published. + + + + + + + + + + + + + + + + The name of the individual(s), institution(s) or organization(s) receiving correspondence. + + + + + + + + + + + + + + + + (related item) – Contains or references another bibliographic item which is related to the present one. + + + + + + + + + + + Describes the relationship between the entity identified by the relatedItem element and the resource described in the parent element, i.e., bibl, source or relatedItem. + + + + + + + + Describes a relationship or linkage amongst entities. + + + + Within work, expression, source, or item, the value of the rel attribute must match one + of the following: hasAbridgement, isAbridgementOf, hasAdaptation, isAdaptationOf, + hasAlternate, isAlternateOf, hasArrangement, isArrangementOf, hasComplement, + isComplementOf, hasEmbodiment, isEmbodimentOf, hasExemplar, isExemplarOf, hasImitation, + isImitationOf, hasPart, isPartOf, hasRealization, isRealizationOf, hasReconfiguration, + isReconfigurationOf, hasReproduction, isReproductionOf, hasRevision, isRevisionOf, + hasSuccessor, isSuccessorOf, hasSummarization, isSummarizationOf, hasSupplement, + isSupplementOf, hasTransformation, isTransformationOf, hasTranslation, + isTranslationOf + Within work, expression, source or item, the target attribute + must be present. + + + + + + + + + + + + Describes the relationship between the entities identified by the plist and target attributes. + + + + + + + + Gathers relation elements. + + + + + + + + + + + + + (render) – A formatting element indicating special visual rendering, e.g., bold or italicized, of a text word or phrase. + + + + + + + + + + + + + + + + + + + A positive value for rotation rotates the text in a counter-clockwise fashion, while negative values produce clockwise rotation. + + + + + + + + + Institution, agency, or individual which holds a bibliographic item. + + + + + + + + + + + + + + + + + (responsibility) – A phrase describing the nature of intellectual responsibility. + + + + + + + + + + + + + + + + + + (responsibility statement) – Transcription of text that names one or more individuals, groups, or in rare cases, mechanical processes, responsible for creation, realization, production, funding, or distribution of the intellectual or artistic content. + + + + + + + + + + + + + At least one element pair (a resp element and a name-like element) is + recommended. Alternatively, each name-like element may have a @role + attribute. + + + + + + + + + + + A non-sounding event found in the source being transcribed. + + + + + + + + + + + + The value of @line must be less than or equal to the number of lines on the + staff. + + + + + + + + + + + + + + Name of a dramatic role, as given in a cast list. + + + + + + + + + + + + + + + (role description) – Describes a character's role in a drama. + + + + + + + + + + + + + + + (system beginning) – An empty formatting element that forces musical notation to begin on a new line. + + + + + + + + + + + + + + + + Full score view of the musical content. + + + + + + + + + + + + + + + + + + + + + + + + + + + (score definition) – Container for score meta-information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Segment of music data. + + + + + + + + + + + + + + + + + + + A + section containing an expansion element must have descendant section, ending, or rdg + elements. + + + + + + + + + + + + + + + + + Contains information about the serial publication in which a bibliographic item has appeared. + + + + + + + + + + + + + + + + + + + + + + + A placeholder used to fill an incomplete measure, layer, etc. most often so that the combined duration of the events equals the number of beats in the measure. + + + + + + + + + + + + + Contains a specialized form of heading or label, giving the name of one or more speakers in a dramatic text or fragment. + + + + + + + + + + + + + + + + + Names of sponsoring individuals, organizations or institutions. Sponsors give their intellectual authority to a project; they are to be distinguished from funders, who provide the funding but do not necessarily take intellectual responsibility. + + + + + + + + + + + + + + + + + (stacked text) – An inline table with a single column. + + + + + + + + + + + + Indicates the delimiter used to mark the portions of text that are to be stacked. + + + + + + Specifies how the stacked text components should be aligned. + + left + Left justified. + right + Right justified. + center + Centered. + rightdigit + Aligned on right-most digit. + + + + + + + + + A group of equidistant horizontal lines on which notes are placed in order to represent pitch or a grouping element for individual 'strands' of notes, rests, etc. that may or may not actually be rendered on staff lines; that is, both diastematic and non-diastematic signs. + + + + + + + + + + + + + + + + + There must be a preceding staffDef with a matching value of @n, a preceding staff with + a matching @n value containing a staffDef, or a staffDef child element. + + + + + + + + + + + + + + + + + + + + (staff definition) – Container for staff meta-information. + + + + + + + + + + + + + + + + + StaffDef must have an n attribute. + Either + @lines must be present or a preceding staffDef with the same value for @n and @lines + must exist. + Only one clef or clefGrp is + permitted. + + + + + + @n must have the same value as the + current staff. + + + + + + Either + @lines must be present or a preceding staffDef with matching @n value and @lines must + exist. + + + + + The clef position must be less + than or equal to the number of lines on the staff. + + + + + + + The clef position must be + less than or equal to the number of lines on the staff. + + + + + + The tab.strings attribute must have the same + number of values as there are staff lines. + + + + + + + The + tab.strings attribute must have the same number of values as there are staff + lines. + + + + + + The lines.color attribute + must have either 1) a single value or 2) the same number of values as there are staff + lines. + + + + + The lines.color attribute must have either 1) a single value or 2) the same number of + values as there are staff lines. + + + + + + + The value of ppq must be a factor of + the value of ppq on an ancestor scoreDef. + + + + + + + The value of ppq must be a factor of + the value of ppq on a preceding scoreDef. + + + + + + + + + + + + + + + + + + + (staff group) – A group of bracketed or braced staves. + + + + + + + + + + + + + + + + + + + + + + + Each staffDef must have a unique value + for the n attribute. + + + + + + + + + + + + + + + (syllable) – Individual lyric syllable. + + + + + + + + + + + + + + + + + + + + + A reference to a previously defined symbol. + + + + In the symbolDef context, symbol must have + either a startid attribute or x and y attributes. + In the symbolDef context, symbol + must have one of the following attributes: altsym, glyph.name, or + glyph.num. + + + + + + + + + + + + + + Text and symbols descriptive of tempo, mood, or style, e.g., "allarg.", "a tempo", "cantabile", "Moderato", "♩=60", "Moderato ♩ =60"). + + + + + + + + + + + + Only analog, class, label, mm, mm.dots, mm.unit, n, translit, type, xml:base, xml:id, + and xml:lang attributes are allowed when tempo is not a descendant of a score or + part. + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + + Keyword or phrase which describes a resource. + + + + + + + + + The @data attribute may only occur on a + term which is a descendant of a classification element. + + + + + + + + + + + + (text language) – Identifies the languages and writing systems within the work described by a bibliographic description, not the language of the description. + + + + + + + + + + + + + (main language) supplies a code which identifies the chief language used in the bibliographic work. + + + + + + (other languages) one or more codes identifying any other languages used in the bibliographic work. + + + + + + + + + + + + + Title of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + Indicates the bibliographic level of the title. + + a + Analyzed component, such as an article or chapter, within a larger bibliographic entity. + c + Collection. A group of items that were not originally published, distributed, or produced together. + d + Subunit of a collection, e.g. item, folder, box, archival series, subgroup, or subcollection. + i + Integrating resource, such as a continuously updated loose-leaf service or Web site. + m + Monograph. + j + Journal. + s + Series. + u + Unpublished (including theses and dissertations unless published by a commercial press). + + + + + + Characterizes the title in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] main; 2] subordinate; 3] abbreviated; 4] alternative; 5] translated; 6] uniform; 7] desc + + main + Main title. + subordinate + Subtitle or title of part. + abbreviated + Abbreviated form of title. + alternative + Alternate title by which the item is also known. + translated + Translated form of title. + uniform + Collective title. + desc + Descriptive paraphrase of the work. + + + + + + + + + + Contains a transcription of the title page of a text. + + + + + + + + + + + + + + + + + + + + + + + Contains a subsection or division of the title of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + Characterizes this title component in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] alternative; 2] arrangement; 3] carrier; 4] date; 5] desc; 6] form; 7] key; 8] language; 9] main; 10] name; 11] number; 12] perfmedium; 13] subordinate; 14] translated; 15] version + + alternative + Alternate title by which the item is also known. + arrangement + Arranged statement for music. Analogous to MARC 240 subfield o. + carrier + Medium of the carrier. Analogous to MARC 240 subfield h. + date + Publication/creation date(s) of work. Analogous to MARC 240 subfield f. + desc + Descriptive paraphrase of the work. + form + Form subheading. Analogous to MARC 240 subfield k. + key + Key for music. Analogous to MARC 240 subfield r. + language + Language of a work. Analogous to MARC 240 subfield l (el). + main + Main title. + name + Name of a part or section of a work. Analogous to MARC 240 subfield p. + number + Standard number designation of a work or of a part or section of a work. Analogous to MARC 240 subfield n. + perfmedium + Performance medium. Analogous to MARC 240 subfield m. + subordinate + Subtitle. + translated + Translated form of title. + version + Version. Analogous to MARC 240 subfield s. + + + + + + + + + + Description of the horizontal size of an object. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a formal list or prose description of topics addressed. + + + + + + + + + + + + + + + + + + + + + + + + + + (back matter) – Contains any appendixes, advertisements, indexes, etc. following the main body of a musical text. + + + + + + + + + + + + + + + + + + Contains a quotation, anonymous or attributed, appearing on a title page. + + + + + + + + + + + + + + + + + (front matter) – Bundles prefatory text found before the start of the musical text. + + + + + + + + + + + + + + + + + + Contains a formal statement authorizing the publication of a work, sometimes required to appear on a title page or its verso. + + + + + + + + + + + + + + + + (line of text) – Contains a single line of text within a line group. + + + + + + + + + + + + + + + Used to specify a rhythm for the lyric syllables that differs from that of the notes on the staff, e.g., '4,4,4,4' when the rhythm of the notes is '4.,8,4.,8'. + + + + + + + + + (list item) – Single item in a list. + + + + + + + + + + + + + + + + + + A formatting element that contains a series of items separated from one another and arranged in a linear, often vertical, sequence. + + + + + + + + + + + + In a list of type "gloss" all items + must be immediately preceded by a label. + + + + + + + + + + + + + + Used to indicate the format of a list. In a "simple" list, li elements are not numbered or bulleted. In a "marked" list, the sequence of the list items is not critical, and a bullet, box, dash, or other character is displayed at the start of each item. In an "ordered" list, the sequence of the items is important, and each li is lettered or numbered. Style sheet functions should be used to specify the mark or numeration system for each li. + + simple + Items are not numbered or bulleted. + marked + Bullet, box, dash, or other character is displayed before each item. + ordered + Each item is numbered or lettered. + + + + + + Captures the nature of the content of a list. +Suggested values include: 1] gloss; 2] index; 3] instructions; 4] litany; 5] syllogism + + gloss + Each list item glosses some term or concept, which is given by a label element preceding the list item. + index + Each list item is an entry in an index such as the alphabetical topical index at the back of a print volume. + instructions + Each list item is a step in a sequence of instructions, as in a recipe. + litany + Each list item is one of a sequence of petitions, supplications or invocations, typically in a religious ritual. + syllogism + Each list item is part of an argument consisting of two or more propositions and a final conclusion derived from them. + + + + + + + + + + (quoted) – Contains material which is distinguished from the surrounding phrase-level text using quotation marks or a similar method. Use quote for block-level quotations. + + + + + + + + + + + + + + + + +Suggested values include: 1] spoken; 2] thought; 3] written; 4] soCalled; 5] foreign; 6] distinct; 7] term; 8] emph; 9] mentioned + + + + spoken + Representation of speech. + thought + Representation of thought, e.g. internal monologue. + written + Quotation from a written source. + soCalled + Authorial distance. + foreign + Linguistically distinct. + distinct + Linguistically distinct. + term + Technical term. + emph + Rhetorically emphasized. + mentioned + Refering to itself, not its normal referent. + + + + + + + + + + + + (quoted material) – Contains a paragraph-like block of text attributed to an external source, normally set off from the surrounding text by spacing or other typographic distinction. + + + + + + + + + + + + + + + + + + (arbitrary segment) represents any segmentation of text below the "text component" level. + + + + + + + + + + + + + + + + + + + + + + Provides a way of pointing to a user-defined symbol. It must contain a reference to an ID of a symbolDef element elsewhere in the document. + + + + + + + @altsym attribute + should have content. + The value in @altsym should correspond to the @xml:id attribute of a symbolDef + element. + The value + in @altsym must not correspond to the @xml:id attribute of a symbolDef + ancestor. + + + + + + + + + + Indicates the function of the text. +Suggested values include: 1] unknown + + unknown + The function of the text is unknown. + + + + + + + + + + + + + Indicates the function of the curve. +Suggested values include: 1] unknown + + unknown + The function of the curve is unknown. + + + + + + + + + + + + + + + Indicates the function of the line. +Suggested values include: 1] coloration; 2] ligature; 3] unknown + + coloration + Indicates coloration in material transcribed from a source originally in mensural notation. + ligature + Marks a ligature in material transcribed from a source originally in mensural notation. + unknown + The function of the line is unknown. + + + + + + + + + + + + + + + + + + + + Container for text that is fixed to a particular page location, regardless of changes made to the layout of the measures around it. + + + + + + + + + + + + + + + + + + + + + A curved line that cannot be represented by a more specific element, such as a slur. + + + + In the symbolDef context, curve must have + either a startid attribute or x and y attributes. + In the symbolDef context, curve must have + either an endid attribute or both x2 and y2 attributes. + In the symbolDef context, curve must have either a + bezier or bulge attribute. + + + + + + + + + + + + + + A visual line that cannot be represented by a more specific; i.e., semantic, element. + + + + + + + + + When used in the symbolDef context, must have + either a startid attribute or x and y attributes. + When used in the symbolDef context, must have + either an endid attribute or both x2 and y2 attributes. + + + + + When + used in the score context, must have a startid, tstamp, tstamp.ges or tstamp.real + attribute or both x and y attributes. + When used in + the score context, must have an endid, dur, dur.ges, or tstamp2 attribute or both x2 and + y2 attributes. + + + + + + + + + + + + + + One or more characters which are related to the parent symbol in some respect, as specified by the type attribute. + + + + + + + + + + + + + (property name) – Name of a property of the symbol. + + + + + + + + Characterizes the property name. + + unicode + A registered Unicode normative or informative property name. + local + A locally defined name. + + + + + + + + (property value) – A single property value. + + + + + + + + (symbol definition) – Declaration of an individual symbol in a symbolTable. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (symbol name) – Contains the name of a symbol, expressed following Unicode conventions. + + + + + + + + (symbol property) – Provides a name and value for some property of the parent symbol. + + + + + + + + + Contains a set of user-defined symbols. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Location of the annotation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + States the length of barlines in virtual units. The value must be greater than 0 and is typically equal to 2 times (the number of staff lines - 1); e.g., a value of '8' for a 5-line staff. + + 0 + + + + + + + + Records the method of barring. + + + + + + + + Denotes the staff location of the bar line if its length is non-standard. + + + + + + + + + + + + + Color of beams, including those associated with tuplets. + + + + + + + + Encodes whether a beam is "feathered" and in which direction. + + acc + Beam lines grow farther apart from left to right. + rit + Beam lines grow closer together from left to right. + norm + Beam lines are equally-spaced over the entire length of the beam. + + + + + + + + Captures beam slope. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates a single, alternative note head should be displayed instead of individual note heads. The highest and lowest notes of the chord usually indicate the upper and lower boundaries of the cluster note head. + + + + + + + + + + + + + + + + + + + + + + + + + Describes the color of the clef. + + + + + + + + Determines whether the clef is to be displayed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + h + Horizontal stroke. + v + Vertical stroke. + + + + + + + + Captures the placement of the episema with respect to the neume or neume component with which it is associated. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes how the harmonic indication should be rendered. + + grid + Chord tablature grid. + gridtext + Chord tablature grid and the element's textual content. + text + Textual content of the element. + + + + + + + + + + + + + + + + + + + + + Captures the placement of the tick mark with respect to the neume or neume component with which it is associated. + + + + + + + + Direction toward which the mark points. + + + + + + + + + + + + + + + + + + + + + + + Determines whether cautionary accidentals should be displayed at a key change. + + + + + + + + + + + + Indicates whether the key signature should be displayed. + + + + + + + + Determines whether cautionary accidentals should be displayed at a key change. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Visual form of the line. + + + + + + + + Width of the line. + + + + + + + + Symbol rendered at end of line. + + + + + + + + Holds the relative size of the line-end symbol. + + + + + + + + Symbol rendered at start of line. + + + + + + + + Holds the relative size of the line-start symbol. + + + + + + + + + + + + + + + + + + + + + Records direction of curvature. + + a + Anti-clockwise curvature. + c + Clockwise curvature. + + + + + + + + Indicates whether curve is closed. + + + + + + + + + + + + + + + + Contains an indication of how the meter signature should be rendered. + + num + Show only the number of beats. + denomsym + The lower number in the meter signature is replaced by a note symbol. + norm + Meter signature rendered using traditional numeric values. + invis + Meter signature not rendered. + + + + + + + + Determines whether the old meter signature should be displayed when the meter signature changes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + States the side of a leaf (as in a manuscript) on which the content following the pb element occurs. + + verso + The back of a manuscript page. + recto + The front of a manuscript page. + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of "crests" of a wavy line. + + 2 + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether hash marks should be rendered between systems. See Read, p. 436, ex. 26-3. + + hash + Display hash marks between systems. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines the height of a "virtual unit" (vu) in terms of real-world units. A single vu is half the distance between the vertical center point of a staff line and that of an adjacent staff line. + + \d+(\.\d+)?(cm|mm|in|pt|pc) + + + + + + + + + + + Indicates that staves begin again with this section. + + + + + + + + + + + + + + + + + + + + Captures the placement of the sequence of characters with respect to the neume or neume component with which it is associated. + + + + + + + + + + + + + + + + + + Indicates whether a space is 'compressible', i.e., if it may be removed at the discretion of processing software. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines whether to display guitar chord grids. + + + + + + + + Indicates the number of layers and their stem directions. + + + + + + + + Captures the colors of the staff lines. The value is structured; that is, it should have the same number of space-separated RGB values as the number of lines indicated by the lines attribute. A line can be made invisible by assigning it the same RGB value as the background, usually white. + + + + + + + + + + + + Records whether all staff lines are visible. + + + + + + + + Records the absolute distance (as opposed to the relative distances recorded in scoreDef elements) between this staff and the preceding one in the same system. This value is meaningless for the first staff in a system since the spacing.system attribute indicates the spacing between systems. + + + + + + + + + + + + + + Indicates whether bar lines go across the space between staves (true) or are only drawn across the lines of each staff (false). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-all.rng b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-all.rng new file mode 100644 index 000000000..0ce1b86fc --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/mei-all.rng @@ -0,0 +1,29314 @@ + + + +
                  + + + false + true + + + + + nonzero + evenodd + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lr-tb + rl-tb + tb-rl + lr + rl + tb + inherit + + + + + + + + + + + + + auto + baseline + before-edge + text-before-edge + middle + central + after-edge + text-after-edge + ideographic + alphabetic + hanging + mathematical + inherit + + + + + + + + + + + + ltr + rtl + inherit + + + + + + + auto + use-script + no-change + reset-size + ideographic + alphabetic + hanging + mathematical + central + middle + text-after-edge + text-before-edge + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + start + middle + end + inherit + + + + + + + + + + + + normal + embed + bidi-override + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal + wider + narrower + ultra-condensed + extra-condensed + condensed + semi-condensed + semi-expanded + expanded + extra-expanded + ultra-expanded + inherit + + + + + + + normal + italic + oblique + inherit + + + + + + + normal + small-caps + inherit + + + + + + + normal + bold + bolder + lighter + 100 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + 900 + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + sRGB + linearRGB + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + visible + hidden + scroll + auto + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + butt + round + square + inherit + + + + + + + + + miter + round + bevel + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + sRGB + linearRGB + inherit + + + + + + + + + auto + optimizeSpeed + optimizeQuality + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inline + block + list-item + run-in + compact + marker + table + inline-table + table-row-group + table-header-group + table-footer-group + table-row + table-column-group + table-column + table-cell + table-caption + none + inherit + + + + + + + + + auto + optimizeSpeed + optimizeQuality + inherit + + + + + + + + + visiblePainted + visibleFill + visibleStroke + visible + painted + fill + stroke + all + none + inherit + + + + + + + + + auto + optimizeSpeed + crispEdges + geometricPrecision + inherit + + + + + + + + + auto + optimizeSpeed + optimizeLegibility + geometricPrecision + inherit + + + + + + + + + visible + hidden + inherit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + + + other + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + other + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + embed + + + + + + onLoad + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + new + replace + + + + + + onRequest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + disable + magnify + + + + + + 1.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + preserve + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + spacing + spacingAndGlyphs + + + + + + + align + stretch + + + + + + + auto + exact + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strokeWidth + userSpaceOnUse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auto + perceptual + relative-colorimetric + saturation + absolute-colorimetric + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + pad + reflect + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + pad + reflect + repeat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + userSpaceOnUse + objectBoundingBox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal + multiply + screen + darken + lighten + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + matrix + saturate + hueRotate + luminanceToAlpha + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + over + in + out + atop + xor + arithmetic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + duplicate + wrap + none + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R + G + B + A + + + + + + + R + G + B + A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + erode + dilate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stitch + noStitch + + + + + + + fractalNoise + turbulence + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + identity + table + discrete + linear + gamma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + disable + magnify + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + always + never + whenNotActive + + + + + + + + + + + + + remove + freeze + + + + + + + + + + + + + discrete + linear + paced + spline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + replace + sum + + + + + + + none + sum + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + discrete + linear + paced + spline + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + translate + scale + rotate + skewX + skewY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  + + + s + Sharp. + f + Flat. + ss + Double sharp (written as 2 sharps). + x + Double sharp (written using croix). + ff + Double flat. + xs + Triple sharp (written as a croix followed by a sharp). + sx + Triple sharp (written as a sharp followed by a croix). + ts + Triple sharp (written as 3 sharps). + tf + Triple flat. + n + Natural. + nf + Natural + flat; used to cancel preceding double flat. + ns + Natural + sharp; used to cancel preceding double sharp. + su + Sharp note raised by quarter tone (sharp modified by arrow). + sd + Sharp note lowered by quarter tone (sharp modified by arrow). + fu + Flat note raised by quarter tone (flat modified by arrow). + fd + Flat note lowered by quarter tone (flat modified by arrow). + nu + Natural note raised by quarter tone (natural modified by arrow). + nd + Natural note lowered by quarter tone (natural modified by arrow). + 1qf + 1/4-tone flat accidental. + 3qf + 3/4-tone flat accidental. + 1qs + 1/4-tone sharp accidental. + 3qs + 3/4-tone sharp accidental. + + + + + s + Sharp. + f + Flat. + ss + Double sharp. + ff + Double flat. + n + Natural. + su + Three quarter-tones sharp. + sd + Quarter-tone sharp. + fu + Quarter-tone flat. + fd + Three quarter-tones flat. + + + + + acc + Accent (Unicode 1D17B). + stacc + Staccato (Unicode 1D17C). + ten + Tenuto (Unicode 1D17D). + stacciss + Staccatissimo (Unicode 1D17E). + marc + Marcato (Unicode 1D17F). + spicc + Spiccato. + doit + Main note followed by short slide to higher, indeterminate pitch (Unicode 1D185). + scoop + Main note preceded by short slide from lower, indeterminate pitch (Unicode 1D186). + rip + Main note preceded by long slide from lower, often indeterminate pitch; also known as "squeeze". + plop + Main note preceded by "slide" from higher, indeterminate pitch. + fall + Main note followed by short "slide" to lower, indeterminate pitch. + longfall + Main note followed by long "slide" to lower, indeterminate pitch. + bend + "lip slur" to lower pitch, then return to written pitch. + flip + Main note followed by quick upward rise, then descent in pitch (Unicode 1D187). + smear + (Unicode 1D188). + shake + Alternation between written pitch and next highest overtone (brass instruments) or note minor third higher (woodwinds). + dnbow + Down bow (Unicode 1D1AA). + upbow + Up bow (Unicode 1D1AB). + harm + Harmonic (Unicode 1D1AC). + snap + Snap pizzicato (Unicode 1D1AD). + fingernail + Fingernail (Unicode 1D1B3). + damp + Stop harp string from sounding (Unicode 1D1B4). + dampall + Stop all harp strings from sounding (Unicode 1D1B5). + open + Full (as opposed to stopped) tone. + stop + "muffled" tone. + dbltongue + Double tongue (Unicode 1D18A). + trpltongue + Triple tongue (Unicode 1D18B). + heel + Use heel (organ pedal). + toe + Use toe (organ pedal). + tap + Percussive effect on guitar string(s). + lhpizz + Left-hand pizzicato. + dot + Uninterpreted dot. + stroke + Uninterpreted stroke. + + + + + 4 + + + + + mensur + Between staves only. + staff + Between and across staves as necessary. + takt + Short bar line through a subset of staff lines. + + + + + dashed + Dashed line (Unicode 1D104). + dotted + Dotted line. + dbl + (Unicode 1D101). + dbldashed + Double dashed line. + dbldotted + Double dotted line. + end + (Unicode 1D102). + invis + Bar line not rendered. + rptstart + Repeat start (Unicode 1D106). + rptboth + Repeat start and end. + rptend + Repeat end (Unicode 1D107). + single + (Unicode 1D100). + + + + + [i|m|t][1-6] + + + + + above + The beam is above the material it affects. + below + The beam is below the material it affects. + mixed + The below is above and below the material it affects. + + + + + 0 + + + + + + 1|2|3|4|5 + + + mixed + + + + + + + \.25|\.5|\.75 + + + [0-9](\.25|\.5|\.75)? + + + full + + + + + + true + True. + false + False. + + + + + high + High certainty. + medium + Medium certainty. + low + Low certainty. + unknown + An unknown level of certainty. + + + + + + + + G + G clef (Unicode 1D11E). + GG + Double G clef. + F + F clef (Unicode 1D122). + C + C clef (Unicode 1D121). + perc + Drum clef (Unicode 1D125 or Unicode 1D126). + TAB + Tablature "clef"; i.e. usually "TAB" rendered vertically. + + + + + white + White keys. + black + Black keys. + chromatic + Mixed black and white keys. + + + + + 0 + 1 + + + + + aliceblue + Hex: #f0f8ff / RGB: 240,248,255 + antiquewhite + Hex: #faebd7 / RGB: 250,235,215 + aqua + Hex: #00ffff / RGB: 0,255,255 + aquamarine + Hex: #7fffd4 / RGB: 127,255,212 + azure + Hex: #f0ffff / RGB: 240,255,255 + beige + Hex: #f5f5dc / RGB: 245,245,220 + bisque + Hex: #ffe4c4 / RGB: 255,228,196 + black + Hex: #000000 / RGB: 0,0,0 + blanchedalmond + Hex: #ffebcd / RGB: 255,235,205 + blue + Hex: #0000ff / RGB: 0,0,255 + blueviolet + Hex: #8a2be2 / RGB: 138,43,226 + brown + Hex: #a52a2a / RGB: 165,42,42 + burlywood + Hex: #deb887 / RGB: 222,184,135 + cadetblue + Hex: #5f9ea0 / RGB: 95,158,160 + chartreuse + Hex: #7fff00 / RGB: 127,255,0 + chocolate + Hex: #d2691e / RGB: 210,105,30 + coral + Hex: #ff7f50 / RGB: 255,127,80 + cornflowerblue + Hex: #6495ed / RGB: 100,149,237 + cornsilk + Hex: #fff8dc / RGB: 255,248,220 + crimson + Hex: #dc143c / RGB: 220,20,60 + cyan + Hex: #00ffff / RGB: 0,255,255 + darkblue + Hex: #00008b / RGB: 0,0,139 + darkcyan + Hex: #008b8b / RGB: 0,139,139 + darkgoldenrod + Hex: #b8860b / RGB: 184,134,11 + darkgray + Hex: #a9a9a9 / RGB: 169,169,169 + darkgreen + Hex: #006400 / RGB: 0,100,0 + darkgrey + Hex: #a9a9a9 / RGB: 169,169,169 + darkkhaki + Hex: #bdb76b / RGB: 189,183,107 + darkmagenta + Hex: #8b008b / RGB: 139,0,139 + darkolivegreen + Hex: #556b2f / RGB: 85,107,47 + darkorange + Hex: #ff8c00 / RGB: 255,140,0 + darkorchid + Hex: #9932cc / RGB: 153,50,204 + darkred + Hex: #8b0000 / RGB: 139,0,0 + darksalmon + Hex: #e9967a / RGB: 233,150,122 + darkseagreen + Hex: #8fbc8f / RGB: 143,188,143 + darkslateblue + Hex: #483d8b / RGB: 72,61,139 + darkslategray + Hex: #2f4f4f / RGB: 47,79,79 + darkslategrey + Hex: #2f4f4f / RGB: 47,79,79 + darkturquoise + Hex: #00ced1 / RGB: 0,206,209 + darkviolet + Hex: #9400d3 / RGB: 148,0,211 + deeppink + Hex: #ff1493 / RGB: 255,20,147 + deepskyblue + Hex: #00bfff / RGB: 0,191,255 + dimgray + Hex: #696969 / RGB: 105,105,105 + dimgrey + Hex: #696969 / RGB: 105,105,105 + dodgerblue + Hex: #1e90ff / RGB: 30,144,255 + firebrick + Hex: #b22222 / RGB: 178,34,34 + floralwhite + Hex: #fffaf0 / RGB: 255,250,240 + forestgreen + Hex: #228b22 / RGB: 34,139,34 + fuchsia + Hex: #ff00ff / RGB: 255,0,255 + gainsboro + Hex: #dcdcdc / RGB: 220,220,220 + ghostwhite + Hex: #f8f8ff / RGB: 248,248,255 + gold + Hex: #ffd700 / RGB: 255,215,0 + goldenrod + Hex: #daa520 / RGB: 218,165,32 + gray + Hex: #808080 / RGB: 128,128,128 + green + Hex: #008000 / RGB: 0,128,0 + greenyellow + Hex: #adff2f / RGB: 173,255,47 + grey + Hex: #808080 / RGB: 128,128,128 + honeydew + Hex: #f0fff0 / RGB: 240,255,240 + hotpink + Hex: #ff69b4 / RGB: 255,105,180 + indianred + Hex: #cd5c5c / RGB: 205,92,92 + indigo + Hex: #4b0082 / RGB: 75,0,130 + ivory + Hex: #fffff0 / RGB: 255,255,240 + khaki + Hex: #f0e68c / RGB: 240,230,140 + lavender + Hex: #e6e6fa / RGB: 230,230,250 + lavenderblush + Hex: #fff0f5 / RGB: 255,240,245 + lawngreen + Hex: #7cfc00 / RGB: 124,252,0 + lemonchiffon + Hex: #fffacd / RGB: 255,250,205 + lightblue + Hex: #add8e6 / RGB: 173,216,230 + lightcoral + Hex: #f08080 / RGB: 240,128,128 + lightcyan + Hex: #e0ffff / RGB: 224,255,255 + lightgoldenrodyellow + Hex: #fafad2 / RGB: 250,250,210 + lightgray + Hex: #d3d3d3 / RGB: 211,211,211 + lightgreen + Hex: #90ee90 / RGB: 144,238,144 + lightgrey + Hex: #d3d3d3 / RGB: 211,211,211 + lightpink + Hex: #ffb6c1 / RGB: 255,182,193 + lightsalmon + Hex: #ffa07a / RGB: 255,160,122 + lightseagreen + Hex: #20b2aa / RGB: 32,178,170 + lightskyblue + Hex: #87cefa / RGB: 135,206,250 + lightslategray + Hex: #778899 / RGB: 119,136,153 + lightslategrey + Hex: #778899 / RGB: 119,136,153 + lightsteelblue + Hex: #b0c4de / RGB: 176,196,222 + lightyellow + Hex: #ffffe0 / RGB: 255,255,224 + lime + Hex: #00ff00 / RGB: 0,255,0 + limegreen + Hex: #32cd32 / RGB: 50,205,50 + linen + Hex: #faf0e6 / RGB: 250,240,230 + magenta + Hex: #ff00ff / RGB: 255,0,255 + maroon + Hex: #800000 / RGB: 128,0,0 + mediumaquamarine + Hex: #66cdaa / RGB: 102,205,170 + mediumblue + Hex: #0000cd / RGB: 0,0,205 + mediumorchid + Hex: #ba55d3 / RGB: 186,85,211 + mediumpurple + Hex: #9370db / RGB: 147,112,219 + mediumseagreen + Hex: #3cb371 / RGB: 60,179,113 + mediumslateblue + Hex: #7b68ee / RGB: 123,104,238 + mediumspringgreen + Hex: #00fa9a / RGB: 0,250,154 + mediumturquoise + Hex: #48d1cc / RGB: 72,209,204 + mediumvioletred + Hex: #c71585 / RGB: 199,21,133 + midnightblue + Hex: #191970 / RGB: 25,25,112 + mintcream + Hex: #f5fffa / RGB: 245,255,250 + mistyrose + Hex: #ffe4e1 / RGB: 255,228,225 + moccasin + Hex: #ffe4b5 / RGB: 255,228,181 + navajowhite + Hex: #ffdead / RGB: 255,222,173 + navy + Hex: #000080 / RGB: 0,0,128 + oldlace + Hex: #fdf5e6 / RGB: 253,245,230 + olive + Hex: #808000 / RGB: 128,128,0 + olivedrab + Hex: #6b8e23 / RGB: 107,142,35 + orange + Hex: #ffa500 / RGB: 255,165,0 + orangered + Hex: #ff4500 / RGB: 255,69,0 + orchid + Hex: #da70d6 / RGB: 218,112,214 + palegoldenrod + Hex: #eee8aa / RGB: 238,232,170 + palegreen + Hex: #98fb98 / RGB: 152,251,152 + paleturquoise + Hex: #afeeee / RGB: 175,238,238 + palevioletred + Hex: #db7093 / RGB: 219,112,147 + papayawhip + Hex: #ffefd5 / RGB: 255,239,213 + peachpuff + Hex: #ffdab9 / RGB: 255,218,185 + peru + Hex: #cd853f / RGB: 205,133,63 + pink + Hex: #ffc0cb / RGB: 255,192,203 + plum + Hex: #dda0dd / RGB: 221,160,221 + powderblue + Hex: #b0e0e6 / RGB: 176,224,230 + purple + Hex: #800080 / RGB: 128,0,128 + red + Hex: #ff0000 / RGB: 255,0,0 + rosybrown + Hex: #bc8f8f / RGB: 188,143,143 + royalblue + Hex: #4169e1 / RGB: 65,105,225 + saddlebrown + Hex: #8b4513 / RGB: 139,69,19 + salmon + Hex: #fa8072 / RGB: 250,128,114 + sandybrown + Hex: #f4a460 / RGB: 244,164,96 + seagreen + Hex: #2e8b57 / RGB: 46,139,87 + seashell + Hex: #fff5ee / RGB: 255,245,238 + sienna + Hex: #a0522d / RGB: 160,82,45 + silver + Hex: #c0c0c0 / RGB: 192,192,192 + skyblue + Hex: #87ceeb / RGB: 135,206,235 + slateblue + Hex: #6a5acd / RGB: 106,90,205 + slategray + Hex: #708090 / RGB: 112,128,144 + slategrey + Hex: #708090 / RGB: 112,128,144 + snow + Hex: #fffafa / RGB: 255,250,250 + springgreen + Hex: #00ff7f / RGB: 0,255,127 + steelblue + Hex: #4682b4 / RGB: 70,130,180 + tan + Hex: #d2b48c / RGB: 210,180,140 + teal + Hex: #008080 / RGB: 0,128,128 + thistle + Hex: #d8bfd8 / RGB: 216,191,216 + tomato + Hex: #ff6347 / RGB: 255,99,71 + turquoise + Hex: #40e0d0 / RGB: 64,224,208 + violet + Hex: #ee82ee / RGB: 238,130,238 + wheat + Hex: #f5deb3 / RGB: 245,222,179 + white + Hex: #ffffff / RGB: 255,255,255 + whitesmoke + Hex: #f5f5f5 / RGB: 245,245,245 + yellow + Hex: #ffff00 / RGB: 255,255,0 + yellowgreen + Hex: #9acd32 / RGB: 154,205,50 + + + + + + #[0-9A-Fa-f]{6,6} + + + #[0-9A-Fa-f]{8,8} + + + rgb\((\s*(([01]?[0-9]?[0-9])|2[0-4][0-9]|25[0-5])\s*,\s*){2}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*\) + + + rgba\(\s*(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\s*,\s*){3}(0(\.\d+)?|1(\.0+)?)\s*\)|rgba\(\s*(((\d{1,2})?%|100%)\s*,\s*){2}(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + + + hsl\(\s*((\d{1,2})|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|100%)\s*,\s*(\d{1,2}%|100%)\s*\) + + + hsla\(\s*(\d{1,2}|[12]\d{2}|3[0-5]\d|360)\s*,\s*(\d{1,2}%|100%)\s*,\s*(\d{1,2}%|100%)\s*,\s*(0(\.\d+)?|1(\.0+)?)\s*\) + + + + + + + + + + + + + + + + + + n + In a northern direction. + e + In an eastern direction. + s + In a southern direction. + w + In a western direction. + + + + + ne + In a north-eastern direction. + nw + In a north-western direction. + se + In a south-eastern direction. + sw + In a south-western direction. + + + + + 360.0 + -360.0 + + + + + + + + + + + + + + + + + paren + Parentheses: ( and ). + brack + Square brackets: [ and ]. + + + + + + + + + + + above + Above. + below + Below. + left + Left. + right + Right. + + + + + above-left + Above and left; north-west. + above-right + Above and right; north-east. + below-left + Below and left; south-west. + below-right + Below and right; south-east. + + + + + void + Unfilled + solid + Filled + top + Top half filled + bottom + Bottom half filled + left + Left half filled + right + Right half filled + + + + + + 1 + 4 + + + x|o|t + + + + + + + + + + + + + + + + + + + \d*(\.\d+)?(pt|vu) + + + + (pt|vu) + + + 0+(pt|vu) + + + 0+(\.0+)?(pt|vu) + + + \.0+(pt|vu) + + + + + + + + 1 + 9 + + + + + xx-small + Smaller than x-small. + x-small + Smaller than small, larger than xx-small. + small + Smaller than normal, larger than x-small. + normal + Smaller than large, larger than small. + large + Smaller than x-large, larger than normal. + x-large + Smaller than xx-large, larger than large. + xx-large + Larger than x-large. + smaller + One size smaller than the current size. + larger + One size larger than the current size. + + + + + italic + Text slants to right. + normal + Unadorned. + oblique + Text slants to the left. + + + + + bold + Bold or heavy. + normal + Not bold. + + + + + + + + i + First note/chord in glissando. + m + Note/chord that's neither first nor last in glissando. + t + Last note in glissando. + + + + + acc + Time "stolen" from following note. + unacc + Time "stolen" from previous note. + unknown + No interpretation regarding performed value of grace note. + + + + + + + + + + + + quarter + Filled, rotated oval (Unicode 1D158). + half + Unfilled, rotated oval (Unicode 1D157). + whole + Unfilled, rotated oval (Unicode 1D15D). + backslash + Unfilled backslash (~ reflection of Unicode 1D10D). + circle + Unfilled circle (Unicode 25CB). + + + Plus sign (Unicode 1D144). + diamond + Unfilled diamond (Unicode 1D1B9). + isotriangle + Unfilled isosceles triangle (Unicode 1D148). + oval + Unfilled, unrotated oval (Unicode 2B2D). + piewedge + Unfilled downward-pointing wedge (Unicode 1D154). + rectangle + Unfilled rectangle (Unicode 25AD). + rtriangle + Unfilled right triangle (Unicode 1D14A). + semicircle + Unfilled semi-circle (Unicode 1D152). + slash + Unfilled slash (~ Unicode 1D10D). + square + Unfilled square (Unicode 1D146). + x + X (Unicode 1D143). + + + + + (#x|U\+)[A-F0-9]+ + + + + + left + Left aligned. + right + Right aligned. + center + Centered. + justify + Left and right aligned. + + + + + [AdMmP][0-9]+ + + + + + + u|d|s|n|sd|su + + + (\+|\-)?([AdMmP])?[0-9]+ + + + (\+|\-)?\d+(\.\d+)?hs + + + + + + + + + + + + + + + [0-9.,DHMPRSTWYZ/:+\-]+ + + + + + + + + + mixed|0|([1-9]|1[0-2])[f|s] + + + + + 1 + Single layer. + 2o + Two layers with opposing stems. + 2f + Two layers with 'floating' stems. + 3o + Three layers with opposing stems. + 3f + Three layers with 'floating' stems. + + + + + recta + Notes are "squeezed" together. + obliqua + Individual notes are replaced by an oblique figure. + + + + + dashed + Dashed line. + dotted + Dotted line. + solid + Straight, uninterrupted line. + wavy + Undulating line. + + + + + angledown + 90 degree turn down (similar to Unicode 231D at end of line, 231C at start). + angleup + 90 degree turn up (similar to Unicode 231F at end of line, 231E at start). + angleright + 90 degree turn right (syntactic sugar for "angledown" for vertical or angled lines). + angleleft + 90 degree turn left (syntactic sugar for "angleup" for vertical or angled lines). + arrow + Filled, triangular arrowhead (similar to Unicode U+25C0 or SMuFL U+EB78). + arrowopen + Open triangular arrowhead (similar to Unicode U+02C3 or SMuFL U+EB8A). + arrowwhite + Unfilled, triangular arrowhead (similar to Unicode U+25C1 or SMuFL U+EB82). + harpoonleft + Harpoon-shaped arrowhead left of line (similar to arrowhead of Unicode U+21BD). + harpoonright + Harpoon-shaped arrowhead right of line (similar to arrowhead of Unicode U+21BC). + H + Hauptstimme (Unicode U+1D1A6 or SMuFL U+E860). + N + Nebenstimme (Unicode U+1D1A7 or SMuFL U+E861). + Th + Theme (SMuFL U+E864). + ThRetro + Theme, retrograde (SMuFL U+E865). + ThRetroInv + Theme, retrograde inversion (SMuFL U+E866). + ThInv + Theme, inverted (SMuFL U+E867). + T + Theme (SMuFL U+E868). + TInv + Theme, inverted (SMuFL U+E869). + CH + Choralemelodie (SMuFL U+E86A). + RH + Hauptrhythmus (SMuFL U+E86B). + none + No start/end symbol. + + + + + + + + + + + narrow + Default line width. + medium + Twice as wide as narrow. + wide + Twice as wide as medium. + + + + + ([0-9]+m\s*\+\s*)?[0-9]+(\.?[0-9]*)? + + + + + (\+|-)?[0-9]+m\+[0-9]+(\.[0-9]*)? + + + + + (\+)?\d+(\.\d+)?(cm|mm|in|pt|pc|px|vu)? + + + + + (\+|-)?\d+(\.\d+)?(cm|mm|in|pt|pc|px|vu)? + + + + + aln + Accented lower neighbor. + ant + Anticipation. + app + Appogiatura. + apt + Accented passing tone. + arp + Arpeggio tone (chordal tone). + arp7 + Arpeggio tone (7th added to the chord). + aun + Accented upper neighbor. + chg + Changing tone. + cln + Chromatic lower neighbor. + ct + Chord tone (i.e., not an embellishment). + ct7 + Chord tone (7th added to the chord). + cun + Chromatic upper neighbor. + cup + Chromatic unaccented passing tone. + et + Escape tone. + ln + Lower neighbor. + ped + Pedal tone. + rep + Repeated tone. + ret + Retardation. + 23ret + 2-3 retardation. + 78ret + 7-8 retardation. + sus + Suspension. + 43sus + 4-3 suspension. + 98sus + 9-8 suspension. + 76sus + 7-6 suspension. + un + Upper neighbor. + un7 + Upper neighbor (7th added to the chord). + upt + Unaccented passing tone. + upt7 + Unaccented passing tone (7th added to the chord). + + + + + C + Tempus imperfectum. + O + Tempus perfectum. + + + + + common + Common time; i.e. 4/4. + cut + Cut time; i.e. 2/2. + + + + + 0|([1-9]|1[0-5])o?|16o + + + + + + + + + + + Acoustic Grand Piano + Program #0. + Bright Acoustic Piano + Program #1. + Electric Grand Piano + Program #2. + Honky-tonk Piano + Program #3. + Electric Piano 1 + Program #4. + Electric Piano 2 + Program #5. + Harpsichord + Program #6. + Clavi + Program #7. + Celesta + Program #8. + Glockenspiel + Program #9. + Music_Box + Program #10. + Vibraphone + Program #11. + Marimba + Program #12. + Xylophone + Program #13. + Tubular Bells + Program #14. + Dulcimer + Program #15. + Drawbar Organ + Program #16. + Percussive Organ + Program #17. + Rock Organ + Program #18. + Church Organ + Program #19. + Reed Organ + Program #20. + Accordion + Program #21. + Harmonica + Program #22. + Tango Accordion + Program #23. + Acoustic Guitar (nylon) + Program #24. + Acoustic Guitar (steel) + Program #25. + Electric Guitar (jazz) + Program #26. + Electric Guitar (clean) + Program #27. + Electric Guitar (muted) + Program #28. + Overdriven Guitar + Program #29. + Distortion Guitar + Program #30. + Guitar harmonics + Program #31. + Acoustic Bass + Program #32. + Electric Bass (finger) + Program #33. + Electric Bass (pick) + Program #34. + Fretless Bass + Program #35. + Slap Bass 1 + Program #36. + Slap Bass 2 + Program #37. + Synth Bass 1 + Program #38. + Synth Bass 2 + Program #39. + Violin + Program #40. + Viola + Program #41. + Cello + Program #42. + Contrabass + Program #43. + Tremolo Strings + Program #44. + Pizzicato Strings + Program #45. + Orchestral Harp + Program #46. + Timpani + Program #47. + String Ensemble 1 + Program #48. + String Ensemble 2 + Program #49. + SynthStrings 1 + Program #50. + SynthStrings 2 + Program #51. + Choir Aahs + Program #52. + Voice Oohs + Program #53. + Synth Voice + Program #54. + Orchestra Hit + Program #55. + Trumpet + Program #56. + Trombone + Program #57. + Tuba + Program #58. + Muted Trumpet + Program #59. + French Horn + Program #60. + Brass Section + Program #61. + SynthBrass 1 + Program #62. + SynthBrass 2 + Program #63. + Soprano Sax + Program #64. + Alto Sax + Program #65. + Tenor Sax + Program #66. + Baritone Sax + Program #67. + Oboe + Program #68. + English Horn + Program #69. + Bassoon + Program #70. + Clarinet + Program #71. + Piccolo + Program #72. + Flute + Program #73. + Recorder + Program #74. + Pan Flute + Program #75. + Blown Bottle + Program #76. + Shakuhachi + Program #77. + Whistle + Program #78. + Ocarina + Program #79. + Lead 1 (square) + Program #80. + Lead 2 (sawtooth) + Program #81. + Lead 3 (calliope) + Program #82. + Lead 4 (chiff) + Program #83. + Lead 5 (charang) + Program #84. + Lead 6 (voice) + Program #85. + Lead 7 (fifths) + Program #86. + Lead 8 (bass + lead) + Program #87. + Pad 1 (new age) + Program #88. + Pad 2 (warm) + Program #89. + Pad 3 (polysynth) + Program #90. + Pad 4 (choir) + Program #91. + Pad 5 (bowed) + Program #92. + Pad 6 (metallic) + Program #93. + Pad 7 (halo) + Program #94. + Pad 8 (sweep) + Program #95. + FX 1 (rain) + Program #96. + FX 2 (soundtrack) + Program #97. + FX 3 (crystal) + Program #98. + FX 4 (atmosphere) + Program #99. + FX 5 (brightness) + Program #100. + FX 6 (goblins) + Program #101. + FX 7 (echoes) + Program #102. + FX 8 (sci-fi) + Program #103. + Sitar + Program #104. + Banjo + Program #105. + Shamisen + Program #106. + Koto + Program #107. + Kalimba + Program #108. + Bagpipe + Program #109. + Fiddle + Program #110. + Shanai + Program #111. + Tinkle Bell + Program #112. + Agogo + Program #113. + Steel Drums + Program #114. + Woodblock + Program #115. + Taiko Drum + Program #116. + Melodic Tom + Program #117. + Synth Drum + Program #118. + Reverse Cymbal + Program #119. + Guitar Fret Noise + Program #120. + Breath Noise + Program #121. + Seashore + Program #122. + Bird Tweet + Program #123. + Telephone Ring + Program #124. + Helicopter + Program #125. + Applause + Program #126. + Gunshot + Program #127. + Acoustic Bass Drum + Key #35. + Bass Drum 1 + Key #36. + Side Stick + Key #37. + Acoustic Snare + Key #38. + Hand Clap + Key #39. + Electric Snare + Key #40. + Low Floor Tom + Key #41. + Closed Hi Hat + Key #42. + High Floor Tom + Key #43. + Pedal Hi-Hat + Key #44. + Low Tom + Key #45. + Open Hi-Hat + Key #46. + Low-Mid Tom + Key #47. + Hi-Mid Tom + Key #48. + Crash Cymbal 1 + Key #49. + High Tom + Key #50. + Ride Cymbal 1 + Key #51. + Chinese Cymbal + Key #52. + Ride Bell + Key #53. + Tambourine + Key #54. + Splash Cymbal + Key #55. + Cowbell + Key #56. + Crash Cymbal 2 + Key #57. + Vibraslap + Key #58. + Ride Cymbal 2 + Key #59. + Hi Bongo + Key #60. + Low Bongo + Key #61. + Mute Hi Conga + Key #62. + Open Hi Conga + Key #63. + Low Conga + Key #64. + High Timbale + Key #65. + Low Timbale + Key #66. + High Agogo + Key #67. + Low Agogo + Key #68. + Cabasa + Key #69. + Maracas + Key #70. + Short Whistle + Key #71. + Long Whistle + Key #72. + Short Guiro + Key #73. + Long Guiro + Key #74. + Claves + Key #75. + Hi Wood Block + Key #76. + Low Wood Block + Key #77. + Mute Cuica + Key #78. + Open Cuica + Key #79. + Mute Triangle + Key #80. + Open Triangle + Key #81. + + + + + 0|([1-9]|[1-9][0-9]|1([0-1][0-9]|2[0-7]))o?|128o + + + + + + + + + + + + + + + + + major + Major mode. + minor + Minor mode. + dorian + Dorian mode. + phrygian + Phrygian mode. + lydian + Lydian mode. + mixolydian + Mixolydian mode. + aeolian + Aeolian mode. + locrian + Locrian mode. + + + + + preceding + Temporal predecessor of the resource. + succeeding + Temporal successor to the resource. + original + Original form of the resource. + host + Parent containing the resource. + constituent + Intellectual or physical component of the resource. + otherVersion + Version of the resource's intellectual content not changed enough to be a different work. + otherFormat + Version of the resource in a different physical format. + isReferencedBy + Published bibliographic description, review, abstract, or index of the resource's content. + references + Cited or referred to in the resource. + + + + + 2 + 3 + + + + + 2 + 3 + + + + + + + + + + + + + + botmar + At the foot of the page. + topmar + At the top of the page. + leftmar + At the left of the page. + rightmar + At the right of the page. + facing + On the opposite, i.e. facing, page. + overleaf + On the other side of the leaf. + end + At the end of this division; e.g., chapter, volume, etc. + inter + Within a line text; i.e., an insertion. + intra + Between the lines of text, less exact than "sub" or "super". + super + Above a line of text, more exact than "intra(linear)". Do not confuse with superscript rendition. + sub + Below a line of text, more exact than "intra(linear)". Do not confuse with subscript rendition. + inspace + In a predefined space; i.e., that left by an earlier scribe. + superimposed + Obscures original text; e.g., via overstrike, addition of new writing surface material, etc. + + + + + cmn + Common Music Notation. + mensural + Mensural notation. + mensural.black + Black mensural notation. + mensural.white + White mensural notation. + neume + Neumatic notation. + tab + Tablature notation. + + + + + + + + + + + slash + Slash (upper right to lower left). + backslash + Backslash (upper left to lower right). + vline + Vertical line. + hline + Horizontal line. + centerdot + Center dot. + paren + Enclosing parentheses. + brack + Enclosing square brackets. + box + Enclosing box. + circle + Enclosing circle. + dblwhole + Enclosing "fences". + + + + + + centertext\((A|B|C|D|E|F|G)(f|♭|n|♮|s|♯)?\) + + + centertext\(H(s|♯)?\) + + + + + + 9 + + + + + 8|15|22 + + + + + reversed|90CW|90CCW + + + + + above + The staff immediately above. + below + The staff immediately below. + + + + + 1 + 2 + + + + + [0-9]+(\.?[0-9]*)?% + + + + + (([0-9]|[1-9][0-9])(\.[0-9]+)?|100)% + + + + + (\+|-)?(([0-9]|[1-9][0-9])(\.[0-9]+)?|100)% + + + + + + + + 11 + + + + + [a-g] + + + + + [a-g]|none + + + + + + + + + + + + + + + 2 + 3 + + + + + + + + + + + + + + + + + + none + No rotation. + down + Rotated 180 degrees. + left + Rotated 270 degrees clockwise. + ne + Rotated 45 degrees clockwise. + nw + Rotated 315 degrees clockwise. + se + Rotated 135 degrees clockwise. + sw + Rotated 225 degrees clockwise. + + + + + (\^|v)?[1-7](\+|\-)? + + + + + 1 + 6 + + + + + [i|m|t][1-6] + + + + + + + + + + + + + accid + Accidentals. + annot + Annotations. + artic + Articulations. + dir + Directives. + dynam + Dynamics. + harm + Harmony indications. + ornam + Ornaments. + sp + Spoken text. + stageDir + Stage directions. + tempo + Tempo markings. + + + + + + + + + + + + + + above + Above the staff. + below + Below the staff. + + + + + between + Between staves. + within + Within/on the staff. + + + + + + + + + + + up + Stem points upwards. + down + Stem points downwards. + + + + + left + Stem points left. + right + Stem points right. + ne + Stem points up and right. + se + Stem points down and right. + nw + Stem points up and left. + sw + Stem points down and left. + + + + + none + No modifications to stem. + 1slash + 1 slash through stem. + 2slash + 2 slashes through stem. + 3slash + 3 slashes through stem. + 4slash + 4 slashes through stem. + 5slash + 5 slashes through stem. + 6slash + 6 slashes through stem. + sprech + X placed on stem. + z + Z placed on stem. + + + + + left + Stem attached to left side of note head. + right + Stem attached to right side of note head. + center + Stem is originates from center of note head. + + + + + + + + equal + Equal or 12-tone temperament. + just + Just intonation. + mean + Meantone intonation. + pythagorean + Pythagorean tuning. + + + + + + + + 2 + 3 + + + + + quote + Surrounded by single quotes. + quotedbl + Surrounded by double quotes. + italic + Italicized (slanted to right). + oblique + Oblique (slanted to left). + smcaps + Small capitals. + bold + Relative font weight. + bolder + Relative font weight. + lighter + Relative font weight. + box + Enclosed in box. + circle + Enclosed in ellipse/circle. + dbox + Enclosed in diamond. + tbox + Enclosed in triangle. + bslash + Struck through by '\' (back slash). + fslash + Struck through by '/' (forward slash). + line-through + Struck through by '-'; may be qualified to indicate multiple parallel lines, e.g. line-through(2). + none + Not rendered, invisible. + overline + Line above the text; may be qualified to indicate multiple parallel lines, e.g. overline(3). + overstrike + Use for deleted text fully or partially obscured by other text (such as 'XXXXX') or musical symbols (such as notes, rests, etc.). + strike + Struck through by '-'; equivalent to line-through; may be qualified to indicate multiple parallel lines, e.g. strike(3). + sub + Subscript. + sup + Superscript. + superimpose + Use for added text or musical symbols that fully or partially obscure text from an earlier writing stage. + underline + Underlined; may be qualified to indicate multiple parallel lines, e.g. underline(2). + x-through + Crossed-out; equivalent to 'bslash' (\) plus 'fslash' (/); that is, a hand-written 'X'; may be qualified to indicate multiple parallel lines, e.g. x-through(2). + ltr + Left-to-right (BIDI embed). + rtl + Right-to-left (BIDI embed). + lro + Left-to-right (BIDI override). + rlo + Right-to-left (BIDI override). + + + + + + (underline|overline|line-through|strike|x-through)\(\d+\) + + + (letter-spacing|line-height)\((\+|-)?\d+(\.\d+)?%?\) + + + + + + + + + + + + [i|m|t] + + + + + + + + [i|m|t][1-6] + + + + + + + + top + Top aligned. + middle + Middle aligned. + bottom + Bottom aligned. + baseline + Baseline aligned. + + + + + (\p{L}|\p{N}|\p{P}|\p{S})* + + + + + long + Quadruple whole note. + breve + Double whole note. + 1 + Whole note. + 2 + Half note. + 4 + Quarter note. + 8 + 8th note. + 16 + 16th note. + 32 + 32nd note. + 64 + 64th note. + 128 + 128th note. + 256 + 256th note. + 512 + 512th note. + 1024 + 1024th note. + 2048 + 2048th note. + + + + + beam + Beams. + bend + Bend indications. + bracketSpan + Brackets, e.g., for transcribed ligatures. + breath + Breath marks. + cpMark + Copy marks. + fermata + Fermatas. + fing + Fingerings. + hairpin + Hairpin dynamics. + harpPedal + Harp pedals. + lv + Laissez vibrer indications, sometimes called "open ties". + mordent + Mordents. + octave + Octaviation marks. + pedal + Piano pedal marks. + reh + Rehearsal marks. + tie + Ties. + trill + Trills. + tuplet + Tuplets. + turn + Turns. + + + + + [A|a|b|I|i|K|k|M|m|N|n|S|s|T|t|O]|(A|a|S|s|K|k)?(T|t|M|m)(I|i|S|s)? + + + + + hasAbridgement + Target is an abridgement, condensation, or expurgation of the current entity. + isAbridgementOf + Reciprocal relationship of hasAbridgement. + hasAdaptation + Target is an adaptation, paraphrase, free translation, variation (music), harmonization (music), or fantasy (music) of the current entity. + isAdaptationOf + Reciprocal relationship of hasAdaptation. + hasAlternate + Target is an alternate format or simultaneously released edition of the current entity. + isAlternateOf + Reciprocal relationship of hasAlternate. + hasArrangement + Target is an arrangement (music) of the current entity. + isArrangementOf + Reciprocal relationship of hasArrangement. + hasComplement + Target is a cadenza, libretto, choreography, ending for unfinished work, incidental music, or musical setting of a text of the current entity. + isComplementOf + Reciprocal relationship of hasComplement. + hasEmbodiment + Target is a physical embodiment of the current abstract entity; describes the expression-to-manifestation relationship. + isEmbodimentOf + Reciprocal relationship of hasEmbodiment. + hasExemplar + Target is an exemplar of the class of things represented by the current entity; describes the manifestation-to-item relationship. + isExemplarOf + Reciprocal relationship of hasExamplar. + hasImitation + Target is a parody, imitation, or travesty of the current entity. + isImitationOf + Reciprocal relationship of hasImitation. + hasPart + Target is a chapter, section, part, etc.; volume of a multivolume manifestation; volume/issue of serial; intellectual part of a multi-part work; illustration for a text; sound aspect of a film; soundtrack for a film on separate medium; soundtrack for a film embedded in film; monograph in a series; physical component of a particular copy; the binding of a book of the current entity. + isPartOf + Reciprocal relationship of hasPart. + hasRealization + Target is a realization of the current entity; describes the work-to-expression relationship. + isRealizationOf + Reciprocal relationship of hasRealization. + hasReconfiguration + Target has been reconfigured: bound with, split into, extracted from the current entity. + isReconfigurationOf + Reciprocal relationship of hasReconfiguration. + hasReproduction + Target is a reproduction, microreproduction, macroreproduction, reprint, photo-offset reprint, or facsimile of the current entity. + isReproductionOf + Reciprocal relationship of hasReproduction. + hasRevision + Target is a revised edition, enlarged edition, or new state (graphic) of the current entity. + isRevisionOf + Reciprocal relationship of hasRevision. + hasSuccessor + Target is a sequel or succeeding work of the current entity. + isSuccessorOf + Reciprocal relationship of hasSuccessor. + hasSummarization + Target is a digest or abstract of the current entity. + isSummarizationOf + Reciprocal relationship of hasSummarization. + hasSupplement + Target is an index, concordance, teacher's guide, gloss, supplement, or appendix of the current entity. + isSupplementOf + Reciprocal relationship of hasSupplement. + hasTransformation + Target is a dramatization, novelization, versification, or screenplay of the current entity. + isTransformationOf + Reciprocal relationship of hasTransformation. + hasTranslation + Target is a literal translation or transcription (music) of the current entity. + isTranslationOf + Reciprocal relationship of hasTranslation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + maxima + Two or three times as long as a longa. + longa + Two or three times as long as a brevis. + brevis + Two times as long as a semibreve. + semibrevis + Half or one-third as long as a breve/brevis. + minima + Half or one-third as long as a semibreve/semibrevis. + semiminima + Half or one-third as long as a minima. + fusa + Half or one-third as long as a semiminima. + semifusa + Half or one-third as long as a fusa. + + + + + ligature + Ligatures. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + byte + Bytes. + smil + Synchronized Multimedia Integration Language. + midi + MIDI clicks. + mmc + MIDI machine code. + mtc + MIDI time code. + smpte-25 + SMPTE 25 EBU. + smpte-24 + SMPTE 24 Film Sync. + smpte-df30 + SMPTE 30 Drop. + smpte-ndf30 + SMPTE 30 Non-Drop. + smpte-df29.97 + SMPTE 29.97 Drop. + smpte-ndf29.97 + SMPTE 29.97 Non-Drop. + tcf + AES Time-code character format. + time + ISO 24-hour time format: HH:MM:SS.ss. + + + + + + + + + + Contains classification of the notation contained or described by the element bearing this attribute. + + + + + + + + Provides any sub-classification of the notation contained or described by the element, additional to that given by its notationtype attribute. + + + + + + + An element with a notationsubtype attribute must have + a notationtype attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates to what degree the harmonic label is supported by the notation. + + explicit + The notation contains all the notes necessary for the harmonic label, e.g., the notes "D F♯ A" for the harmonic label "D". + implied + The harmonic label relies on notes implied, but not actually present, in the notation, e.g., the notes "D F♯ C" for the harmonic label "D7". The note "A" is missing from the notation, but can be implied. + + + + + + + + + + + Captures scale degree information using Humdrum **deg syntax -- an optional indicator of melodic approach (^ = ascending approach, v = descending approach), a scale degree value (1 = tonic ... 7 = leading tone), and an optional indication of chromatic alteration, "1", "v7", "^1", or "v5+", for example. The amount of chromatic alternation is not indicated. + + + + + + + + + + + + + + + + + + + + Encodes the harmonic interval between pitches occurring at the same time. + + + + + + + + + + + + + + + Encodes the melodic interval from the previous pitch. The value may be a general directional indication (u, d, s, etc.), an indication of diatonic interval direction, quality, and size, or a precise numeric value in half steps. + + + + + + + + + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + + + + + + Contains an accidental for the tonic key, if one is required, e.g., if key.pname equals 'c' and key.accid equals 's', then a tonic of C# is indicated. + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + Holds the pitch name of the tonic key, e.g. 'c' for the key of C. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes melodic function using Humdrum **embel syntax. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds pitch class information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains sol-fa designation, e.g., do, re, mi, etc., in either a fixed or movable Do system. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the direction in which an arpeggio is to be performed. + + up + Lowest to highest pitch. + down + Highest to lowest pitch. + nonarp + Non-arpeggiated style (usually rendered with a preceding bracket instead of a wavy line). + + + + + + + + + + + + + + + In the case of cross-staff beams, the beam.with attribute is used to indicate which staff the beam is connected to; that is, the staff above or the staff below. + + + + + + + + + + + + Provides an example of how automated beaming (including secondary beams) is to be performed. + + + + + + + + Indicates whether automatically-drawn beams should include rests shorter than a quarter note duration. + + + + + + + + + + + Indicates that this event is "under a beam". + + + + + + + + + + + + + + + + + + Captures whether a beam is "feathered" and in which direction. + + acc + (accelerando) indicates that the secondary beams get progressively closer together toward the end of the beam. + mixed + (mixed acc and rit) for beams that are "feathered" in both directions. + rit + (ritardando) means that the secondary beams become progressively more distant toward the end of the beam. + norm + (normal) indicates that the secondary beams are equidistant along the course of the beam. + + + + + + + + Records the placement of the beam relative to the events it affects. + + + + + + + Stem direction must be specified for all notes and chords under the + beam. + Opposing stem directions are required for a beam with @place="mixed". + + + + + Opposing stem directions are required for a beam with @place="mixed". + + + + + + Indicates presence of slash through the beam. + + + + + + + + Records the slope of the beam. + + + + + + + + + + + Presence of this attribute indicates that the secondary beam should be broken following this note/chord. The value of the attribute records the number of beams which should remain unbroken. + + + + + + + + + + + + + + + + + + + Indicates the performed duration represented by the beatRpt symbol; expressed in time signature denominator units. + + \d+(\.\d+)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether the tremolo is measured or unmeasured. + + meas + Measured tremolo. + unmeas + Unmeasured tremolo. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "Cut-out" style. + + cutout + The staff lines should not be drawn. + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether to render a repeat symbol or the source material to which it refers. A value of 'true' renders the source material, while 'false' displays the repeat symbol. + + + + + + + + + + + + + + + + + + Describes the style of the tremolo. + + meas + Measured tremolo. + unmeas + Unmeasured tremolo. + + + + + + + + + + + Indicates that this element participates in a glissando. If visual information about the glissando needs to be recorded, then a gliss element should be employed instead. + + + + + + + + + + + + + + + + + + Marks a note or chord as a "grace" (without a definite performed duration) and records from which other note/chord it should "steal" time. + + + + + + + + Records the amount of time to be "stolen" from a non-grace note/chord. + + + + + + + + + + + + + + + + + + + Records whether the grace note group is attached to the following event or to the preceding one. The usual name for the latter is "Nachschlag". + + pre + Attached to the preceding event. + post + Attached to the following event. + unknown + Attachment is ambiguous. + + + + + + + + + + + + + + + + + + Captures the visual rendition and function of the hairpin; that is, whether it indicates an increase or a decrease in volume. + + cres + Crescendo; i.e., louder. + dim + Diminuendo; i.e., softer. + + + + + + + Indicates that the hairpin starts from or ends in silence. Often rendered as a small circle attached to the closed end of the hairpin. See Gould, p. 108. + + + + + + + + + + + + + + + + + + + + + + + Indicates the pedal setting for the harp's C strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's D strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's E strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's F strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's G strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's A strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + Indicates the pedal setting for the harp's B strings. + + f + Flat. + n + Natural. + s + Sharp. + + + + + + + + + + + + + + + + + + + Indicates the attachment of an l.v. (laissez vibrer) sign to this element. + + + + + + + + + + + + + + Indicates the visual rendition of the left bar line. It is present here only for facilitation of translation from legacy encodings which use it. Usually, it can be safely ignored. + + + + + + + + Indicates the function of the right bar line and is structurally important. + + + + + + + + + + Function of the meter signature group. + + alternating + Meter signatures apply to alternating measures. + interchanging + Meter signatures are interchangeable, e.g. 3/4 and 6/8. + mixed + Meter signatures with different unit values are used to express a complex metrical pattern that is not expressible using traditional means, such as 2/4+1/8. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records a number or count accompanying a notational feature. + + + + + + + + + + + + States where the tuplet number will be placed in relation to the note heads. + + + + + + + + Determines if the tuplet number is visible. + + + + + + + + + + + + + + + + Indicates whether the octave displacement should be performed simultaneously with the written notes, i.e., "coll' ottava". Unlike other octave signs which are indicated by broken lines, coll' ottava typically uses an unbroken line or a series of longer broken lines, ending with a short vertical stroke. See Read, p. 47-48. + + coll + Coll' ottava (with the octave). + + + + + + + + + + + + + + + + + Records the position of the piano damper pedal. + + down + Depress the pedal. + up + Release the pedal. + half + Half pedal. + bounce + Release then immediately depress the pedal. + + + + + + + Indicates the function of the depressed pedal, but not necessarily the text associated with its use. Use the dir element for such text. +Suggested values include: 1] sustain; 2] soft; 3] sostenuto; 4] silent + + sustain + The sustain pedal, also referred to as the "damper" pedal, allows the piano strings to vibrate sympathetically with the struck strings. It is the right-most and the most frequently used pedal on modern pianos. + soft + The soft pedal, sometimes called the "una corda", "piano", or "half-blow" pedal, reduces the volume and modifies the timbre of the piano. On the modern piano, it is the left-most pedal. + sostenuto + The sostenuto or tone-sustaining pedal allows notes already undamped to continue to ring while other notes are damped normally; that is, on their release by the fingers. This is usually the center pedal of the modern piano. + silent + The silent or practice pedal mutes the volume of the piano so that one may practice quietly. It is sometimes a replacement for the sostenuto pedal, especially on an upright or vertical instrument. + + + + + + + + + + + + + + + + Determines whether piano pedal marks should be rendered as lines or as terms. + + line + Continuous line with start and end positions rendered by vertical bars and bounces shown by upward-pointing "blips". + pedstar + Pedal down and half pedal rendered with "Ped.", pedal up rendered by "*", pedal "bounce" rendered with "* Ped.". + altpedstar + Pedal up and down indications same as with "pedstar", but bounce is rendered with "Ped." only. + + + + + + + + + + + + + + + + + + + Describes the enclosing shape for rehearsal marks. + + box + Enclosed by box. + circle + Enclosed by circle. + none + No enclosing shape. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines whether to display guitar chord grids. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains an indication of which staff a note or chord that logically belongs to the current staff should be visually placed on; that is, the one above or the one below. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The performed duration of an individual note in a measured tremolo. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (arpeggiation) – Indicates that the notes of a chord are to be performed successively rather than simultaneously, usually from lowest to highest. Sometimes called a "roll". + + + + + + + + + + + + + An instruction to begin the next section or movement of a composition without pause. + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + A container for a series of explicitly beamed events that begins and ends entirely within a measure. + + + + + + + + + + + + A beam without a copyof attribute must have at least 2 note, rest, chord, or space + descendants. + + + + + + + + + + + + + + (beam span) – Alternative element for explicitly encoding beams, particularly those which extend across bar lines. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + (beat repeat) – An indication that material on a preceding beat should be repeated. + + + + + + + + + + + + + + + A variation in pitch (often micro-tonal) upwards or downwards during the course of a note. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + Marks a sequence of notational events grouped by a bracket. + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + Describes the function of the bracketed event sequence. +Suggested values include: 1] coloration; 2] cross-rhythm; 3] ligature + + coloration + Represents coloration in the mensural notation source material. + cross-rhythm + Marks a sequence which does not match the current meter. + ligature + Represents a ligature in the mensural notation source material. + + + + + + + + + (breath mark) – An indication of a point at which the performer on an instrument requiring breath (including the voice) may breathe. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (bowed tremolo) – A rapid alternation on a single pitch or chord. + + + + + + + + + + + + + + + + An indication placed over a note or rest to indicate that it should be held longer than its written value. May also occur over a bar line to indicate the end of a phrase or section. Sometimes called a 'hold' or 'pause'. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (fingered tremolo) – A rapid alternation between a pair of notes (or chords or perhaps between a note and a chord) that are (usually) farther apart than a major second. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (glissando) – A continuous or sliding movement from one pitch to another, usually indicated by a straight or wavy line. + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + A container for a sequence of grace notes. + + + + + + + + + + + + A graceGrp without a copyof attribute must have at least 2 note, rest, chord, or space + descendants. + + + + + The grace attribute is not allowed on + descendants of a graceGrp with a grace attribute. + + + + + + + + + + + + + + Indicates continuous dynamics expressed on the score as wedge-shaped graphics, e.g. < and >. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + (half-measure repeat) – A half-measure repeat in any meter. + + + + + + + + + + + + + (harp pedal) – Harp pedal diagram. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + A "tie-like" indication that a note should ring beyond its written duration. + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + The visual attributes of the lv element (@bezier, @bulge, @curvedir, + @lform, @lwidth, @ho, @startho, @endho, @to, @startto, @endto, @vo, @startvo, @endvo, + @x, @y, @x2, and @y2) will be overridden by visual attributes of the contained curve + elements. + + + + + + + + + + + + + + Unit of musical time consisting of a fixed number of note values of a given type, as determined by the prevailing meter, and delimited in musical notation by bar lines. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (meter signature) – Written meter signature. + + + + + + + + + + + + + (meter signature group) – Used to capture alternating, interchanging, and mixed meter signatures. + + + + + + meterSigGrp must have at least 2 child + meterSig elements. + + + + + + + + + + + + + + (measure number) – Designation, name, or label for a measure, often but not always consisting of digits. Use this element when the n attribute on measure does not adequately capture the appearance or placement of the measure number/label. + + + + + + + + + + + + + + + + + + + + (measure rest) – Complete measure rest in any meter. + + + + + + + + + + + + + (measure repeat) – An indication that the previous measure should be repeated. + + + + + + + + + + + + + (2-measure repeat) – An indication that the previous two measures should be repeated. + + + + + + + + + + + + + (measure space) – A measure containing only empty space in any meter. + + + + + + + + + + + + + (multiple rest) – Multiple measures of rest compressed into a single symbol, frequently found in performer parts. + + + + + + + + + + + + + (multiple repeat) – Multiple repeated measures. + + + + + + + + + + + + + An indication that a passage should be performed one or more octaves above or below its written pitch. + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + (ossia layer) – A layer that contains an alternative to material in another layer. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures original notation and a differently notated version *present in the source being transcribed*. + + + + + + + + + + + + + + + + + + + + + In a measure, ossia + may only contain staff and oStaff elements. + + + In a staff, ossia + may only contain layer and oLayer elements. + + + + + + + + + + + + + + (ossia staff) – A staff that holds an alternative passage which may be played instead of the original material. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Piano pedal mark. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (rehearsal mark) – In an orchestral score and its corresponding parts, a mark indicating a convenient point from which to resume rehearsal after a break. + + + + + + + + + + + + + + + + + + + + Indication of 1) a "unified melodic idea" or 2) performance technique. + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + The visual attributes of the slur (@bezier, @bulge, @curvedir, @lform, + @lwidth, @ho, @startho, @endho, @to, @startto, @endto, @vo, @startvo, @endvo, @x, @y, + @x2, and @y2) will be overridden by visual attributes of the contained curve + elements. + + + + + + + + + + + + + + An indication that two notes of the same pitch form a single note with their combined rhythmic values. + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + The visual attributes of the tie (@bezier, @bulge, @curvedir, @lform, + @lwidth, @ho, @startho, @endho, @to, @startto, @endto, @vo, @startvo, @endvo, @x, @y, + @x2, and @y2) will be overridden by visual attributes of the contained curve + elements. + + + + + + + + + + + + + + A group of notes with "irregular" (sometimes called "irrational") rhythmic values, for example, three notes in the time normally occupied by two or nine in the time of five. + + + + + + + + + + + + A tuplet without a copyof attribute must have at least 2 note, rest, or chord + descendants. + + + + + + + + + + + + + + (tuplet span) – Alternative element for encoding tuplets, especially useful for tuplets that extend across bar lines. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + + + + + + + + + + + + + + + + + + Records semantic meaning, i.e., intended performance, of the mordent. The altsym, glyph.name, or glyph.num attributes may be used to specify the appropriate symbol. + + lower + Starts with the written note, followed by its lower neighbor, with a return to the written note. In modern practice, this is called an "inverted mordent" and indicated by a short wavy line with a vertical line through it. + upper + Starts with the written note, followed by its upper neighbor, with a return to the principal note. In modern practice, the symbol lacks the vertical line used for the inverted form. + + + + + + + + When set to 'true', a double or long mordent, sometimes called a "pincé double", consisting of 5 notes, is indicated. + + + + + + + + + + + + Records the written accidental associated with an upper neighboring note. + + + + + + + + Records the written accidental associated with a lower neighboring note. + + + + + + + + + + + Indicates that this element has an attached ornament. If visual information about the ornament is needed, then one of the elements that represents an ornament (mordent, trill, or turn) should be employed. + + + + + + + + + + + + + + + + + + + + + + + + + + When set to 'true', the turn begins on the second half of the beat. + + + + + + + + Records meaning; i.e., intended performance, of the turn. The altsym, glyph.name, or glyph.num attributes may be used to specify the appropriate symbol. + + lower + Begins on the note below the written note. + upper + Begins on the note above the written note. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An ornament indicating rapid alternation of the main note with a secondary note, usually a step below, but sometimes a step above. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + Rapid alternation of a note with another (usually at the interval of a second above). + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + An ornament consisting of four notes — the upper neighbor of the written note, the written note, the lower neighbor, and the written note. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (MEI corpus) – A group of related MEI documents, consisting of a header for the group, and one or more mei elements, each with its own complete header. + + + + + + + + + + + + + + + + + + + Classifies the cause for the variant reading, according to any appropriate typology of possible origins. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (apparatus) – Contains one or more alternative encodings. + + + + + + + + + + + + + + (lemma) – Contains the lemma, or base text, of a textual variation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (reading) – Contains a single reading within a textual variation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (speech) – Contains an individual speech in a performance text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + Must not have any of the attributes: startid, endid, tstamp, tstamp2, tstamp.ges, + tstamp.real, startho, endho, to, startto, endto, staff, layer, place, or + plist. + + + + + + + + + + + + + + + (stage direction) – Contains any kind of stage direction within a dramatic text or fragment. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + Must not have any of the attributes: startid, endid, tstamp, tstamp2, tstamp.ges, + tstamp.real, startho, endho, to, startto, endto, staff, layer, place, or + plist. + + + + + + + + + + + + + + + + + + + Signifies the causative agent of damage, illegibility, or other loss of original text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds a short phrase describing the reason for missing textual material (gap), why material is supplied (supplied), or why transcription is difficult (unclear). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (abbreviation) – A generic element for 1) a shortened form of a word, including an acronym or 2) a shorthand notation. + + + + + + + + + + + + + + + + + + + + + + + + + + Records the expansion of a text abbreviation. + + + + + + + + + (addition) – Marks an addition to the text. + + + + + + + + + + + + + + + + + + + + + + + + + Location of the addition. + + + + + + + + + + + + + Groups a number of alternative encodings for the same point in a text. + + + + + + + + + + (correction) – Contains the correct form of an apparent erroneous passage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (copy/colla parte mark) – A verbal or graphical indication to copy musical material written elsewhere. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2 + + + + + + + + + + + + + + Contains an area of damage to the physical medium. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records the degree of damage. + + + + + + + + + (deletion) – Contains information deleted, marked as deleted, or otherwise indicated as superfluous or spurious in the copy text by an author, scribe, annotator, or corrector. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (expansion) – Contains the expansion of an abbreviation. + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures the abbreviated form of the text. + + + + + + + + + Indicates a point where material has been omitted in a transcription, whether as part of sampling practice or for editorial reasons described in the MEI header. + + + + + + + + + + + + Marks the beginning of a passage written in a new hand, or of a change in the scribe, writing style, ink or character of the document hand. + + + + + + + + Describes the character of the new hand. + + + + + + Identifies the new hand. The value must contain the ID of a hand element given elsewhere in the document. + + + + + + @new attribute should + have content. + The value in @new should correspond to the @xml:id attribute of a hand + element. + + + + + Identifies the old hand. The value must contain the ID of a hand element given elsewhere in the document. + + + + + + @old attribute should + have content. + The value in @old should correspond to the @xml:id attribute of a hand + element. + + + + + + + + A graphical or textual statement with additional / explanatory information about the musical text. The textual consequences of this intervention are encoded independently via other means; that is, with elements such as <add>, <del>, etc. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real + + + + + + + + + + + + + Describes the purpose of the metaMark. +Suggested values include: 1] confirmation; 2] addition; 3] deletion; 4] substitution; 5] clarification; 6] question; 7] investigation; 8] restoration; 9] navigation + + confirmation + confirmation of a previous textual decision; i.e., cancellation of a deleted passage in a different writing medium. + addition + denoted material is to be inserted in the musical text. + deletion + denoted material is no longer part of the musical text. + substitution + denoted material is replaced, either by the musical text pointed at with the @target attribute or the musical content of the metaMark element itself. + clarification + attempt to clarify a potentially illegible or otherwise unclear part of the musical text. + question + marks a section of the musical text which is to be considered further. + investigation + marks a section of the musical text as an investigation of the consequences of certain compositional decisions or potential alternatives. + restoration + declares a formerly cancelled part of the musical text as valid again. + navigation + clarification of the reading order of the musical text. + + + + + + + + + + (original) – Contains material which is marked as following the original, rather than being normalized or corrected. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (regularization) – Contains material which has been regularized or normalized in some sense. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates restoration of material to an earlier state by cancellation of an editorial or authorial marking or instruction. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a description of the means of restoration, 'stet' or 'strike-down', for example. + + + + + + + + + Contains apparently incorrect or inaccurate material. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (substitution) – Groups transcriptional elements when the combination is to be regarded as a single intervention in the text. + + + + + + + + + + + + + Contains material supplied by the transcriber or editor for any reason. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains material that cannot be transcribed with certainty because it is illegible or inaudible in the source. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A name or label associated with the controlled vocabulary from which the value of glyph.name or glyph.num is taken. +Suggested values include: 1] smufl + + smufl + Standard Music Font Layout. + + + + + + + + + Glyph name. + + + + + + + @glyph.name attribute + should have content. + + + + + + Numeric glyph reference in hexadecimal notation, e.g. "#xE000" or "U+E000". N.B. SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + + SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + The web-accessible location of the controlled vocabulary from which the value of glyph.name or glyph.num is taken. + + + + + + + + + + + Permits the current element to reference a facsimile surface or image zone which corresponds to it. + + + + + + + + + + + @facs attribute should + have content. + Each value in @facs should correspond to the @xml:id attribute of a surface or zone + element. + + + + + Contains a representation of a written source in the form of a set of images rather than as transcribed or encoded text. + + + + + + + + + + + + + + Defines a writing surface in terms of a rectangular coordinate space, optionally grouping one or more graphic representations of that space, and rectangular zones of interest within it. + + + + + + + + + + + + + + + + + + + + Defines an area of interest within a surface or graphic file. + + + + + + + + + + + + + + + + + + + + The number of columns spanned by this cell. + + + + + + + + The number of rows spanned by this cell. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (figure) – Groups elements representing or containing graphic information such as an illustration or figure. + + + + + + + + + + + + + + + + + + + (figure description) – Contains a brief prose description of the appearance or content of a graphic figure, for use when documenting an image without displaying it. + + + + + + + + + + + + + + + + + + + Indicates the location of an inline graphic. + + + + + + Graphic child of zone should not have + children. + + + + + Graphic should have either a + startid attribute or ulx and uly attributes. + + + + + Graphic should not have @ulx or @uly + attributes. + Graphic should not have @ho or @vo + attributes. + + + + + + + + + + + + + Indicates the upper-left corner x coordinate. + + + + + + Indicates the upper-left corner y coordinate. + + + + + + + + + Contains text displayed in tabular form. + + + + + + + + + + + + + + + + + + + (table data) – Designates a table cell that contains data as opposed to a cell that contains column or row heading information. + + + + + + + + + + + + + + + + + + + + (table header) – Designates a table cell containing column or row heading information as opposed to one containing data. + + + + + + + + + + + + + + + + + + + + (table row) – A formatting element that contains one or more cells (intersection of a row and a column) in a table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + alter + alternation of fingers. + combi + combination of fingers. + subst + substitution of fingers. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + finger – An individual finger in a fingering indication. + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + The stack element is not allowed as a + descendant of fing. + + + + + + + + + + + + + + (finger group)– A group of individual fingers in a fingering indication. + + + + + + + + + + At least 2 fing or fingGrp + elements are required. + + + + + When @tstamp or @startid is + present on fingGrp, its child elements cannot have a @tstamp or @startid + attribute. + + + When @tstamp or @startid is not present on fingGrp, each of its child elements must + have a @tstamp or @startid attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Intellectual or artistic realization of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gathers bibliographic expression entities. + + + + + + + + + + + + + Single instance or exemplar of a source/manifestation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gathers bibliographic item entities. + + + + + + + + + + + + + A bibliographic description of a physical embodiment of an expression of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Item children are not permitted when @singleton + equals "true". + + + + + + + + + + + + + + + + + + + + + + A container for the descriptions of physical embodiments of an expression of a work. + + + + + + + + + + + + + + + + + + The @instant attribute is syntactic sugar for classifying a scribal intervention as an ad-hoc modification; that is, one which does not interrupt the writing process. + + + unknown + + + + + + + + Points to the genetic state that results from this modification. + + + + + + + + + + + @state attribute should + have content. + The value in @state should correspond to the @xml:id attribute of a genState + element. + + + + + (genetic description) - Bundles information about the textual development of a work. + + + + + + + + + + + When set to "true" the child elements are known to be in chronological order. When set to "false" or when not provided, the order of child elements is unknown. + + + + + + + + + Describes a distinctive state in the textual development of a work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records the performed pitch inflection. + + + + + + + The value of @accid.ges should + not duplicate the value of @accid. + + + + + + + + + + + + + + + + + + + + + + + Records performed articulation that differs from the written value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records the amount of detuning. The decimal values should be rendered as a fraction (or an integer plus a fraction) along with the bend symbol. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the performance of the next musical division should begin immediately following this one. + + + + + + + + + + + + + + + + + + + + + + + Records performed duration information that differs from the written duration. + + + + + + + + Number of dots required for a gestural duration when different from that of the written duration. + + + + + + + + Duration as a count of units provided in the time signature denominator. + + \d+(\.\d+)? + + + + + + + + Duration recorded as pulses-per-quarter note, e.g. MIDI clicks or MusicXML divisions. + + + + + + + + Duration in seconds, e.g. '1.732'. + + \d+(\.\d+)? + + + + + + + + Duration as an optionally dotted Humdrum *recip value. + + \d+(\.)* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Records performed octave information that differs from the written value. + + + + + + + + Contains a performed pitch name that differs from the written value. + + + + + + + + Holds a pitch-to-number mapping, a base-40 or MIDI note number, for example. + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates an extreme, indefinite performed pitch. + + highest + Highest note the performer can play. + lowest + Lowest note the performer can play. + + + + + + + + Records performed octave information that differs from the written value. + + + + + + + + Contains a performed pitch name that differs from the written value. + + + + + + + + Holds a pitch-to-number mapping, a base-40 or MIDI note number, for example. + + + + + + + When the @extremis attribute is used, + the @pname.ges and @oct.ges attributes are not allowed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds the pitch name of a tuning reference pitch. + + + + + + + + Holds a value for cycles per second, i.e., Hertz, for a tuning reference pitch. + + + + + + + + Provides an indication of the tuning system, 'just', for example. + + + + + + + + + + + Indicates that the performance of the next section should begin immediately following this one. + + + + + + + + + + + + + + + + + + + The lateral or left-to-right plane. + + + + + + + + The above-to-below axis. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Encodes the onset time in terms of musical time, i.e., beats[.fractional beat part], as expressed in the written time signature. + + + + + + + + Records the onset time in terms of ISO time. + + + + + + + + + + + + Encodes the ending point of an event, i.e., a count of measures plus a beat location in the ending measure. + + + + + + + + Records the ending point of an event in terms of ISO time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a reference to a chordDef element elsewhere in the document. + + + + + + + @chordref attribute + should have content. + The value in @chordref should correspond to the @xml:id attribute of a chordDef + element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (chord definition) – Chord tablature definition. + + + + + + + + + + + + + + + + + An individual pitch in a chord defined by a chordDef element. + + + + + + + + + + + + Chord/tablature look-up table. + + + + + + + + + + (figure) – Single element of a figured bass indication. + + + + + + + + + + + + + + + + + + + + (figured bass) – Symbols added to a bass line that indicate harmony. Used to improvise a chordal accompaniment. Sometimes called Generalbass, thoroughbass, or basso continuo. + + + + + + + + + + + + + + + (harmony) – An indication of harmony, e.g., chord names, tablature grids, harmonic analysis, figured bass. + + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + + + + + + + A reference to a surface element positioned on the outer recto side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the inner verso side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the inner recto side of a (folded) sheet. + + + + + + + + A reference to a surface element positioned on the outer verso side of a (folded) sheet. + + + + + + + + + + + + A reference to a surface element positioned on the recto side of the sheet. + + + + + + + + A reference to a surface element positioned on the verso side of the sheet. + + + + + + + + + + + + + a + Language material. + c + Notated music. + d + Manuscript notated music. + e + Non-manuscript cartographic material. + f + Manuscript cartographic material. + g + Projected medium. + i + Nonmusical sound recording. + j + Musical sound recording. + k + Two-dimensional nonprojectable graphic. + m + Computer file. + o + Kit. + p + Mixed materials. + r + Three-dimensional artifact or naturally occurring object. + t + Manuscript language material. + + + + + + + + + + + Indicates the method employed to mark corrections and normalizations. + + silent + Corrections and normalizations made silently. + tags + Corrections and normalizations indicated using elements. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Container for intellectual or physical component parts of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + + Only child elements of the same name as the parent of the componentList are + allowed. + + + + + When any child + element has a comptype attribute, it is recommended that comptype appear on all child + elements. + + + + + + + + + (access restriction) – Describes the conditions that affect the accessibility of material. + + + + + + + + + + + Records information concerning the process by which an item was acquired by the holding institution. + + + + + + + + + + + (alternative identifier) – May contain a bibliographic identifier that does not fit within the meiHead element's id attribute, for example because the identifier does not fit the definition of an XML id or because multiple identifiers are needed. + + + + + + + + + + + + + + + (application information) – Groups information about applications which have acted upon the MEI file. + + + + + + + + + + + + + Provides information about an application which has acted upon the current document. + + + + + + + + + + + + + + + + Supplies a version number for an application, independent of its identifier or display name. + + + + + + + + + Documents the usage of a specific attribute of the element. + + + + + + @context attribute should + contain an XPath expression. + + + + + + Name of the attribute. + + + + + Circumstances in which the element appears, an XPath expression. + + + + + + + + + Defines the class of user for which the work is intended, as defined by age group (e.g., children, young adults, adults, etc.), educational level (e.g., primary, secondary, etc.), or other categorization. + + + + + + + + + + + Groups elements that describe the availability of and access to a bibliographic item, including an MEI-encoded document. + + + + + + + + + + Describes a folded sheet of paper. + + + + + + + + + + + + + + + + + + + + + + Contains the primary statement of responsibility given for a work on its title page. + + + + + + + + + + + + + + + + + (capture mode) – The means used to record notation, sound, or images in the production of a source/manifestation (e.g., analogue, acoustic, electric, digital, optical etc.). + + + + + + + + + + + (carrier form) – The specific class of material to which the physical carrier of the source/manifestation belongs (e.g., sound cassette, videodisc, microfilm cartridge, transparency, etc.). The carrier for a manifestation comprising multiple physical components may include more than one form (e.g., a filmstrip with an accompanying booklet, a separate sound disc carrying the sound track for a film, etc.). + + + + + + + + + + + Contains an individual descriptive category in a user-defined taxonomy, possibly nested within a superordinate category. + + + + + + + + + + + + + + + + + + To be addressable, the category element must + have an xml:id attribute. + + + + + + + + + + + + (category relationship) – Contains the name of a related category. + + + + + + + + + + + + + + + Provides a description of the relationship between the current and the target categories. + + broader + Category to which the current category is hierarchically subordinate. + narrower + Category which is hierarchically subordinate to the current category. + related + Category that is associatively but not hierarchically linked to the current category. + usefor + Non-preferred category; often a synonym or near-synonym for the preferred category label. + + + + + + + + Individual change within the revision description. + + + + + + + + + + The date of the change must be recorded in an + isodate attribute or date element. + It is recommended that the agent responsible for the change be recorded + in a resp attribute or in a name, corpName, or persName element in the respStmt + element. + + + + + + + + + + + (change description) – Description of a revision of the MEI file. + + + + + + + + + + + + Groups information which describes the nature or topic of an entity. + + + + + + + + + + + + + + Groups information which describes the nature or topic of an entity. + + + + + + + + + + + + + + + The physical condition of an item, particularly any variances between the physical make-up of the item and that of other copies of the same item (e.g., missing pages or plates, brittleness, faded images, etc.). + + + + + + + + + + Contains a single entry within a content description element. + + + + + + + + + + + + + + + + + List of the material contained within a resource. + + + + + + + + + + + + + + + + + When labels + are used, usually each content item has one. + + + + + + + + + + + The historical, social, intellectual, artistic, or other context within which the work was originally conceived (e.g., the 17th century restoration of the monarchy in England, the aesthetic movement of the late 19th century, etc.) or the historical, social, intellectual, artistic, or other context within which the expression was realized. + + + + + + + + + + + States how and under what circumstances corrections have been made in the text. + + + + + + + + + + + + + + Indicates the degree of correction applied to the text. + + high + The text has been thoroughly checked and proofread. + medium + The text has been checked at least once. + low + The text has not been checked. + unknown + The correction status of the text is unknown. + + + + + + + + + A cutout is a section of a document sheet that has been removed and is now missing. + + + + + + + + + + + + + + Describes the position of the cutout on the parent folium / bifolium. + + outer.recto + removed from outer recto side of bifolium. + inner.verso + removed from inner verso side of bifolium. + inner.recto + removed from inner recto side of bifolium. + outer.verso + removed from outer verso side of bifolium. + recto + removed from recto side of folium. + verso + removed from verso side of folium. + + + + + Describes the method of removing the cutout. +Suggested values include: 1] cut; 2] rip + + cut + section is cleanly cut by a knife, scissor or other sharp blade. + rip + section is ripped off the page, leaving a rough edge. + + + + + + + + + + Contains a dedicatory statement. + + + + + + + + + + + + + + + + + + + + + + + + + + (domains declaration) – Indicates which domains are included in the encoding. + + + + + + + + + + + + + + + + + + + + + (edition statement) – Container for meta-data pertaining to a particular edition of the material being described. + + + + + + + + + + + + + + + + + + + + + (editorial declaration) – Used to provide details of editorial principles and practices applied during the encoding of musical text. + + + + + + + + + + + + + + + + + + + + + + + + + + (encoding description) – Documents the relationship between an electronic file and the source or sources from which it was derived as well as applications used in the encoding/editing process. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (exhibition history) – A record of public exhibitions, including dates, venues, etc. + + + + + + + + + + (extended metadata) – Provides a container element for non-MEI metadata formats. + + + + + + + + + + + + + + + (file characteristics) – Standards or schemes used to encode the file (e.g., ASCII, SGML, etc.), physical characteristics of the file (e.g., recording density, parity, blocking, etc.), and other characteristics that have a bearing on how the file can be processed. + + + + + + + + + + (file description) – Contains a full bibliographic description of the MEI file. + + + + + + + + + + + + + + + + + + + + + + + + + Contains a string that uniquely identifies an item, such as those constructed by combining groups of characters transcribed from specified pages of a printed item or a file's checksum. + + + + + + + + + + Describes the order of folia and bifolia making up the text block of a manuscript or print. + + + + + + + + + + + + + + + + + + Describes a single leaf of paper. + + + + + + + + + + + + + Defines a distinct scribe or handwriting style. + + + + + + + + + + + + + + Marks this hand as the first one of the document. + + + + + + + + + Container for one or more hand elements. + + + + + + + + + + + + When labels are used, + usually each hand has one. + + + + + + + + + + Provides a container for information about the history of a resource other than the circumstances of its creation. + + + + + + + + + + + + + + The acquisition and provenance + elements are not permitted in the work or expression context. + + + + + + + + + + Incipit coded in a non-XML, plain text format, such as Plaine & Easie Code. + + + + incipCode must have a form or mimetype + attribute. + + + + + + + + + + Form of the encoded incipit. +Suggested values include: 1] plaineAndEasie; 2] humdrumKern; 3] parsons + + plaineAndEasie + Plaine & Easie Code. + humdrumKern + Humdrum Kern format. + parsons + Parsons code. + + + + + + + + + + Opening words of a musical composition. + + + + + + + + + + + + + + + + + + + + An inscription added to an item, such as a bookplate, a note designating the item as a gift, and/or the author's signature. + + + + + + + + + + Describes the scope of any analytic or interpretive information added to the transcription of the music. + + + + + + + + + + + + + Key captures information about tonal center and mode. + + + + + + + + Indicates major, minor, or other tonality. + + + + + + + + + Description of a language used in the document. + + + + + + + + + + + + + + + + (language usage) – Groups elements describing the languages, sub-languages, dialects, etc., represented within the encoded resource. + + + + + + + + + + + + + + + (MEI header) – Supplies the descriptive and declarative metadata prefixed to every MEI-conformant text. + + + + + + + + + + + + + + + + + + + + + + The meiHead type attribute can have the value 'music' + only when the document element is "mei". + + + + + The meiHead type attribute can have the value + 'corpus' only when the document element is "meiCorpus". + + + + + The meiHead type attribute can have the value + 'independent' only when the document element is "meiHead". + + + + + + + + + + + Specifies the kind of document to which the header is attached, for example whether it is a corpus or individual text. + + music + Header is attached to a music document. + corpus + Header is attached to a corpus. + independent + Header is independent; i.e., not attached to either a music or a corpus document. + + + + + + + + + Captures information about mensuration within bibliographic descriptions. + + + + + + + + + + + Captures information about the time signature within bibliographic descriptions. + + + + + + + + + + + Supplies the formal name of the namespace to which the elements documented by its children belong. + + + + + + + + + + + + + + + Formal namespace identifier; that is, a uniform resource identifier (URI). + + + + + Prefix associated with the formal identifier. + + + + + + + + + Indicates the extent of normalization or regularization of the original source carried out in converting it to electronic form. + + + + + + + + + + + + + + + + + (notes statement)– Collects any notes providing information about a text additional to that recorded in other parts of the bibliographic description. + + + + + + + + + + + + + + (other distinguishing characteristic) – Any characteristic that serves to differentiate a work or expression from another. + + + + + + + + + + Describes a physical writing surface attached to the original document. + + + + + + + The allowed positions of a patch depend on its parent element. + A patch element must contain either a folium + or a bifolium element. + + + + + + + + + Describes the position of the patch on the parent folium / bifolium. + + outer.recto + patch attached to outer recto side of bifolium. + inner.verso + patch attached to inner verso side of bifolium. + inner.recto + patch attached to inner recto side of bifolium. + outer.verso + patch attached to outer verso side of bifolium. + recto + patch attached to recto side of folium. + verso + patch attached to verso side of folium. + + + + + Describes the method of attachment of the patch. +Suggested values include: 1] glue; 2] thread; 3] needle; 4] tape; 5] staple + + glue + patch is glued on surface beneath. + thread + patch is sewn on surface beneath. + needle + patch is pinned to the surface beneath. + tape + patch is taped on surface beneath using an adhesive strip. + staple + patch is attached on surface beneath using a staple. + + + + + + + + + + (performance duration) – Used to express the duration of performance of printed or manuscript music or the playing time for a sound recording, videorecording, etc. + + + + + + + + Holds a W3C duration value, e.g., "PT2H34M45.67S". + + + + + + + + + (performance medium) – Indicates the number and character of the performing forces used in a musical composition. + + + + + + + + + + + + + + + + + + + + + (performance resource) – Name of an instrument on which a performer plays, a performer's voice range, or a standard performing ensemble designation. + + + + + + + + + + + + + + + Indicates the number of performers. + + + + + + Marks this instrument or vocal part as a soloist. Do not use this attribute for a solo instrument which is not accompanied. + + + + + + + + + Several instrumental or vocal resources treated as a group. + + + + + + + + + + + + + + + + + + Indicates the number of performers. + + + + + + + + + (physical description) – Container for information about the appearance, construction, or handling of physical materials, such as their dimension, quantity, color, style, and technique of creation. + + + + + + + + + + + + + + + + + (physical medium) – Records the physical materials used in the source, such as ink and paper. + + + + + + + + + + + (plate number) – Designation assigned to a resource by a music publisher, usually printed at the bottom of each page, and sometimes appearing also on the title page. + + + + + + + + + + + Playing speed for a sound recording is the speed at which the carrier must be operated to produce the sound intended (e.g., 33 1/3 rpm, 19 cm/s, etc.). + + + + + + + + + + The cost of access to a bibliographic item. + + + + + + + + + + + + + + + Numeric value capturing a cost. Can only be interpreted in combination with the currency attribute. + + [0-9]+\.[0-9]{2} + + + + + + Monetary unit. + + + + + + + + + (project description) – Project-level meta-data describing the aim or purpose for which the electronic file was encoded, funding agencies, etc. together with any other relevant information concerning the process by which it was assembled or collected. + + + + + + + + + + + + + + + + The record of ownership or custodianship of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (publication statement) – Container for information regarding the publication or distribution of a bibliographic item, including the publisher's name and address, the date of publication, and other relevant details. + + + + + + + + + + + + + + + + + + + (revision description) – Container for information about alterations that have been made to an MEI file. + + + + + + + + + + + + + + (sampling declaration) – Contains a prose description of the rationale and methods used in sampling texts in the creation of a corpus or collection. + + + + + + + + + + + + + + + + Describes the type of score used to represent a musical composition (e.g., short score, full score, condensed score, close score, etc.). + + + + + + + + + + + Describes the principles according to which the musical text has been segmented, for example into movements, sections, etc. + + + + + + + + + + + + + + + + (series statement) – Groups information about the series, if any, to which a publication belongs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (sound channels) – Reflects the number of apparent sound channels in the playback of a recording (monaural, stereophonic, quadraphonic, etc.). + + + + + + + + + + + + + Records the channel configuration in numeric form. + + + + + + + + + A bibliographic description of a source used in the creation of the electronic file. + + + + + + + + + + + + + + + @target attribute should + have content. + Each value in @target should correspond to the @xml:id attribute of a source or + manifestation element or be an external URI. + + + + + + + + + + + + + + + + (source description) – A container for the descriptions of the source(s) used in the creation of the electronic file. + + + + + + + + + + + + + (special reproduction characteristic) – The equalization system, noise reduction system, etc. used in making the recording (e.g., NAB, DBX, Dolby, etc.). + + + + + + + + + + + (standard values) – Specifies the format used when standardized date or number values are supplied. + + + + + + + + + + + + + + + + (system requirements) – System requirements for using the electronic item. + + + + + + + + + + (tagging declaration) – Provides detailed information about the tagging applied to a document. + + + + + + + + + + + + + + + + + Documents the usage of a specific element within the document. + + + + + + + + + @context attribute should + contain an XPath expression. + + + + + + Name of the element. + + + + + Circumstances in which the element appears, an XPath expression. + + + + + + Number of occurrences in the defined context. + + + + + + Number of occurrences in the defined context that have an xml:id attribute. + + + + + + + + + Defines a typology either implicitly, by means of a bibliographic citation, or explicitly by a structured taxonomy. + + + + + + + + + + + + + + + + + + + + + + + Collection of text phrases which describe a resource. + + + + + + + + + + + + When labels are used, + usually each term has one. + + + + + + + + + + + (title statement) – Container for title and responsibility meta-data. + + + + + + + + + + + + + + + + + (track configuration) – Number of physical/input tracks on a sound medium (e.g., eight track, twelve track). + + + + + + + + Records the track configuration in numeric form. + + + + + + + + + (treatment history) – A record of the treatment the item has undergone (e.g., de-acidification, restoration, etc.). + + + + + + + + + + (treatment scheduled) – Scheduled treatment, e.g. de-acidification, restoration, etc., for an item. + + + + + + + + + + (unpublished) – Used to explicitly indicate that a bibliographic resource is unpublished. + + + + + + + + + + (usage restrictions) – Container for information about the conditions that affect use of a bibliographic item after access has been granted. + + + + + + + + + + + Contains a description of a watermark or similar device. + + + + + + + + + + + Provides a detailed description of a work — a distinct intellectual or artistic creation — specifically its history, language use, and high-level musical attributes (e.g., key, tempo, meter, medium of performance, and intended duration). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (work list) – Grouping mechanism for information describing non-bibliographic aspects of a text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Recurring lyrics, especially at the end of each verse or stanza of a poem or song lyrics; a chorus. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Division of a poem or song lyrics, sometimes having a fixed length, meter or rhyme scheme; a stanza. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sung text for a specific iteration of a repeated section of music. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides an indication of the function of the ligature. + + + + + + + + + + + + + + + + Determines if a dot is to be added to the base symbol. + + + + + + + + The base symbol in the mensuration sign/time signature of mensural notation. + + + + + + + + Indicates the number lines added to the mensuration sign. For example, one slash is added for what we now call 'alla breve'. + + + + + + + + Together, proport.num and proport.numbase specify a proportional change as a ratio, e.g., 1:3. Proport.num is for the first value in the ratio. + + + + + + + + Together, proport.num and proport.numbase specify a proportional change as a ratio, e.g., 1:3. Proport.numbase is for the second value in the ratio. + + + + + + + + + + + + + + Describes the maxima-long relationship. + + + + + + + + Describes the long-breve relationship. + + + + + + + + Describes the semibreve-minim relationship. + + + + + + + + Describes the breve-semibreve relationship. + + + + + + + + + + + Indicates this element's participation in a ligature. + + recta + + obliqua + + + + + + + + + + + + + + + + + + + + + + + + States how many spaces are covered by the rest. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A mensural notation symbol that combines two or more notes into a single sign. + + + + + + + + + + + + + + + + + + + + + + (mensuration) – Collects information about the metrical relationship between a note value and the next smaller value; that is, either triple or duple. + + + + + + + + + + + + + (proportion) – Description of note duration as arithmetic ratio. + + + + + + + + + + + + + + + + + + + + Records a MIDI channel value. + + + + + + + + Specifies the 'on' part of the duty cycle as a percentage of a note's duration. + + + + + + + + Sets the MIDI port value. + + + + + + + + Sets the MIDI track. + + + + + + + + + + + + + + Provides a way of pointing to a MIDI instrument definition. It must contain the ID of an instrDef element elsewhere in the document. + + + + + + + @instr attribute + should have content. + The value in @instr should correspond to the @xml:id attribute of an instrDef + element. + + + + + + + + + + + + + + + + + + + + + + + + + + Captures the General MIDI instrument number. Use an integer for a 0-based value. An integer preceded by "in" indicates a 1-based value. + + + + + + + + Provides a General MIDI label for the MIDI instrument. + + + + + + + + Sets the instrument's position in a stereo field. MIDI values of 0 and 1 both pan left, 127 or 128 pans right, and 63 or 64 pans to the center. Positve percentage values pan to the right, negative ones to the left. 0% is centered. + + + + + + + + Records a non-General MIDI patch/instrument name. + + + + + + + + Records a non-General MIDI patch/instrument number. + + + + + + + + Sets the instrument's volume. + + + + + + Only one of @midi.instrname and @midi.instrnum + allowed. + + + + + Only one of @midi.patchname and @midi.patchnum + allowed. + + + + + + + + MIDI number in the range set by data.MIDIVALUE. + + + + + + + + + + + Captures the number of *quarter notes* per minute. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. + + + + + + + + Records the number of microseconds per *quarter note*. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. At 120 quarter notes per minute, each quarter note will last 500,000 microseconds. + + + + + + + + + + + MIDI number. + + + + + + + + + + + MIDI number. + + + + + + + + + + + MIDI Note-on/off velocity. + + + + + + + + + + + Indicates the number of pulses (sometimes referred to as ticks or divisions) per quarter note. Unlike MIDI, MEI permits different values for a score and individual staves. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (control change) – MIDI parameter/control change. + + + + + + + + + + + (channel) – MIDI channel assignment. + + + + + MIDI number in the range set by data.MIDICHANNEL. + + + + + + + + (channel pressure) – MIDI channel pressure/after touch. + + + + + + + + + + MIDI cue point. + + + + + + + + + + Arbitrary MIDI data in hexadecimal form. + + + + + + + + + (instrument definition) – MIDI instrument declaration. + + + + + + + + + + + + (instrument group) – Collects MIDI instrument definitions. + + + + + + + + + + MIDI marker meta-event. + + + + + + + + + + MIDI text meta-event. + + + + + + + + + + Container for elements that contain information useful when generating MIDI output. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MIDI note-off event. + + + + + + + + + + MIDI note-on event. + + + + + + + + + + MIDI port. + + + + + + + + + + (program) – MIDI program change. + + + + + + + + + + (sequence number) – MIDI sequence number. + + + + + Number in the range 0-65535. + + 65535 + + + + + + + + (track name) – MIDI track/sequence name. + + + + + + + + + + (velocity) – MIDI Note-on/off velocity. + + + + + + Indicates whether this is note-on or note-off velocity data. + + on + Note-on velocity. + off + Note-off velocity. + + + + + + + + + + + + + + constituent + A physical and logical part of entity. + boundwith + A physical, but not logical component of the entity, usually included as part of the binding process. + separated + A logical component of the entity physically held elsewhere. + + + + + + + + The comptype attribute may occur on + only when it is a descendant of a + componentList. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Holds a description of any additional material bound with an item, such as non-contemporaneous documents or fragments. + + + + + + + + + + (addition description) – Provides a description of significant additions found within an item, such as marginalia or other annotations. + + + + + + + + + + (binding) – Contains a description of one binding, i.e. type of covering, boards, etc. applied to an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + (binding description) – Describes the present and former bindings of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the system used to ensure correct ordering of the quires making up an item, typically by means of annotations at the foot of the page. + + + + + + + + + + Records a description of how the leaves or bifolia of an item are physically arranged. + + + + + + + + + + Contains a statement providing information regarding the date, place, agency, or reason for production of the item. + + + + + + + + + + + (decoration description) – Contains a description of the decoration of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (decoration note) – Contains a description of one or more decorative features of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the explicit of a manuscript item; that is, the closing words of the text proper, exclusive of any rubric or colophon which might follow it. + + + + + + + + + + + Describes the numbering system or systems used to count the leaves or pages in a codex. + + + + + + + + + + Contains a heraldic formula or phrase, typically found as part of a blazon, coat of arms, etc. + + + + + + + + + + + Describes how text is laid out on the page, including information about any ruling, pricking, or other evidence of page-preparation techniques. + + + + + + + Specifies the number of columns per page. + + + + + + + + + + + Specifies the number of ruled text lines per column. + + + + + + + + + + + Specifies the number of written text lines per column. + + + + + + + + + + + Specifies the number of ruled staves per column. + + + + + + + + + + + Specifies the number of written staves per column. + + + + + + + + + + + + + + (layout description) – Collects layout descriptions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines a location within a manuscript or manuscript component, usually as a (possibly discontinuous) sequence of folio references. + + + + + + + + + + + + + + Identifies the foliation scheme in terms of which the location is being specified by pointing to some foliation element defining it, or to some other equivalent resource. + + + + + + Specifies the starting point of the location in a normalized form. + + + + + + Specifies the end-point of the location in a normalized form. + + + + + + + + + (locus group) – Groups locations which together form a distinct but discontinuous item within a manuscript or manuscript part, according to a specific foliation. + + + + + + + + + Identifies the foliation scheme in terms of which the location is being specified by pointing to some foliation element defining it, or to some other equivalent resource. + + + + + + + + + Contains a string of words through which a manuscript signals the beginning or end of a text division, often with an assertion as to its author and title, which is in some way set off from the text itself, usually in red ink, or by use of different size or type of script, or some other such visual device. + + + + + + + + + + initial + Signals beginning of a text division. + final + Makrs the end of a text division. + + + + + + + + + (script description) – Contains a description of the letters or characters used in an autographic item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (script note) – Describes a particular script distinguished within the description of an autographic item. + + + + + + + + + + A single seal or similar attachment. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (seal description) – Describes the seals or similar external attachments applied to an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (second folio) – Marks the word or words taken from a fixed point in a codex (typically the beginning of the second leaf) in order to provide a unique identifier for the item. + + + + + + + + + + + Provides a description of the leaf or quire signatures found within a codex. + + + + + + + + + + Contains a word or phrase describing an official mark indicating ownership, genuineness, validity, etc. + + + + + + + + + + + + Provides a description of the physical support material of a written item. + + + + + + + + + + + + + + + + + + + + (support description) – Groups elements describing the physical support material of an item. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Short, project-defined name for the material composing the majority of the support. +Suggested values include: 1] paper; 2] parch; 3] mixed + + paper + Paper. + parch + Parchment. + mixed + Mixed materials. + + + + + + + + + + (type description) – Contains a description of the typefaces or other aspects of the printing of a printed source. + + + + + + + + + + + + + + + + + + + + + + + + + + + + (type note) – Describes a particular font or other significant typographic feature of a printed resource. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (additional name) – Contains an additional name component, such as a nickname, epithet, or alias, or any other descriptive phrase used within a personal name. + + + + + + + + + + + + + + + + + + + + Contains the name of a geopolitical unit consisting of two or more nation states or countries. + + + + + + + + + + + + + + + + + + + + (corporate name) – Identifies an organization or group of people that acts as a single entity. + + + + + + + + + + + + + + + + + + + + Contains the name of a geopolitical unit, such as a nation, country, colony, or commonwealth, larger than or administratively superior to a region and smaller than a bloc. + + + + + + + + + + + + + + + + + + + + Contains the name of any kind of subdivision of a settlement, such as a parish, ward, or other administrative or geographic unit. + + + + + + + + + + + + + + + + + + + + (family name) – Contains a family (inherited) name, as opposed to a given, baptismal, or nick name. + + + + + + + + + + + + + + + + + + + + + Contains a forename, given or baptismal name. + + + + + + + + + + + + + + + + + + + + (generational name component) – Contains a name component used to distinguish otherwise similar names on the basis of the relative ages or generations of the persons named. + + + + + + + + + + + + + + + + + + + + (geographical feature name) – Contains a common noun identifying a geographical feature. + + + + + + + + + + + + + + + + + + + + (geographic name) – The proper noun designation for a place, natural feature, or political jurisdiction. + + + + + + + + + + + + + + + + + + + + (name link) – Contains a connecting phrase or link used within a name but not regarded as part of it, such as "van der" or "of", "from", etc. + + + + + + + + + + + + + + + + + + + + (period name) – A label that describes a period of time, such as 'Baroque' or '3rd Style period'. + + + + + + + + + + + + + + + + + + + + (personal name) – Designation for an individual, including any or all of that individual's forenames, surnames, honorific titles, and added names. + + + + + + + + + + + + + + + + + + + + + (postal box or post office box) contains a number or other identifier for some postal delivery point other than a street address. + + + + + + + + + + + + + + + + (postal code) contains a numerical or alphanumeric code used as part of a postal address to simplify sorting or delivery of mail. + + + + + + + + + + + + + + + + Contains the name of an administrative unit such as a state, province, or county, larger than a settlement, but smaller than a country. + + + + + + + + + + + + + + + + + + + + (role name) – Contains a name component which indicates that the referent has a particular role or position in society, such as an official title or rank. + + + + + + + + + + + + + + + + + + + + Contains the name of a settlement such as a city, town, or village identified as a single geopolitical or administrative unit. + + + + + + + + + + + + + + + + + + + + full street address including any name or number identifying a building as well as the name of the street or route on which it is located. + + + + + + + + + + + + + + + + + (style name) – A label for a characteristic style of writing or performance, such as 'bebop' or 'rock-n-roll'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures written octave information. + + + 9 + + + unknown + + + + + + + + + Contains a written pitch name. + + [a-g]|unknown + + + + + + + + + + + + + + + + + + + + + + + + + + Connection to the previous component within the same neume; this attribute should not be used for the first component of a neume. + + g + Gapped; not connected. + l + Looped. + e + Extended. + + + + + + + + Records direction of curvature. + + a + Anti-clockwise curvature. + c + Clockwise curvature. + + + + + + + + Pen stroke has an extension; specific to Hispanic notation. + + + + + + + + Indicates participation in a ligature. + + + + + + + + Length of the pen stroke relative to the previous component within the same neume; this attribute should not be used for the first component of a neume. + + l + Longer. + s + Shorter. + + + + + + + + Direction of the initial direction for an s-shaped pen stroke; i.e., "w" for the standard letter S, "e" for its mirror image, "s" for the letter S turned 90-degrees anti-clockwise, and "n" for its mirror image. + + + + + + + + Direction of the pen stroke. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Episema. + + + + + + + + + + + + + Hispanic tick. + + + + + + + + + + + + + Liquescent. + + + + + + + + + + + + + Sign representing a single pitched event, although the exact pitch may not be known. + + + + + + + + + + + + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] apostropha; 2] bistropha; 3] climacus; 4] clivis; 5] oriscus; 6] pes; 7] pessubpunctis; 8] porrectus; 9] porrectusflexus; 10] pressusmaior; 11] pressusmaior; 12] pressusminor; 13] pressusminor; 14] punctum; 15] quilisma; 16] scandicus; 17] strophicus; 18] torculus; 19] torculusresupinus; 20] tristropha; 21] virga; 22] virgastrata + + + + apostropha + + bistropha + + climacus + + clivis + + oriscus + + pes + + pessubpunctis + + porrectus + + porrectusflexus + + pressusmaior + + pressusmaior + + pressusminor + + pressusminor + + punctum + + quilisma + + scandicus + + strophicus + + torculus + + torculusresupinus + + tristropha + + virga + + virgastrata + + + + + + + + + + + + + Collection of one or more neume components. + + + + + + + + + + + + + + + + + + + + + + Sign representing one or more musical pitches. + + + + + + + + + + + + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] apostropha; 2] bistropha; 3] climacus; 4] clivis; 5] oriscus; 6] pes; 7] pessubpunctis; 8] porrectus; 9] porrectusflexus; 10] pressusmaior; 11] pressusmaior; 12] pressusminor; 13] pressusminor; 14] punctum; 15] quilisma; 16] scandicus; 17] strophicus; 18] torculus; 19] torculusresupinus; 20] tristropha; 21] virga; 22] virgastrata + + + + apostropha + + bistropha + + climacus + + clivis + + oriscus + + pes + + pessubpunctis + + porrectus + + porrectusflexus + + pressusmaior + + pressusmaior + + pressusminor + + pressusminor + + punctum + + quilisma + + scandicus + + strophicus + + torculus + + torculusresupinus + + tristropha + + virga + + virgastrata + + + + + + + + + + + + + Oriscus. + + + + + + + + + + + + + Quilisma. + + + + + + + + + + + + + Significantive letter(s). + + + + + + + + + + + + + + + + + + + + + Strophicus. + + + + + + + + + + + + + Neume notation can be thought of as "neumed text". Therefore, the syllable element provides high-level organization in this repertoire. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates the point of occurrence of this feature along a time line. Its value must be the ID of a when element elsewhere in the document. + + + + + + + @when attribute should + have content. + A + value in @when should correspond to the @xml:id attribute of a when + element. + + + + + (audio/video file) – References an external digital audio or video file. + + + + + + An avFile child of clip cannot have + children. + + + + + + + + + + + + + + Defines a time segment of interest within a recording or within a digital audio or video file. + + + + + + + + + When @begin or @end + is used, @betype should appear on clip or one of its ancestors. + + + + + + + + + + + + + A presentation of one or more musical works. + + + + + + + + + + + A recorded performance. + + + + + + + + + + + + When @begin or @end is used, @betype should be + present. + + + + + + + + + + + + + Indicates a point in time either absolutely (using the absolute attribute), or relative to another when element (using the since, interval and inttype attributes). + + + + @since must be present when @interval is used. + The value in @since should correspond to the @xml:id attribute of a when + element. + + + + + When @interval contains an integer value, + @inttype cannot be 'time'. + + + + + When @interval contains a time value, @inttype must + be 'time'. + + + + + When @absolute is + present, @abstype should be present or @betype should be present on an + ancestor. + + + + + + + Provides an absolute value for the time point. + + + + + + Specifies the time interval between this time point and the one designated by the since attribute. This attribute can only be interpreted meaningfully in conjunction with the inttype attribute. + + + 1 + + + + + + + + Specifies the kind of values used in the absolute attribute. + + + + + + Specifies the kind of values used in the interval attribute. + + + + + + Identifies the reference point for determining the time of the current when element, which is obtained by adding the interval to the time of the reference point. The value should be the ID of another when element within the same parent element. If the since attribute is omitted and the absolute attribute is not specified, then the reference point is understood to be the immediately preceding when element. + + + + + + @since attribute + should have content. + The value in @since should correspond to the @xml:id attribute of a when + element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (pointer) – Defines a traversible pointer to another location, using only attributes to describe the destination. + + + + + + + + + + + + (reference) – Defines a traversible reference to another location. May contain text and sub-elements that describe the destination. + + + + + + + + + + + + + + + + + + + + + + + + Records the function of an accidental. + + caution + Cautionary accidental. + edit + Editorial accidental. + + + + + + + + + + + Captures a written accidental. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Encodes the written articulation(s). Articulations are normally encoded in order from the note head outward; that is, away from the stem. See additional notes at att.vis.note. Only articulations should be encoded in the artic attribute; for example, fingerings should be encoded using the fing element. + + + + + + + + + + + + + + + + + + Indicates the next section or movement to be performed. + + + + + + + @target attribute + should have content. + The value in @target should correspond to the @xml:id attribute of a section or + mdiv element. + + + + + + + + + The intended audience. + + private + Internal use only. + public + Available to all audiences. + + + + + + + + + + + Records the number of augmentation dots required by a written dotted duration. + + + + + + + An element with a dots attribute must also have a dur + attribute. + + + + + + + + + + + A name or label associated with a controlled vocabulary or other authoritative source for this element or its content. + + + + + + + + A web-accessible location of the controlled vocabulary or other authoritative source of identification or definition for this element or its content. This attribute may contain a complete URI or a partial URI which is completed by the value of the codedval attribute. + + + + + + + + + + + + Records the appearance and usually the function of the bar line. + + + + + + + + + + + + + States the length of barlines in virtual units. The value must be greater than 0 and is typically equal to 2 times (the number of staff lines - 1); e.g., a value of '8' for a 5-line staff. + + 0 + + + + + + + + Records the method of barring. + + + + + + + "mensur" not allowed in this + context. + + + + + + Denotes the staff location of bar lines, if the length is non-standard; that is, not equal to 2 times (the number of staff lines - 1). + + + + + + + + + + + + Provides a base URI reference with which applications can resolve relative URI references into absolute URI references. + + + + + + + + + + + Contains a reference to a field or element in another descriptive encoding system to which this MEI element is comparable. + + + + + + + + + + + + + + + + + + Indicates the calendar system to which a date belongs, for example, Gregorian, Julian, Roman, Mosaic, Revolutionary, Islamic, etc. + + + + + + + + + + + A value that represents or identifies other data. Often, it is a primary key in the database or a unique value in the coded list identified by the auth or auth.uri attributes. + + + + + + + + + + + + + + + + + + + + + + + + Contains one or more URIs which denote classification terms that apply to the entity bearing this attribute. + + + + + + + + + + + The value in @class must either correspond to the @xml:id attribute of a category + element or be an external URL. + + + + + + + + + + + + + Records the function of the clef. A "cautionary" clef does not change the following pitches. + + + + + + + + + + + + + + Encodes a value for the clef symbol. + + + + + + + + Contains a default value for the position of the clef. The value must be in the range between 1 and the number of lines on the staff. The numbering of lines starts with the lowest line of the staff. + + + + + + + + Records the amount of octave displacement to be applied to the clef. + + + + + + + + Records the direction of octave displacement to be applied to the clef. + + + + + + + An 'F', 'C', or 'G' clef requires that its position be + specified. + + + + + A TAB or percussion clef requires that the number of lines be + specified. + + + + + + + + + + + + Describes a clef's shape. + + + + + + + When @shape is present, @line must also be + specified. + + + + + + + + + Used to indicate visual appearance. Do not confuse this with the musical term 'color' as used in pre-CMN notation. + + + + + + + + + + + Indicates this feature is 'colored'; that is, it is a participant in a change in rhythmic values. In mensural notation, coloration is indicated by colored notes (red, black, etc.) where void notes would otherwise occur. In CMN, coloration is indicated by an inverse color; that is, the note head is void when it would otherwise be filled and vice versa. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates the upper-left corner x coordinate. + + + + + + + + Indicates the upper-left corner y coordinate. + + + + + + + + Indicates the lower-right corner x coordinate. + + + + + + + + Indicates the lower-left corner x coordinate. + + + + + + + + + + + + + + + + + + + + + + + + Records the placement of Bezier control points as a series of pairs of space-separated values; e.g., 19 45 -32 118. + + + + + + + + + + + + + Describes a curve as one or more pairs of values with respect to an imaginary line connecting the starting and ending points of the curve. The first value captures a distance to the left (positive value) or right (negative value) of the line, expressed in virtual units. The second value of each pair represents a point along the line, expressed as a percentage of the line's length. N.B. An MEI virtual unit (VU) is half the distance between adjacent staff lines. + + + + + + + + + + + + + Describes a curve with a generic term indicating the direction of curvature. + + above + Upward curve. + below + Downward curve. + mixed + A "meandering" curve, both above and below the items it pertains to. + + + + + + + + + + + + Describes the line style of a curve. + + + + + + + + Width of a curved line. + + + + + + + + + + + + Encodes the target note when its pitch differs from the pitch at which the custos appears. + + + + + + + @target attribute + should have content. + The value in @target should correspond to the @xml:id attribute of a note + element. + + + + + + + + + + + + + Contains the end point of a date range in standard ISO form. + + + + + + + + Provides the value of a textual date in standard ISO form. + + + + + + + + Contains an upper boundary for an uncertain date in standard ISO form. + + + + + + + + Contains a lower boundary, in standard ISO form, for an uncertain date. + + + + + + + + Contains the starting point of a date range in standard ISO form. + + + + + + + + + + + Used to link metadata elements to one or more data-containing elements. + + + + + + + + + + + @data attribute should + have content. + The value in @data should correspond to the @xml:id attribute of a descendant of + the music element. + + + + + + + + + + + + Identifies one or more metadata elements (other than classification terms) within the header, which are understood to apply to the element bearing this attribute and its content. + + + + + + + + + + + @decls attribute + should have content. + Each value in @decls should correspond to the @xml:id attribute of an element + within the metadata header. + No value in @decls should correspond to the @xml:id attribute of a classification + term. Use @class for this purpose. + + + + + + + + + + + + + + + + + + + + + Records the default distance from the staff for dynamic marks. + + + + + + + + Records the default distance from the staff of harmonic indications, such as guitar chord grids or functional labels. + + + + + + + + Determines how far from the staff to render text elements. + + + + + + + + + + + + Records the function of the dot. + + aug + Augmentation dot. + div + Dot of division. + + + + + + + + + + + When a duration cannot be represented as a single power-of-two value, multiple space-separated values that add up to the total duration may be used. + + + + + + + + + + + + + + + + + Contains a default duration in those situations when the first note, rest, chord, etc. in a measure does not have a duration specified. + + + + + + + + Along with numbase.default, describes the default duration as a ratio. num.default is the first value in the ratio. + + + + + + + + Along with num.default, describes the default duration as a ratio. numbase.default is the second value in the ratio. + + + + + + + + + + + Records the duration of a feature using the relative durational values provided by the data.DURATION datatype. + + + + + + + + + + + + Along with numbase, describes duration as a ratio. num is the first value in the ratio, while numbase is the second. + + + + + + + + Along with num, describes duration as a ratio. num is the first value in the ratio, while numbase is the second. + + + + + + + + + + + + + + + + + Records the characters often used to mark accidentals, articulations, and sometimes notes as having a cautionary or editorial function. For an example of cautionary accidentals enclosed in parentheses, see Read, p. 131, ex. 9-14. + + + + + + + + + + + + + + Describes where ending marks should be displayed. + + top + Ending rendered only above top staff. + barred + Ending rendered above staves that have bar lines drawn across them. + grouped + Endings rendered above staff groups. + + + + + + + + + + + + + + + + + + + Signifies the degree of certainty or precision associated with a feature. + + + + + + + + Indicates the nature of the evidence supporting the reliability or accuracy of the intervention or interpretation. +Suggested values include: 1] internal; 2] external; 3] conjecture + + internal + There is evidence within the document to support the intervention. + external + There is evidence outside the document to support the intervention. + conjecture + The assertion has been made by the editor, cataloguer, or scholar on the basis of their expertise. + + + + + + + + + + + + + Indicates the presence of an extension symbol, typically a line. + + + + + + + + + + + + + Captures a measurement, count, or description. When extent contains a numeric value, use the unit attribute to indicate the measurement unit. + + + + + + + The @unit attribute is + recommended. + + + + + Separation into value (@extent) and unit + (@unit) is recommended. + + + + + + + + + Indicates the attachment of a fermata to this element. If visual information about the fermata needs to be recorded, then a fermata element should be employed instead. + + + + + + + + + + + Holds the number of initial characters (such as those constituting an article or preposition) that should not be used for sorting a title or name. + + + + + + + + + + + + + Indicates the nesting level of staff grouping symbols. + + + + + + + + + + + Signifies the hand responsible for an action. The value must be the ID of a hand element declared in the header. + + + + + + + @hand attribute should + have content. + Each value in @hand should correspond to the @xml:id attribute of a hand + element. + + + + + + + + + Measurement of the vertical dimension of an entity. + + + + + + + + + + + Records horizontal alignment. + + + + + + + + + + + Regularizes the naming of an element and thus facilitates building links between it and other resources. Each id attribute within a document must have a unique value. + + + + + + + + + + + Specifies the applicable MIME (multimedia internet mail extension) type. The value should be a valid MIME media type defined by the Internet Engineering Task Force in RFC 2046. + + + + + + + + + + + Used for linking visually separate entities that form a single logical entity, for example, multiple slurs broken across a system break that form a single musical phrase. Also used to indicate a measure which metrically completes the current one. Record the identifiers of the separately encoded components, excluding the one carrying the attribute. + + + + + + + + + + + @join attribute should + have content. + Each + value in @join should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + Written key signature. + + + + + + + + + + + + + + + Written key signature. + + + + + + + + + + + + + + + Captures text to be used to generate a label for the element to which it's attached, a "tool tip" or prefatory text, for example. Should not be used to record document content. + + + + + + + + + + + + Identifies the language of the element's content. The values for this attribute are language 'tags' as defined in BCP 47. All language tags that make use of private use sub-tags must be documented in a corresponding language element in the MEI header whose id attribute is the same as the language tag's value. + + + + + + + + Specifies the transliteration technique used. + + + + + + + + + + + + Provides a mechanism for linking the layer to a layerDef element. + + + + + + + @def attribute should + have content. + The value in @def should correspond to the @xml:id attribute of a layerDef + element. + + + + + + + + + + + + + + + Identifies the layer to which a feature applies. + + + + + + + + + + + + + + + Indicates the line upon which a feature stands. The value must be in the range between 1 and the number of lines on the staff. The numbering of lines starts with the lowest line of the staff. + + + + + + + + + + + + + + + Symbol rendered at end of line. + + + + + + + + Holds the relative size of the line-end symbol. + + + + + + + + Symbol rendered at start of line. + + + + + + + + Holds the relative size of the line-start symbol. + + + + + + + + + + + + + Describes the line style of a line. + + + + + + + + Describes the number of segments into which a dashed or dotted line may be divided, or the number of "peaks" of a wavy line; a pair of space-separated values (minimum and maximum, respectively) provides a range between which a rendering system-supplied value may fall, while a single value indicates a fixed amount of space; that is, the minimum and maximum values are equal. + + + 2 + + + + 2 + + + + + + + + + @lform attribute + matching "dashed", "dotted", or "wavy" required. + + + + + + Width of a line. + + + + + + + + + + + + + + + + + + Points to an element of which the current element is a copy. + + + + + + + An + element with a copyof attribute can only have comment or processing instruction + descendents. + + + + + @copyof attribute + should have content. + The + value in @copyof should correspond to the @xml:id attribute of an + element. + + + + + + Used to point to other elements that correspond to this one in a generic fashion. + + + + + + + + + + + @corresp attribute + should have content. + Each + value in @corresp should correspond to the @xml:id attribute of an + element. + + + + + + points to one or more events in a user-defined collection that are known to be predecessors of the current element. + + + + + + + + + + + @follows attribute + should have content. + Each + value in @follows must correspond to the @xml:id attribute of an + element. + + + + + + Used to point to the next event(s) in a user-defined collection. + + + + + + + + + + + @next attribute should + have content. + Each + value in @next should correspond to the @xml:id attribute of an + element. + + + + + + Points to one or more events in a user-defined collection that are known to be successors of the current element. + + + + + + + + + + + @precedes attribute + should have content. + Each + value in @precedes must correspond to the @xml:id attribute of an + element. + + + + + + Points to the previous event(s) in a user-defined collection. + + + + + + + + + + + @prev attribute should + have content. + Each + value in @prev should correspond to the @xml:id attribute of an + element. + + + + + + Points to an element that is the same as the current element but is not a literal copy of the current element. + + + + + + + + + + + @sameas attribute + should have content. + Each + value in @sameas should correspond to the @xml:id attribute of an + element. + + + + + + Points to elements that are synchronous with the current element. + + + + + + + + + + + @synch attribute + should have content. + Each + value in @synch should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + + Describes the alignment of lyric syllables associated with a note or chord. + + + + + + + + Sets the font family default value for lyrics. + + + + + + + + Sets the font name default value for lyrics. + + + + + + + + Sets the default font size value for lyrics. + + + + + + + + Sets the default font style value for lyrics. + + + + + + + + Sets the default font weight value for lyrics. + + + + + + + + + + + Indicates the unit of measurement. +Suggested values include: 1] byte; 2] char; 3] cm; 4] deg; 5] in; 6] issue; 7] ft; 8] m; 9] mm; 10] page; 11] pc; 12] pt; 13] px; 14] rad; 15] record; 16] vol; 17] vu + + byte + Byte. + char + Character. + cm + Centimeter. + deg + Degree. + in + Inch. + issue + Serial issue. + ft + Foot. + m + Meter. + mm + Millimeter. + page + Page. + pc + Pica. + pt + Point. + px + Pixel. + rad + Radian. + record + Record. + vol + Serial volume. + vu + MEI virtual unit. + + + + + + + + + + + + Indicates whether measure numbers should be displayed. + + + + + + + + + + + + + Specifies a point where the relevant content begins. A numerical value must be less and a time value must be earlier than that given by the end attribute. + + + + + + + + Specifies a point where the relevant content ends. If not specified, the end of the content is assumed to be the end point. A numerical value must be greater and a time value must be later than that given by the begin attribute. + + + + + + + + Type of values used in the begin/end attributes. The begin and end attributes can only be interpreted meaningfully in conjunction with this attribute. + + + + + + + + + + + Describes the writing medium. + + + + + + + + + + + Specifies a generic MEI version label. + + 4.0.0 + First release of MEI 4 + 4.0.1 + Bugfix Release 4.0.1 + + + + + + + + + + + + + + + Specifies whether a dot is to be added to the base symbol. + + + + + + + + The base symbol in the mensuration sign/time signature of mensural notation. + + + + + + + + + + + Indicates the relationship between the content of a staff or layer and the prevailing meter. + + c + Complete; i.e., conformant with the prevailing meter. + i + Incomplete; i.e., not enough beats. + o + Overfull; i.e., too many beats. + + + + + + + + + + + + Indicates the relationship between the content of a measure and the prevailing meter. + + + + + + + + Indicates whether or not a bar line is "controlling"; that is, if it indicates a point of alignment across all the parts. Bar lines within a score are usually controlling; that is, they "line up". Bar lines within parts may or may not be controlling. When applied to measure, this attribute indicates the nature of the right barline but not the left. + + + + + + + + + + + + + Captures the number of beats in a measure, that is, the top number of the meter signature. It must contain a decimal number or an additive expression that evaluates to a decimal number, such as 2+3. + + \d+(\.\d+)?(\s*\+\s*\d+(\.\d+)?)* + + + + + + + + Indicates the use of a meter symbol instead of a numeric meter signature, that is, 'C' for common time or 'C' with a slash for cut time. + + + + + + + + Contains the number indicating the beat unit, that is, the bottom number of the meter signature. + + + + + + + + + + + + + Captures the number of beats in a measure, that is, the top number of the meter signature. It must contain a decimal number or an additive expression that evaluates to a decimal number, such as 2+3. + + \d+(\.\d+)?(\s*\+\s*\d+(\.\d+)?)* + + + + + + + + Contains the number indicating the beat unit, that is, the bottom number of the meter signature. + + + + + + + + Indicates the use of a meter symbol instead of a numeric meter signature, that is, 'C' for common time or 'C' with a slash for cut time. + + + + + + + + + + + + + Used to describe tempo in terms of beats (often the meter signature denominator) per minute, ala M.M. (Maezel's Metronome). Do not confuse this attribute with midi.bpm or midi.mspb. In MIDI, a beat is always defined as a quarter note, *not the numerator of the time signature or the metronomic indication*. + + + + + + + + Captures the metronomic unit. + + + + + + + + Records the number of augmentation dots required by a dotted metronome unit. + + + + + + + + + + + Indicates whether programmatically calculated counts of multiple measures of rest (mRest) and whole measure repeats (mRpt) in parts should be rendered. + + + + + + + + + + + + + + + Used to record a pointer to the regularized form of the name elsewhere in the document. + + + + + + + @nymref attribute + should have content. + The + value in @nymref should correspond to the @xml:id attribute of an + element. + + + + + + Used to specify further information about the entity referenced by this name, for example, the occupation of a person or the status of a place. + + + + + + + + + + + Provides a numeric designation that indicates an element's position in a sequence of similar elements. Its value must be a non-negative integer. + + + + + + + + + + + Provides a number-like designation that indicates an element's position in a sequence of similar elements. May not contain space characters. + + + + + + + + + + + + Sets the default music font name. + + + + + + + + Sets the default music font size. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a way of pointing to a user-defined symbol. It must contain a reference to an ID of a symbolDef element elsewhere in the document. + + + + + + + @head.altsym attribute + should have content. + The value in @head.altsym should correspond to the @xml:id attribute of a symbolDef + element. + + + + + + A name or label associated with the controlled vocabulary from which a numerical value of head.shape is taken. +Suggested values include: 1] smufl + + smufl + Standard Music Font Layout. + + + + + + + + When + @head.auth matches 'smufl', @head.shape must contain a numeric glyph reference in + hexadecimal notation, e.g. "#xE000" or "U+E000". + + + + + + Captures the overall color of a notehead. + + + + + + + + Describes how/if the notehead is filled. + + + + + + + + Captures the fill color of a notehead if different from the overall note color. + + + + + + + + Records any additional symbols applied to the notehead. + + + + + + + + + + + + Describes rotation applied to the basic notehead shape. A positive value rotates the notehead in a counter-clockwise fashion, while negative values produce clockwise rotation. + + + + + + + + Used to override the head shape normally used for the given duration. + + + + + + + SMuFL version 1.18 uses the range U+E000 - U+ECBF. + + + + + + Indicates if a feature should be rendered when the notation is presented graphically or sounded when it is presented in an aural form. + + + + + + + + + + + Captures written octave information. + + + + + + + + + + + Contains a default octave specification for use when the first note, rest, chord, etc. in a measure does not have an octave value specified. + + + + + + + + + + + + Records the amount of octave displacement. + + + + + + + + Records the direction of octave displacement. + + + + + + + + + + + Determines the placement of notes on a 1-line staff. A value of 'true' places all notes on the line, while a value of 'false' places stems-up notes above the line and stems-down notes below the line. + + + + + + + + + + + Indicates whether staves without notes, rests, etc. should be displayed. When the value is 'true', empty staves are displayed. + + + + + + + + + + + identifies the layer on which referenced notation occurs. + + + + + + + + + + + + + + + signifies the staff on which referenced notation occurs. Defaults to the same value as the local staff. Mandatory when applicable. + + + + + + + + + + + + + + + + indicates the first element in a sequence of events. + + + + + + + + indicates the final element in a sequence of events. + + + + + + + + + + + + encodes the starting point of musical material in terms of musical time, i.e., a (potentially negative) count of measures plus a beat location. + + + + + + + + encodes the ending point of musical material in terms of musical time, i.e., a count of measures plus a beat location. The values are relative to the measure identified by origin.tstamp. + + + + + + + When @origin.tstamp2 is used @origin.tstamp must + also be present. + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the height of the page; may be expressed in real-world units or staff steps. + + + + + + + + Describes the width of the page; may be expressed in real-world units or staff steps. + + + + + + + + Indicates the amount of whitespace at the top of a page. + + + + + + + + Indicates the amount of whitespace at the bottom of a page. + + + + + + + + Indicates the amount of whitespace at the left side of a page. + + + + + + + + Indicates the amount of whitespace at the right side of a page. + + + + + + + + Indicates the number of logical pages to be rendered on a single physical page. + + + + + + + + Indicates how the page should be scaled when rendered. + + + + + + + + + + + + + + + Indicates the part in which the current feature should appear. Use '%all' when the feature should occur in every part. + + + + (%all|#[\i][\c]+) + + + + + + + + + '%all' cannot be mixed with other + values. + + + + + + Signifies the part staff on which a notated feature occurs. Use '%all' when the feature should occur on every staff. + + + + (%all|\d+(-\d+)?) + + + + + + + + + '%all' cannot be mixed with other + values. + + + + + + + + + + + + + + + + + + + + + Contains a written pitch name. + + + + + + + + + + + + + + + Captures the placement of the item with respect to the staff with which it is associated. + + + + + + + + + + + When the target attribute is present, plist identifies the active participants; that is, those entities pointed "from", in a relationship with the specified target(s). When the target attribute is not present, it identifies participants in a mutual relationship. + + + + + + + + + + + @plist attribute + should have content. + Each + value in @plist should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + Defines whether a link occurs automatically or must be requested by the user. + + onLoad + Load the target resource(s) immediately. + onRequest + Load the target resource(s) upon user request. + none + Do not permit loading of the target resource(s). + other + Behavior other than allowed by the other values of this attribute. + + + + + + + + Characterization of the relationship between resources. The value of the role attribute must be a URI. + + + + + + + + Defines how a remote resource is rendered. + + new + Open in a new window. + replace + Load the referenced resource in the same window. + embed + Embed the referenced resource at the point of the link. + none + Do not permit traversal to the referenced resource. + other + Behavior other than permitted by the other values of this attribute. + + + + + + + + Identifies passive participants in a relationship; that is, the entities pointed "to". + + + + + + + + + + + + Characterization of target resource(s) using any convenient classification scheme or typology. + + + + + + + + + + + + + Numeric value capturing a measurement or count. Can only be interpreted in combination with the unit attribute. + + 0 + + + + + + + + + + + + + + + Gives a minimum estimated value for an approximate measurement. + + + + + + + + Gives a maximum estimated value for an approximate measurement. + + + + + + + + Where the measurement summarizes more than one observation or a range of values, supplies the minimum value observed. + + + + + + + + Where the measurement summarizes more than one observation or a range of values, supplies the maximum value observed. + + + + + + + + Specifies the degree of statistical confidence (between zero and one) that a value falls within the range specified by min and max, or the proportion of observed values that fall within that range. + + + + + + + The attributes @min and @max are required when + @confidence is present. + + + + + + + + + Indicates the agent(s) responsible for some aspect of the text's transcription, editing, or encoding. Its value must point to one or more identifiers declared in the document header. + + + + + + + + + + + @resp attribute should + have content. + The value in @resp should correspond to the @xml:id attribute of an element within + the metadata header. + + + + + + + + + + + + + + + + + + + Scale factor to be applied to the feature to make it the desired display size. + + + + + + + + + + + + + + + + + + + + + + + + + + + Used to assign a sequence number related to the order in which the encoded features carrying this attribute are believed to have occurred. + + + + + + + + + + + Indicates the number of slashes present. + + + + + + + + + + + Indicates that this element participates in a slur. If visual information about the slur needs to be recorded, then a slur element should be employed. + + + + + + + + + + + + + + + Contains a list of one or more pointers indicating the sources which attest to a given reading. Each value should correspond to the ID of a source or manifestationelement located in the document header. + + + + + + + + + + + @source attribute + should have content. + Each value in @source should correspond to the @xml:id attribute of a source or + manifestation element. + + + + + + + + + + + + + + + + + Describes a note's spacing relative to its time value. + + + + + + + + Describes the note spacing of output. + + + + + + + + Specifies the minimum amount of space between adjacent staves in the same system; measured from the bottom line of the staff above to the top line of the staff below. + + + + + + + + Describes the space between adjacent systems; a pair of space-separated values (minimum and maximum, respectively) provides a range between which a rendering system-supplied value may fall, while a single value indicates a fixed amount of space; that is, the minimum and maximum values are equal. + + + + + + + + + + + + + + + + + Provides a mechanism for linking the staff to a staffDef element. + + + + + + + @def attribute should + have content. + The value in @def should correspond to the @xml:id attribute of a staffDef + element. + + + + + + + + + + + + + + + + + + Indicates the number of staff lines. + + + + + + + + + + + Specifies the symbol used to group a set of staves. + + brace + Curved symbol, i.e., {. + bracket + Square symbol, i.e., [, but with curved/angled top and bottom segments. + bracketsq + Square symbol, i.e., [, with horizontal top and bottom segments. + line + Line symbol, i.e., |, (wide) line without top and bottom curved/horizontal segments. + none + Grouping symbol missing. + + + + + + + + + + + + + + Signifies the staff on which a notated event occurs or to which a control event applies. Mandatory when applicable. + + + + + + + + + + + + + + + + + Describes vertical order of items printed above a staff, from closest to farthest away from the staff. + + + + + + + + + + + + Describes vertical order of items printed below a staff, from closest to farthest away from the staff. + + + + + + + + + + + + Describes vertical order of items printed between staves, from top to bottom. + + + + + + + + + + + + + + + Holds the staff location of the feature. + + + + + + + + + + + + Captures staff location in terms of written pitch name. + + + + + + + + Records staff location in terms of written octave. + + + + + + + + + + + + Indicates the final element in a sequence of events to which the feature applies. + + + + + + + @endid attribute + should have content. + The + value in @endid should correspond to the @xml:id attribute of an + element. + + + + + + + + + Holds a reference to the first element in a sequence of events to which the feature applies. + + + + + + + @startid attribute + should have content. + The + value in @startid should correspond to the @xml:id attribute of an + element. + + + + + + + + + + + + + + + + Describes the direction of a stem. + + + + + + + + Encodes the stem length. + + + + + + + + Encodes any stem "modifiers"; that is, symbols rendered on the stem, such as tremolo or Sprechstimme indicators. + + + + + + + + Records the position of the stem in relation to the note head(s). + + + + + + + + Determines whether a stem should be displayed. + + + + + + + + Records the output x coordinate of the stem's attachment point. + + + + + + + + Records the output y coordinate of the stem's attachment point. + + + + + + + + + + + + Describes the symbols typically used to indicate breaks between syllables and their functions. + + s + Space (word separator). + d + Dash (syllable separator). + u + Underscore (syllable extension). + t + Tilde (syllable elision). + c + Circumflex [angled line above] (syllable elision). + v + Caron [angled line below] (syllable elision). + i + Inverted breve [curved line above] (syllable elision). + b + Breve [curved line below] (syllable elision). + + + + + + + + Records the position of a syllable within a word. + + i + (initial) first syllable. + m + (medial) neither first nor last syllable. + t + (terminal) last syllable. + + + + + + + + + + + Holds an associated sung text syllable. + + + + + + + + + + + + + + + + + Indicates whether the staves are joined at the left by a continuous line. The default value is "true". Do not confuse this with the heavy vertical line used as a grouping symbol. + + + + + + + + Describes the amount of whitespace at the left system margin relative to page.leftmar. + + + + + + + + Describes the amount of whitespace at the right system margin relative to page.rightmar. + + + + + + + + Describes the distance from page's top edge to the first system; used for first page only. + + + + + + + + + + + Specifies the intended meaning when a participant in a relationship is itself a pointer. + + all + If an element pointed to is itself a pointer, then the target of that pointer will be taken, and so on, until an element is found which is not a pointer. + one + If an element pointed to is itself a pointer, then its target (whether a pointer or not) is taken as the target of this pointer. + none + No further evaluation of targets is carried out beyond that needed to find the element(s) specified in plist or target attribute. + + + + + + + + + + + + + + Records the function of a tempo indication. + + continuous + Marks a gradual change of tempo, such as "accel." or "rit." + instantaneous + Represents a static tempo instruction, such as a textual term like "Adagio", a metronome marking like "♩=70", or a combination of text and metronome indication. + metricmod + Captures a change in pulse rate (tempo) and/or pulse grouping (subdivision) in an "equation" of the form [tempo before change] = [tempo after change]. + precedente + Indicates a change in pulse rate (tempo) and/or pulse grouping (subdivision) in an "equation" of the form [tempo after change] = [tempo before change]. The term "precedente" often appears following the "equation" to distinguish this kind of historical usage from the modern metric modulation form. + + + + + + + + + + + + Used to extend the values of the rend attribute. + + + + + + + + + + + + Captures the appearance of the element's contents using MEI-defined descriptors. + + + + + + + + + + + + + + + + + + + Provides a default value for the font family name of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font name of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font size of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font style of text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + Provides a default value for the font weight for text (other than lyrics) when this information is not provided on the individual elements. + + + + + + + + + + + Indicates that this element participates in a tie. If visual information about the tie needs to be recorded, then a tie element should be employed. + + + + + + + + + + + + + + + Encodes the onset time in terms of musical time, i.e., beats[.fractional beat part], as expressed in the written time signature. + + + + + + + + + + + Encodes the ending point of an event, i.e., a count of measures plus a beat location in the ending measure. + + + + + + + + + + + + Records the amount of diatonic pitch shift, e.g., C to C♯ = 0, C to D♭ = 1, necessary to calculate the sounded pitch from the written one. + + + + + + + + Records the amount of pitch shift in semitones, e.g., C to C♯ = 1, C to D♭ = 1, necessary to calculate the sounded pitch from the written one. + + + + + + + + + + + Indicates that this feature participates in a tuplet. If visual information about the tuplet needs to be recorded, then a tuplet element should be employed. + + + + + + + + + + + + + + + + Designation which characterizes the element in some sense, using any convenient classification scheme or typology that employs single-token labels. + + + + + + + + + + + + + + + + + + + Contains the name of a font-family. + + + + + + + + Holds the name of a font. + + + + + + + + Indicates the size of a font expressed in printers' points, i.e., 1/72nd of an inch, relative terms, e.g., "small", "larger", etc., or percentage values relative to "normal" size, e.g., "125%". + + + + + + + + Records the style of a font, i.e, italic, oblique, or normal. + + + + + + + + Used to indicate bold type. + + + + + + + + + + + Records vertical alignment. + + + + + + + + + + + Provides a label for members of a vertically aligned group. + + + + + + + + + + + Indicates if a feature should be rendered when the notation is presented graphically or sounded when it is presented in an aural form. + + + + + + + + + + + + + + + + Records a horizontal adjustment to a feature's programmatically-determined location in terms of staff interline distance; that is, in units of 1/2 the distance between adjacent staff lines. + + + + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined location in terms of musical time; that is, beats. + + + + + + + + + + + Records the vertical adjustment of a feature's programmatically-determined location in terms of staff interline distance; that is, in units of 1/2 the distance between adjacent staff lines. + + + + + + + + + + + + + + + + + Records the horizontal adjustment of a feature's programmatically-determined start point. + + + + + + + + Records the horizontal adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined start point. + + + + + + + + Records a timestamp adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + + Records a vertical adjustment of a feature's programmatically-determined start point. + + + + + + + + Records a vertical adjustment of a feature's programmatically-determined end point. + + + + + + + + + + + Specifies the symbol used to group lyrics. + + brace + Curved symbol, i.e., {. + bracket + Square symbol, i.e., [, but with curved/angled top and bottom segments. + bracketsq + Square symbol, i.e., [, with horizontal top and bottom segments. + line + Line symbol, i.e., |, (wide) line without top and bottom curved/horizontal segments. + none + Grouping symbol missing. + + + + + + + + + + + Allows one to signal to an application whether an element's white space is "significant". The behavior of xml:space cascades to all descendant elements, but it can be turned off locally by setting the xml:space attribute to the value "default". + + default + Allows the application to handle white space as necessary. Not including an xml:space attribute produces the same result as using the default value. + preserve + Instructs the application to maintain white space "as-is", suggesting that it might have meaning. + + + + + + + + + + + Measurement of the horizontal dimension of an entity. + + + + + + + + + + + + Encodes an x coordinate for a feature in an output coordinate system. When it is necessary to record the placement of a feature in a facsimile image, use the facs attribute. + + + + + + + + Encodes a y coordinate for a feature in an output coordinate system. When it is necessary to record the placement of a feature in a facsimile image, use the facs attribute. + + + + + + + + + + + + Encodes the optional 2nd x coordinate. + + + + + + + + Encodes the optional 2nd y coordinate. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (accidental) – Records a temporary alteration to the pitch of a note. + + + + + + + + + + + + + Name of an actor appearing within a cast list. + + + + + + + + + + + + + + + Contains a postal address, for example of a publisher, an organization, or an individual. + + + + + + + + + + + + + + + + + (address line) – Single line of a postal address. + + + + + + + + + + + + + + + + + Range of a voice, instrument or piece. + + + + + + + + + + + + + + + Highest or lowest pitch in a score, staff, or layer. + + + + + + + + + + + + + (analytic level) – Contains bibliographic elements describing an item (e.g. an article or poem) published within a monograph or journal and not as an independent publication. + + + + + + + + + + + + + + + + + + + + + + + + + + (annotation) – Provides a statement explaining the text or indicating the basis for an assertion. + + + + + + + + + + + + + + + + + + + + + The @data attribute may only occur on an + annotation within the notesStmt element. + + + + + + + + + + + + + + + + + + + + + A person or organization who transcribes a musical composition, usually for a different medium from that of the original; in an arrangement the musical substance remains essentially unchanged. + + + + + + + + + + + + + + + + + (articulation) – An indication of how to play a note or chord. + + + + + + + + + + + + + The name of the creator of the intellectual content of a non-musical, literary work. + + + + + + + + + + + + + + + + + Vertical line drawn through one or more staves that divides musical notation into metrical units. + + + + + + The value of @taktplace must be less than or equal to two times the number of staff + lines. + + + + + + + + + + + + + + + + (bibliographic reference) – Provides a loosely-structured bibliographic citation in which the sub-components may or may not be explicitly marked. + + + + + + + + + + + + + + + + + + + List of bibliographic references. + + + + + + + + + + + + + + + + + When labels are used, + usually each bibliographic item has one. + + + + + + + + + + + + (scope of citation) – Defines the scope of a bibliographic reference, for example as a list of page numbers, or a named subdivision of a larger work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (structured bibliographic citation) – Contains a bibliographic citation in which bibliographic sub-elements must appear in a specified order. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the whole of a single musical text, excluding any front or back matter. + + + + + + + + + + + + + + Break, pause, or interruption in the normal tempo of a composition. Typically indicated by "railroad tracks", i.e., two diagonal slashes. + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + A label which accompanies an illustration or a table. + + + + + + + + + + + + + + + + + (cast group) – Groups one or more individual castItem elements within a cast list. + + + + + + + + + + + + + + + + Contains a single entry within a cast list, describing either a single role or a list of non-speaking roles. + + + + + + + + + + + + + + + + + + + Contains a single cast list or dramatis personae. + + + + + + + + + + + + + + + + + + + (column beginning) – An empty formatting element that forces text to begin in a new column. + + + + + + + + + + Records the column number. + + + + + + Column beginning must be preceded by a + colLayout element. + The value of @n should be less than or equal + to the value of @cols () of the preceding + colLayout element. + + + + + + + + A simultaneous sounding of two or more notes in the same layer *with the same duration*. + + + + + + + + + + + + + + + + + + + + + + Indication of the exact location of a particular note on the staff and, therefore, the other notes as well. + + + + + The clef position must be less than or equal to the number of lines of an ancestor + staff. + + + + + + The clef position must be less than or equal to the number of lines of a preceding + staff. + + + + + + + + + + + + + + + (clef group) – A set of simultaneously-occurring clefs. + + + + + + + + + + + + + + + + (column layout) – An empty formatting element that signals the start of columnar layout. + + + + + Records the number of columns. + + + + + + + + The name of the creator of the intellectual content of a musical work. + + + + + + + + + + + + + + + + + Names of individuals, institutions, or organizations responsible for contributions to the intellectual content of a work, where the specialized elements for authors, editors, etc. do not suffice or do not apply. + + + + + + + + + The value of @role must not contain the name of another element available in this + context. + + + + + + + + + + Used to specify the contributor's function. + + + + + + + + + Non-bibliographic details of the creation of an intellectual entity, in narrative form, such as the date, place, and circumstances of its composition. More detailed information may be captured within the history element. + + + + + + + + + + + + + + + + + + + + + Symbol placed at the end of a line of music to indicate the first note of the next line. Sometimes called a "direct". + + + + + + + + + + + + + + A string identifying a point in time or the time period between two such points. + + + + + + + + + + + + + + + + + + + Entity to whom a creative work is formally offered. + + + + + + + + + The dedicatee element may not be + recursively nested. + + + + + + + + + + + + Description of a measurement taken through a three-dimensional object. + + + + + + + + + + + + + + + + (description) – Container for text that briefly describes the feature to which it is attached, including its intended usage, purpose, or application as appropriate. + + + + + + + + + + + + + + + + + + (dimension) – Any single dimensional specification. + + + + + + + + + + + + Aspect of the object being measured. +Suggested values include: 1] alt; 2] angle; 3] circum; 4] depth; 5] diameter; 6] elevation; 7] height; 8] length; 9] radius; 10] relief; 11] width + + alt + Altitude. Refers to the distance above a given level, commonly mean sea level. + angle + Angle. Amount of rotation needed to bring one line or plane into coincidence with another. + circum + Circumference of a circular area. + depth + Dimension taken through an object or body of material, usually downward from an upper surface, horizontally inward from an outer surface, or from top to bottom of something regarded as one of several layers. + diameter + Length of a straight line passing through the center of a circle or sphere and meeting the circumference or surface at each end. + elevation + Distance to which something has been raised or uplifted above a level, e.g. a hill's elevation above the surrounding country. + height + Denotes extent upward (as from foot to head) as well as any measurable distance above a given level. + length + Measure of the greatest dimension of a plane or solid figure. + radius + Half the diameter of a circular, spherical, or cylindrical object. + relief + Projection of a figure or part from the plane on which it is formed. + width + Extent from side to side; breadth. + + + + + + + + + Information about the physical size of an entity; usually includes numerical data. + + + + The depth element may only appear + once. + The height element may only appear + once. + The width element may only appear + once. + + + + + + + + + + + + + (directive) – An instruction expressed as a combination of text and symbols — such as segno and coda symbols, fermatas over a bar line, etc., typically above, below, or between staves, but not on the staff — that is not encoded elsewhere in more specific elements, like tempo or dynam. + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + Person or agency, other than a publisher, from which access (including electronic access) to a bibliographic entity may be obtained. + + + + + + + + + + + + + + + + (division) – Major structural division of text, such as a preface, chapter or section. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Characterizes the textual division in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] abstract; 2] ack; 3] appendix; 4] bibliography; 5] colophon; 6] contents; 7] dedication; 8] frontispiece; 9] glossary; 10] half-title; 11] index; 12] annotations; 13] preface + + abstract + A summary of the content of a text as continuous prose. + ack + A formal declaration of acknowledgment by the author in which persons and institutions are thanked for their part in the creation of a text. + appendix + An ancillary self-contained section of a work, often providing additional but in some sense extra-canonical text. + bibliography + A list of bibliographic citations. + colophon + A statement appearing at the end of a book describing the conditions of its physical production. + contents + A table of contents, specifying the structure of a work and listing its constituents. The list element should be used to mark its structure. + dedication + A formal offering or dedication of a text to one or more persons or institutions by the author. + frontispiece + A pictorial frontispiece, possibly including some text. + glossary + A list of terms associated with definition texts (‘glosses’). + half-title + A page containing only the title of a book — as opposed to the title page, which also lists subtitle, author, imprint and similar data. + index + Any form of index to the work. + annotations + A section in which annotations on the text are gathered together. + preface + A foreword or preface addressed to the reader in which the author or publisher explains the content, purpose, or origin of the text. + + + + + + + + + + Dot of augmentation or division. + + + + + + + + + + + + + (dynamic) – Indication of the volume of a note, phrase, or section of music. + + + + + + + + + + + Must have one of + the attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + When @val2 is present, either + @dur, @dur.ges, @endid, or @tstamp2 must also be present. + + + + + + + + + + + + + + + (edition designation) – A word or text phrase that indicates a difference in either content or form between the item being described and a related item previously issued by the same publisher/distributor (e.g. 2nd edition, version 2.0, etc.), or simultaneously issued by either the same publisher/distributor or another publisher/distributor (e.g. large print edition, British edition, etc.). + + + + + + + + + + + + + + + + + + The name of the individual(s), institution(s) or organization(s) acting in an editorial capacity. + + + + + + + + + + + + + + + + + Alternative ending for a repeated passage of music; i.e., prima volta, seconda volta, etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a free-text event description. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains historical information given as a sequence of significant past events. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates how a section may be programmatically expanded into its 'through-composed' form. + + + + + + + + + + + Used to express size in terms other than physical dimensions, such as number of pages, records, bytes, physical components, etc. + + + + + + + + + + + + + + + + + Names of individuals, institutions, or organizations responsible for funding. Funders provide financial support for a project; they are distinct from sponsors, who provide intellectual support and authority. + + + + + + + + + + + + + + + + + Term or terms that designate a category characterizing a particular style, form, or content. + + + + + + + + + + + + + + + + + Contains a composite musical text, grouping together a sequence of distinct musical texts (or groups of such musical texts) which are regarded as a unit for some purpose, for example, the collected works of a composer. + + + + + + + + + + + + + + + + + + (group symbol) – A brace or bracket used to group two or more staves of a score or part. + + + + + + In scoreDef, grpSym must have startid, + endid, and level attributes. + + + + + In staffGrp, grpSym must not have + startid, endid, or level attributes. + + + + + + + + + + + + + + (heading) – Contains any heading, for example, the title of a section of text, or the heading of a list. + + + + + + + + + + + + + + + + + + Description of the vertical size of an object. + + + + + + + + + + + + + + + + An alpha-numeric string that establishes the identity of the described material. + + + + + + + + + + + + + + + + + + Information relating to the publication or distribution of a bibliographic item. + + + + + + + + + + + + + + + + + + (incipit) – The opening music and/or words of a musical or textual work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (key accidental) – Accidental in a key signature. + + + + One of the following is required: @x and + @y attribute pair, @pname attribute, or @loc attribute. + + + + + + + + + + + Specifies whether enharmonic (written) values or implicit ("perform-able") values are allowed. + + implicit + Only performed values (sharp, flat, natural) allowed. + explicit + All enharmonic (written) values allowed. + + + + + + + + + (key signature) – Written key signature. + + + + + + + + + If the @oct attribute + appears on any keyAccid element, it must be provided on all keyAccid + elements. + + + + + Only keyAccid elements are allowed + here. + + + + + + + + + + + + + + A container for document text that identifies the feature to which it is attached. For a "tool tip" or other generated label, use the label attribute. + + + + + + + + + + + + + + + + + + A label on the pages following the first. + + + + + + + + + + + + + + + + + + An independent stream of events on a staff. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (layer definition) – Container for layer meta-information. + + + + + + + + + + + + + + + + + + + + + + + + + + (line beginning) – An empty formatting element that forces text to begin on a new line. + + + + + + + + + + (line group) – May be used for any section of text that is organized as a group of lines; however, it is most often used for a group of verse lines functioning as a formal unit, e.g. a stanza, refrain, verse paragraph, etc. + + + + + + + + + + + + + + + + + + + + + + + + + + + Person or organization who is a writer of the text of an opera, oratorio, etc. + + + + + + + + + + + + + + + + + Person or organization who is a writer of the text of a song. + + + + + + + + + + + + + + + + + (musical division) – Contains a subdivision of the body of a musical text. + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a single MEI-conformant document, consisting of an MEI header and a musical text, either in isolation or as part of an meiCorpus element. + + + + + The values in @staff must correspond to @n attribute of a staffDef + element. + + + + + + + + + + + (monograph level) – Contains bibliographic elements describing an item, for example, a published book or journal, score, recording, or an unpublished manuscript. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a single musical text of any kind, whether unitary or composite, for example, an etude, opera, song cycle, symphony, or anthology of piano solos. + + + + + + + + + + + + + Proper noun or noun phrase. + + + + + + + + + + + Recommended practice is to use name elements to capture sub-parts of a generic + name. + + + + + + + + + + + + + + + + Characterizes the name in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] person; 2] corporation; 3] location; 4] process; 5] style; 6] time + + person + A personal name. + corporation + Name of a corporate body. + location + Name of a location. + process + Name of a process or software application. + style + Name of a musical style; i.e., form, genre, technique, etc. + time + Name of a period of time. + + + + + + + + + + A single pitched event. + + + + + + + + + + + + + + + + + + + + + + (number) – Numeric information in any form. + + + + + + + + + + + + + + + + Numeric value capturing a measurement or count. Can only be interpreted in combination with the unit attribute. + + + + + + + + + An element indicating an ornament that is not a mordent, turn, or trill. + + + + + + + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + (paragraph) – One or more text phrases that form a logical prose passage. + + + + + + + + + + + + + + + + + (padding) – An indication of extra visual space between notational elements. + + + + + + + + + + + + An alternative visual rendition of the score from the point of view of a particular performer (or group of performers). + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a container for performers' parts. + + + + + + + + + + + + + + + (page beginning) – An empty formatting element that forces text to begin on a new page. + + + + + + + + + + + + + + + (page description) – Contains a brief prose description of the appearance or description of the content of a physical page. + + + + + + + + + + + + + + + + + (page footer) – A running footer on the first page. Also, used to temporarily override a running footer on individual pages. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page footer. + + + + + + + + + (page footer 2) – A running footer on the pages following the first. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page footer. Use multiple values to capture an alternating pattern. + + + + + + + + + + + + + (page header) – A running header on the first page. Also, used to temporarily override a running header on individual pages. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page header. + + + + + + + + + (page header 2) – A running header on the pages following the first. + + + + + + + + + + + + + + + + + Records horizontal alignment of the page header. Use multiple values to capture an alternating pattern. + + + + + + + + + + + + + Indication of 1) a "unified melodic idea" or 2) performance technique. + + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + Must have one of the attributes: + dur, dur.ges, endid, or tstamp2. + + + + + The visual attributes of the phrase (@bezier, @bulge, @curvedir, @lform, + @lwidth, @ho, @startho, @endho, @to, @startto, @endto, @vo, @startvo, @endvo, @x, @y, + @x2, and @y2) will be overridden by visual attributes of the contained curve + elements. + + + + + + + + + + + + + + (physical location) – Groups information about the current physical location of a bibliographic item, such as the repository in which it is located and its shelf mark(s), and its previous locations. + + + + + + + + + + + + + + + + + + + + + + + Name of the organization responsible for the publication of a bibliographic item. + + + + + + + + + + + + + + + + (publication place) – Name of the place where a bibliographic item was published. + + + + + + + + + + + + + + + + The name of the individual(s), institution(s) or organization(s) receiving correspondence. + + + + + + + + + + + + + + + + (related item) – Contains or references another bibliographic item which is related to the present one. + + + + + + + + + + + Describes the relationship between the entity identified by the relatedItem element and the resource described in the parent element, i.e., bibl, source or relatedItem. + + + + + + + + Describes a relationship or linkage amongst entities. + + + + Within work, expression, source, or item, the value of the rel attribute must match one + of the following: hasAbridgement, isAbridgementOf, hasAdaptation, isAdaptationOf, + hasAlternate, isAlternateOf, hasArrangement, isArrangementOf, hasComplement, + isComplementOf, hasEmbodiment, isEmbodimentOf, hasExemplar, isExemplarOf, hasImitation, + isImitationOf, hasPart, isPartOf, hasRealization, isRealizationOf, hasReconfiguration, + isReconfigurationOf, hasReproduction, isReproductionOf, hasRevision, isRevisionOf, + hasSuccessor, isSuccessorOf, hasSummarization, isSummarizationOf, hasSupplement, + isSupplementOf, hasTransformation, isTransformationOf, hasTranslation, + isTranslationOf + Within work, expression, source or item, the target attribute + must be present. + + + + + + + + + + + + Describes the relationship between the entities identified by the plist and target attributes. + + + + + + + + Gathers relation elements. + + + + + + + + + + + + + (render) – A formatting element indicating special visual rendering, e.g., bold or italicized, of a text word or phrase. + + + + + + + + + + + + + + + + + + + A positive value for rotation rotates the text in a counter-clockwise fashion, while negative values produce clockwise rotation. + + + + + + + + + Institution, agency, or individual which holds a bibliographic item. + + + + + + + + + + + + + + + + + (responsibility) – A phrase describing the nature of intellectual responsibility. + + + + + + + + + + + + + + + + + + (responsibility statement) – Transcription of text that names one or more individuals, groups, or in rare cases, mechanical processes, responsible for creation, realization, production, funding, or distribution of the intellectual or artistic content. + + + + + + + + + + + + + At least one element pair (a resp element and a name-like element) is + recommended. Alternatively, each name-like element may have a @role + attribute. + + + + + + + + + + + A non-sounding event found in the source being transcribed. + + + + + + + + + + + + The value of @line must be less than or equal to the number of lines on the + staff. + + + + + + + + + + + + + + Name of a dramatic role, as given in a cast list. + + + + + + + + + + + + + + + (role description) – Describes a character's role in a drama. + + + + + + + + + + + + + + + (system beginning) – An empty formatting element that forces musical notation to begin on a new line. + + + + + + + + + + + + + + + + Full score view of the musical content. + + + + + + + + + + + + + + + + + + + + + + + + + + + (score definition) – Container for score meta-information. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Segment of music data. + + + + + + + + + + + + + + + + + + + A + section containing an expansion element must have descendant section, ending, or rdg + elements. + + + + + + + + + + + + + + + + + Contains information about the serial publication in which a bibliographic item has appeared. + + + + + + + + + + + + + + + + + + + + + + + A placeholder used to fill an incomplete measure, layer, etc. most often so that the combined duration of the events equals the number of beats in the measure. + + + + + + + + + + + + + Contains a specialized form of heading or label, giving the name of one or more speakers in a dramatic text or fragment. + + + + + + + + + + + + + + + + + Names of sponsoring individuals, organizations or institutions. Sponsors give their intellectual authority to a project; they are to be distinguished from funders, who provide the funding but do not necessarily take intellectual responsibility. + + + + + + + + + + + + + + + + + (stacked text) – An inline table with a single column. + + + + + + + + + + + + Indicates the delimiter used to mark the portions of text that are to be stacked. + + + + + + Specifies how the stacked text components should be aligned. + + left + Left justified. + right + Right justified. + center + Centered. + rightdigit + Aligned on right-most digit. + + + + + + + + + A group of equidistant horizontal lines on which notes are placed in order to represent pitch or a grouping element for individual 'strands' of notes, rests, etc. that may or may not actually be rendered on staff lines; that is, both diastematic and non-diastematic signs. + + + + + + + + + + + + + + + + + There must be a preceding staffDef with a matching value of @n, a preceding staff with + a matching @n value containing a staffDef, or a staffDef child element. + + + + + + + + + + + + + + + + + + + + (staff definition) – Container for staff meta-information. + + + + + + + + + + + + + + + + + StaffDef must have an n attribute. + Either + @lines must be present or a preceding staffDef with the same value for @n and @lines + must exist. + Only one clef or clefGrp is + permitted. + + + + + + @n must have the same value as the + current staff. + + + + + + Either + @lines must be present or a preceding staffDef with matching @n value and @lines must + exist. + + + + + The clef position must be less + than or equal to the number of lines on the staff. + + + + + + + The clef position must be + less than or equal to the number of lines on the staff. + + + + + + The tab.strings attribute must have the same + number of values as there are staff lines. + + + + + + + The + tab.strings attribute must have the same number of values as there are staff + lines. + + + + + + The lines.color attribute + must have either 1) a single value or 2) the same number of values as there are staff + lines. + + + + + The lines.color attribute must have either 1) a single value or 2) the same number of + values as there are staff lines. + + + + + + + The value of ppq must be a factor of + the value of ppq on an ancestor scoreDef. + + + + + + + The value of ppq must be a factor of + the value of ppq on a preceding scoreDef. + + + + + + + + + + + + + + + + + + + (staff group) – A group of bracketed or braced staves. + + + + + + + + + + + + + + + + + + + + + + + Each staffDef must have a unique value + for the n attribute. + + + + + + + + + + + + + + + (syllable) – Individual lyric syllable. + + + + + + + + + + + + + + + + + + + + + A reference to a previously defined symbol. + + + + In the symbolDef context, symbol must have + either a startid attribute or x and y attributes. + In the symbolDef context, symbol + must have one of the following attributes: altsym, glyph.name, or + glyph.num. + + + + + + + + + + + + + + Text and symbols descriptive of tempo, mood, or style, e.g., "allarg.", "a tempo", "cantabile", "Moderato", "♩=60", "Moderato ♩ =60"). + + + + + + + + + + + + Only analog, class, label, mm, mm.dots, mm.unit, n, translit, type, xml:base, xml:id, + and xml:lang attributes are allowed when tempo is not a descendant of a score or + part. + + + + + Must have one of the + attributes: startid, tstamp, tstamp.ges or tstamp.real. + + + + + + + + + + + + + + + + Keyword or phrase which describes a resource. + + + + + + + + + The @data attribute may only occur on a + term which is a descendant of a classification element. + + + + + + + + + + + + (text language) – Identifies the languages and writing systems within the work described by a bibliographic description, not the language of the description. + + + + + + + + + + + + + (main language) supplies a code which identifies the chief language used in the bibliographic work. + + + + + + (other languages) one or more codes identifying any other languages used in the bibliographic work. + + + + + + + + + + + + + Title of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + Indicates the bibliographic level of the title. + + a + Analyzed component, such as an article or chapter, within a larger bibliographic entity. + c + Collection. A group of items that were not originally published, distributed, or produced together. + d + Subunit of a collection, e.g. item, folder, box, archival series, subgroup, or subcollection. + i + Integrating resource, such as a continuously updated loose-leaf service or Web site. + m + Monograph. + j + Journal. + s + Series. + u + Unpublished (including theses and dissertations unless published by a commercial press). + + + + + + Characterizes the title in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] main; 2] subordinate; 3] abbreviated; 4] alternative; 5] translated; 6] uniform; 7] desc + + main + Main title. + subordinate + Subtitle or title of part. + abbreviated + Abbreviated form of title. + alternative + Alternate title by which the item is also known. + translated + Translated form of title. + uniform + Collective title. + desc + Descriptive paraphrase of the work. + + + + + + + + + + Contains a transcription of the title page of a text. + + + + + + + + + + + + + + + + + + + + + + + Contains a subsection or division of the title of a bibliographic entity. + + + + + + + + + + + + + + + + + + + + + + + Characterizes this title component in some sense, using any convenient classification scheme or typology that employs single-token labels. +Suggested values include: 1] alternative; 2] arrangement; 3] carrier; 4] date; 5] desc; 6] form; 7] key; 8] language; 9] main; 10] name; 11] number; 12] perfmedium; 13] subordinate; 14] translated; 15] version + + alternative + Alternate title by which the item is also known. + arrangement + Arranged statement for music. Analogous to MARC 240 subfield o. + carrier + Medium of the carrier. Analogous to MARC 240 subfield h. + date + Publication/creation date(s) of work. Analogous to MARC 240 subfield f. + desc + Descriptive paraphrase of the work. + form + Form subheading. Analogous to MARC 240 subfield k. + key + Key for music. Analogous to MARC 240 subfield r. + language + Language of a work. Analogous to MARC 240 subfield l (el). + main + Main title. + name + Name of a part or section of a work. Analogous to MARC 240 subfield p. + number + Standard number designation of a work or of a part or section of a work. Analogous to MARC 240 subfield n. + perfmedium + Performance medium. Analogous to MARC 240 subfield m. + subordinate + Subtitle. + translated + Translated form of title. + version + Version. Analogous to MARC 240 subfield s. + + + + + + + + + + Description of the horizontal size of an object. + + + + + + + + + + + + + + + + + + + + + + Indicates which finger, if any, should be used to play an individual string. The index, middle, ring, and little fingers are represented by the values 1-4, while 't' is for the thumb. The values 'x' and 'o' indicate muffled and open strings, respectively. + + + + + + + + Records the location at which a string should be stopped against a fret. + + + + + + + + Records which string is to be played. + + + + + + + + + + + Records fret position. + + + + + + + + + + + Provides a *written* pitch and octave for each open string or course of strings. + + + + [a-g][0-9](s|f|ss|x|ff|xs|sx|ts|tf|n|nf|ns|su|sd|fu|fd|nu|nd|1qf|3qf|1qs|3qs)?([a-g][0-9](s|f|ss|x|ff|xs|sx|ts|tf|n|nf|ns|su|sd|fu|fd|nu|nd|1qf|3qf|1qs|3qs)?)* + + + + + + + + + A barre in a chord tablature grid. + + + + + + Records the location at which the strings should be stopped against a fret in a fretboard diagram. This may or may not be the same as the actual location on the fretboard of the instrument in performance. + + 1 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a formal list or prose description of topics addressed. + + + + + + + + + + + + + + + + + + + + + + + + + + (back matter) – Contains any appendixes, advertisements, indexes, etc. following the main body of a musical text. + + + + + + + + + + + + + + + + + + Contains a quotation, anonymous or attributed, appearing on a title page. + + + + + + + + + + + + + + + + + (front matter) – Bundles prefatory text found before the start of the musical text. + + + + + + + + + + + + + + + + + + Contains a formal statement authorizing the publication of a work, sometimes required to appear on a title page or its verso. + + + + + + + + + + + + + + + + (line of text) – Contains a single line of text within a line group. + + + + + + + + + + + + + + + Used to specify a rhythm for the lyric syllables that differs from that of the notes on the staff, e.g., '4,4,4,4' when the rhythm of the notes is '4.,8,4.,8'. + + + + + + + + + (list item) – Single item in a list. + + + + + + + + + + + + + + + + + + A formatting element that contains a series of items separated from one another and arranged in a linear, often vertical, sequence. + + + + + + + + + + + + In a list of type "gloss" all items + must be immediately preceded by a label. + + + + + + + + + + + + + + Used to indicate the format of a list. In a "simple" list, li elements are not numbered or bulleted. In a "marked" list, the sequence of the list items is not critical, and a bullet, box, dash, or other character is displayed at the start of each item. In an "ordered" list, the sequence of the items is important, and each li is lettered or numbered. Style sheet functions should be used to specify the mark or numeration system for each li. + + simple + Items are not numbered or bulleted. + marked + Bullet, box, dash, or other character is displayed before each item. + ordered + Each item is numbered or lettered. + + + + + + Captures the nature of the content of a list. +Suggested values include: 1] gloss; 2] index; 3] instructions; 4] litany; 5] syllogism + + gloss + Each list item glosses some term or concept, which is given by a label element preceding the list item. + index + Each list item is an entry in an index such as the alphabetical topical index at the back of a print volume. + instructions + Each list item is a step in a sequence of instructions, as in a recipe. + litany + Each list item is one of a sequence of petitions, supplications or invocations, typically in a religious ritual. + syllogism + Each list item is part of an argument consisting of two or more propositions and a final conclusion derived from them. + + + + + + + + + + (quoted) – Contains material which is distinguished from the surrounding phrase-level text using quotation marks or a similar method. Use quote for block-level quotations. + + + + + + + + + + + + + + + + +Suggested values include: 1] spoken; 2] thought; 3] written; 4] soCalled; 5] foreign; 6] distinct; 7] term; 8] emph; 9] mentioned + + + + spoken + Representation of speech. + thought + Representation of thought, e.g. internal monologue. + written + Quotation from a written source. + soCalled + Authorial distance. + foreign + Linguistically distinct. + distinct + Linguistically distinct. + term + Technical term. + emph + Rhetorically emphasized. + mentioned + Refering to itself, not its normal referent. + + + + + + + + + + + + (quoted material) – Contains a paragraph-like block of text attributed to an external source, normally set off from the surrounding text by spacing or other typographic distinction. + + + + + + + + + + + + + + + + + + (arbitrary segment) represents any segmentation of text below the "text component" level. + + + + + + + + + + + + + + + + + + + + + + Provides a way of pointing to a user-defined symbol. It must contain a reference to an ID of a symbolDef element elsewhere in the document. + + + + + + + @altsym attribute + should have content. + The value in @altsym should correspond to the @xml:id attribute of a symbolDef + element. + The value + in @altsym must not correspond to the @xml:id attribute of a symbolDef + ancestor. + + + + + + + + + + Indicates the function of the text. +Suggested values include: 1] unknown + + unknown + The function of the text is unknown. + + + + + + + + + + + + + Indicates the function of the curve. +Suggested values include: 1] unknown + + unknown + The function of the curve is unknown. + + + + + + + + + + + + + + + + Indicates the function of the line. +Suggested values include: 1] coloration; 2] ligature; 3] unknown + + coloration + Indicates coloration in material transcribed from a source originally in mensural notation. + ligature + Marks a ligature in material transcribed from a source originally in mensural notation. + unknown + The function of the line is unknown. + + + + + + + + + + + + + + + + + + + + Container for text that is fixed to a particular page location, regardless of changes made to the layout of the measures around it. + + + + + + + + + + + + + + + + + + + + + A curved line that cannot be represented by a more specific element, such as a slur. + + + + In the symbolDef context, curve must have + either a startid attribute or x and y attributes. + In the symbolDef context, curve must have + either an endid attribute or both x2 and y2 attributes. + In the symbolDef context, curve must have either a + bezier or bulge attribute. + + + + + + + + + + + + + + A visual line that cannot be represented by a more specific; i.e., semantic, element. + + + + + + + + + When used in the symbolDef context, must have + either a startid attribute or x and y attributes. + When used in the symbolDef context, must have + either an endid attribute or both x2 and y2 attributes. + + + + + When + used in the score context, must have a startid, tstamp, tstamp.ges or tstamp.real + attribute or both x and y attributes. + When used in + the score context, must have an endid, dur, dur.ges, or tstamp2 attribute or both x2 and + y2 attributes. + + + + + + + + + + + + + + One or more characters which are related to the parent symbol in some respect, as specified by the type attribute. + + + + + + + + + + + + + (property name) – Name of a property of the symbol. + + + + + + + + Characterizes the property name. + + unicode + A registered Unicode normative or informative property name. + local + A locally defined name. + + + + + + + + (property value) – A single property value. + + + + + + + + (symbol definition) – Declaration of an individual symbol in a symbolTable. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (symbol name) – Contains the name of a symbol, expressed following Unicode conventions. + + + + + + + + (symbol property) – Provides a name and value for some property of the parent symbol. + + + + + + + + + Contains a set of user-defined symbols. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Location of the annotation. + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if an arrowhead is to be drawn as part of the arpeggiation symbol. + + + + + + + + Symbol rendered at end of the line. + + + + + + + + Holds the relative size of the arrow symbol. + + + + + + + + Captures the overall color of the arrow. + + + + + + + + Captures the fill color of the arrow if different from the line color. + + + + + + + + Visual form of the line. + + + + + + + + Width of the line. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + States the length of barlines in virtual units. The value must be greater than 0 and is typically equal to 2 times (the number of staff lines - 1); e.g., a value of '8' for a 5-line staff. + + 0 + + + + + + + + Records the method of barring. + + + + + + + + Denotes the staff location of the bar line if its length is non-standard. + + + + + + + + + + + + + + + + + + Color of beams, including those associated with tuplets. + + + + + + + + Encodes whether a beam is "feathered" and in which direction. + + acc + Beam lines grow farther apart from left to right. + rit + Beam lines grow closer together from left to right. + norm + Beam lines are equally-spaced over the entire length of the beam. + + + + + + + + Captures beam slope. + + + + + + + + + + + + + + + + + + Indicates the number of slashes required to render the appropriate beat repeat symbol. When a single beat consisting of a single note or chord is repeated, the repetition symbol is a single thick, slanting slash; therefore, the value '1' should be used. When the beat is divided into even notes, the following values should be used: 4ths or 8ths=1, 16ths=2, 32nds=3, 64ths=4, 128ths=5. When the beat is comprised of mixed duration values, the default rendition is 2 slashes and 2 dots. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates a single, alternative note head should be displayed instead of individual note heads. The highest and lowest notes of the chord usually indicate the upper and lower boundaries of the cluster note head. + + + + + + + + + + + + + + + + + + + + + + + + + Describes the color of the clef. + + + + + + + + Determines whether the clef is to be displayed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + h + Horizontal stroke. + v + Vertical stroke. + + + + + + + + Captures the placement of the episema with respect to the neume or neume component with which it is associated. + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the visual appearance of the fermata; that is, whether it occurs as upright or inverted. + + inv + Inverted, i.e., curve or bracket below the dot. + norm + Upright; i.e., curve or bracket above the dot. + + + + + + + + Describes the visual appearance of the fermata; that is, whether it has a curved, square, or angular shape. + + curved + A curve above or below the dot. + square + A bracket above or below the dot. + angular + A triangle above or below the dot. + + + + + + + + + + + + + + + + + + + + + + + + + horiz + Combination expressed horizontally, as for brass instruments. + vert + Combination expressed vertically, as for woodwind instruments or piano. + + + + + + + + + + + + + Indicates the number of beams present. + + 1 + 6 + + + + + + + + Captures the number of "floating" beams, i.e., those not attached to stems. + + + + + + + The number of floating beams must be less + than or equal to the total number of beams. + + + + + + Records the amount of separation between floating beams and stems. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the distance between the lines at the open end of a hairpin dynamic mark. + + + + + + + + + + + + + + + + + + + + + + + + + Describes how the harmonic indication should be rendered. + + grid + Chord tablature grid. + gridtext + Chord tablature grid and the element's textual content. + text + Textual content of the element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Captures the placement of the tick mark with respect to the neume or neume component with which it is associated. + + + + + + + + Direction toward which the mark points. + + + + + + + + + + + + + + + + + + + + + + + Determines whether cautionary accidentals should be displayed at a key change. + + + + + + + + + + + + Indicates whether the key signature should be displayed. + + + + + + + + Determines whether cautionary accidentals should be displayed at a key change. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Visual form of the line. + + + + + + + + Width of the line. + + + + + + + + Symbol rendered at end of line. + + + + + + + + Holds the relative size of the line-end symbol. + + + + + + + + Symbol rendered at start of line. + + + + + + + + Holds the relative size of the line-start symbol. + + + + + + + + + + + + + + + + + + + + + Records direction of curvature. + + a + Anti-clockwise curvature. + c + Clockwise curvature. + + + + + + + + Indicates whether curve is closed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether the base symbol is written vertically or horizontally. + + horizontal + Horizontally oriented. + vertical + Vertically oriented. + + + + + + + + Describes the rotation or reflection of the base symbol. + + + + + + + + + + + + + + + Records the color of the mensuration sign. Do not confuse this with the musical term 'color' as used in pre-CMN notation. + + + + + + + + Indicates whether the base symbol is written vertically or horizontally. + + horizontal + Horizontally oriented. + vertical + Vertically oriented. + + + + + + + + Holds the staff location of the mensuration sign. + + + + + + + + Describes the rotation or reflection of the base symbol. + + + + + + + + Describes the relative size of the mensuration sign. + + + + + + + + + + + + + + + Contains an indication of how the meter signature should be rendered. + + num + Show only the number of beats. + denomsym + The lower number in the meter signature is replaced by a note symbol. + norm + Meter signature rendered using traditional numeric values. + invis + Meter signature not rendered. + + + + + + + + + + + + Contains an indication of how the meter signature should be rendered. + + num + Show only the number of beats. + denomsym + The lower number in the meter signature is replaced by a note symbol. + norm + Meter signature rendered using traditional numeric values. + invis + Meter signature not rendered. + + + + + + + + Determines whether the old meter signature should be displayed when the meter signature changes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + When the block attribute is used, combinations of the 1, 2, and 4 measure rest forms (Read, p. 104) should be rendered instead of the modern form or an alternative symbol. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + States the side of a leaf (as in a manuscript) on which the content following the pb element occurs. + + verso + The back of a manuscript page. + recto + The front of a manuscript page. + + + + + + + + + + + + + + + + + + + Determines whether piano pedal marks should be rendered as lines or as terms. + + line + Continuous line with start and end positions rendered by vertical bars and bounces shown by upward-pointing "blips". + pedstar + Pedal down and half pedal rendered with "Ped.", pedal up rendered by "*", pedal "bounce" rendered with "* Ped.". + altpedstar + Pedal up and down indications same as with "pedstar", but bounce is rendered with "Ped." only. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of "crests" of a wavy line. + + 2 + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether hash marks should be rendered between systems. See Read, p. 436, ex. 26-3. + + hash + Display hash marks between systems. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines the height of a "virtual unit" (vu) in terms of real-world units. A single vu is half the distance between the vertical center point of a staff line and that of an adjacent staff line. + + \d+(\.\d+)?(cm|mm|in|pt|pc) + + + + + + + + + + + Indicates that staves begin again with this section. + + + + + + + + + + + + + + + + + + + + Captures the placement of the sequence of characters with respect to the neume or neume component with which it is associated. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether a space is 'compressible', i.e., if it may be removed at the discretion of processing software. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines whether to display guitar chord grids. + + + + + + + + Indicates the number of layers and their stem directions. + + + + + + + + Captures the colors of the staff lines. The value is structured; that is, it should have the same number of space-separated RGB values as the number of lines indicated by the lines attribute. A line can be made invisible by assigning it the same RGB value as the background, usually white. + + + + + + + + + + + + Records whether all staff lines are visible. + + + + + + + + Records the absolute distance (as opposed to the relative distances recorded in scoreDef elements) between this staff and the preceding one in the same system. This value is meaningless for the first staff in a system since the spacing.system attribute indicates the spacing between systems. + + + + + + + + + + + + + + Indicates whether bar lines go across the space between staves (true) or are only drawn across the lines of each staff (false). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Used to state where a tuplet bracket will be placed in relation to the note heads. + + + + + + + + States whether a bracket should be rendered with a tuplet. + + + + + + + + Determines if the tuplet duration is visible. + + + + + + + + Controls how the num:numbase ratio is to be displayed. + + count + Only the num attribute is displayed, e.g., '7'. + ratio + Both the num and numbase attributes are displayed, e.g., '7:4'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_304.json b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_304.json new file mode 100755 index 000000000..e84ad52e1 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_304.json @@ -0,0 +1 @@ +{"glyphs": [{"glyph": {"bounding_box": {"nrows": 71, "ulx": 1081, "uly": 707, "ncols": 27}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1081", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 82, "ulx": 1116, "uly": 698, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1116", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 1121, "uly": 764, "ncols": 32}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1121", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1241, "uly": 809, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1241", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1279, "uly": 840, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "12", "clef_pos": "7", "note": "e", "octave": "2", "offset": "1279", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1433, "uly": 803, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1433", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1560, "uly": 744, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1560", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 1597, "uly": 783, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1597", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1734, "uly": 823, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1734", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1858, "uly": 828, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1858", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2048, "uly": 708, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2048", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2119, "uly": 709, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2119", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2186, "uly": 725, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2186", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2256, "uly": 767, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2256", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2333, "uly": 734, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2333", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2367, "uly": 694, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2367", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 2443, "uly": 717, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2443", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 74, "ulx": 3049, "uly": 650, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3049", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 92, "ulx": 3049, "uly": 704, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3049", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3128, "uly": 763, "ncols": 50}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3128", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3184, "uly": 763, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3184", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3257, "uly": 791, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3257", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3405, "uly": 768, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3405", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3639, "uly": 702, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3639", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3777, "uly": 726, "ncols": 26}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3777", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 142, "ulx": 1098, "uly": 1017, "ncols": 36}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1098", "clef": "None", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 1188, "uly": 1086, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1188", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1305, "uly": 1125, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1305", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1468, "uly": 1120, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1468", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1503, "uly": 1159, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1503", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1758, "uly": 1080, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1758", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 42, "ulx": 1896, "uly": 1084, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1896", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2103, "uly": 1086, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2103", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2138, "uly": 1048, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2138", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 90, "ulx": 2192, "uly": 1010, "ncols": 102}, "state": "AUTOMATIC", "name": "neume.oblique2"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2192", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2285, "uly": 1015, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2285", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2324, "uly": 994, "ncols": 50}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "2324", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2444, "uly": 1009, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2444", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2616, "uly": 1011, "ncols": 52}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2616", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2792, "uly": 1016, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2792", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2919, "uly": 1045, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2919", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3088, "uly": 1069, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3088", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3128, "uly": 1102, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3128", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3287, "uly": 1078, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3287", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 75, "ulx": 3326, "uly": 1036, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3326", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3410, "uly": 1040, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3410", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 3567, "uly": 1013, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3567", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3608, "uly": 1087, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3608", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3778, "uly": 1035, "ncols": 33}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3778", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 87, "ulx": 1084, "uly": 1466, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1084", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 1089, "uly": 1414, "ncols": 31}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1089", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1199, "uly": 1417, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1199", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1508, "uly": 1457, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1508", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1548, "uly": 1492, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1548", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 1810, "uly": 1544, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1810", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 2005, "uly": 1490, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2005", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 2133, "uly": 1426, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2133", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2172, "uly": 1503, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2172", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 2275, "uly": 1466, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2275", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2314, "uly": 1502, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2314", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2506, "uly": 1528, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2506", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2611, "uly": 1524, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2611", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2820, "uly": 1405, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2820", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2895, "uly": 1407, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2895", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2982, "uly": 1437, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2982", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3049, "uly": 1473, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3049", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3127, "uly": 1442, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3127", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 3160, "uly": 1409, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3160", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3228, "uly": 1441, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3228", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 140, "ulx": 1334, "uly": 1869, "ncols": 36}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "2", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1334", "clef": "None", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 1439, "uly": 1981, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "1439", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1444, "uly": 1857, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1444", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1598, "uly": 1823, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1598", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1739, "uly": 1864, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1739", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 1861, "uly": 1896, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1861", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2035, "uly": 1870, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2035", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 2141, "uly": 1902, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2141", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2179, "uly": 1940, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2179", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2265, "uly": 1893, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2265", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2297, "uly": 1865, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2297", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2431, "uly": 1900, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2431", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2589, "uly": 1956, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "2589", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2625, "uly": 1920, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2625", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 74, "ulx": 2724, "uly": 1883, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2724", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2817, "uly": 1922, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2817", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2857, "uly": 1961, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "2857", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 2950, "uly": 1995, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2950", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2958, "uly": 1922, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2958", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3062, "uly": 1925, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3062", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 3102, "uly": 2021, "ncols": 50}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "12", "clef_pos": "9", "note": "g", "octave": "2", "offset": "3102", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3350, "uly": 1951, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "3350", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3558, "uly": 1936, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3558", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 3691, "uly": 1900, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3691", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3777, "uly": 1932, "ncols": 33}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3777", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 145, "ulx": 1083, "uly": 2267, "ncols": 40}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "2", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1083", "clef": "None", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1165, "uly": 2311, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "1165", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1277, "uly": 2374, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "1277", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1448, "uly": 2315, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "1448", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 1598, "uly": 2342, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "1598", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1630, "uly": 2304, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "1630", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1808, "uly": 2283, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1808", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1938, "uly": 2317, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "1938", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1976, "uly": 2353, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "1976", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2157, "uly": 2385, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2157", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2295, "uly": 2387, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2295", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2434, "uly": 2384, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2434", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2681, "uly": 2265, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2681", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2760, "uly": 2264, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2760", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2833, "uly": 2288, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2833", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2897, "uly": 2327, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2897", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2968, "uly": 2297, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2968", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 2999, "uly": 2260, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2999", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3064, "uly": 2294, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3064", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 81, "ulx": 1330, "uly": 2601, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1330", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 1334, "uly": 2546, "ncols": 31}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "4", "clef_pos": "9", "note": "a", "octave": "3", "offset": "1334", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1402, "uly": 2657, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1402", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1473, "uly": 2658, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1473", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1555, "uly": 2656, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1555", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1775, "uly": 2654, "ncols": 57}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1775", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 1818, "uly": 2693, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1818", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 1947, "uly": 2754, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "1947", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 2104, "uly": 2694, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2104", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2138, "uly": 2656, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2138", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2261, "uly": 2664, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2261", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2492, "uly": 2661, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2492", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2646, "uly": 2601, "ncols": 54}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "9", "note": "g", "octave": "3", "offset": "2646", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2800, "uly": 2634, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "2800", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2834, "uly": 2594, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "9", "note": "g", "octave": "3", "offset": "2834", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2963, "uly": 2664, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2963", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 3059, "uly": 2694, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3059", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 3211, "uly": 2743, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "3211", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3248, "uly": 2722, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3248", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 3392, "uly": 2691, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3392", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 3609, "uly": 2728, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3609", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3650, "uly": 2763, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "3650", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3773, "uly": 2786, "ncols": 25}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "3773", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 136, "ulx": 1087, "uly": 2936, "ncols": 38}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "4", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1087", "clef": "None", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 1210, "uly": 3162, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "5", "note": "d", "octave": "2", "offset": "1210", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1382, "uly": 3162, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "5", "note": "d", "octave": "2", "offset": "1382", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1688, "uly": 3041, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "1688", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1759, "uly": 3038, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "1759", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1844, "uly": 3068, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1844", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1915, "uly": 3109, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "1915", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 1980, "uly": 3076, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1980", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2016, "uly": 3034, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "2016", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 66, "ulx": 2298, "uly": 3133, "ncols": 50}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "10", "clef_pos": "5", "note": "e", "octave": "2", "offset": "2298", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 85, "ulx": 3212, "uly": 2994, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "5", "note": "b", "octave": "2", "offset": "3212", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3274, "uly": 3047, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "3274", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3362, "uly": 3119, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "3362", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3396, "uly": 3073, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "3396", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3468, "uly": 3082, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "3468", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3639, "uly": 3114, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "3639", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 3772, "uly": 3048, "ncols": 28}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "3772", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 111, "ulx": 1082, "uly": 3386, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "5", "note": "b", "octave": "2", "offset": "1082", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 77, "ulx": 1084, "uly": 3330, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "4", "clef_pos": "5", "note": "d", "octave": "3", "offset": "1084", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1181, "uly": 3445, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "1181", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1303, "uly": 3470, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1303", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1391, "uly": 3387, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "1391", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1510, "uly": 3414, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "5", "note": "b", "octave": "2", "offset": "1510", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1610, "uly": 3453, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "1610", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1638, "uly": 3375, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "1638", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1677, "uly": 3477, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1677", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1773, "uly": 3477, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1773", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1960, "uly": 3479, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1960", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2068, "uly": 3478, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "2068", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2196, "uly": 3504, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "2196", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2236, "uly": 3547, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "5", "note": "e", "octave": "2", "offset": "2236", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2395, "uly": 3510, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "2395", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2658, "uly": 3575, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "5", "note": "d", "octave": "2", "offset": "2658", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 2860, "uly": 3530, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "5", "note": "e", "octave": "2", "offset": "2860", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 84, "ulx": 3085, "uly": 3517, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "5", "note": "f", "octave": "2", "offset": "3085", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 3175, "uly": 3469, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "3175", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 3212, "uly": 3447, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "3212", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3319, "uly": 3450, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "3319", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 77, "ulx": 3461, "uly": 3485, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "3461", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 3652, "uly": 3388, "ncols": 26}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "3652", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 138, "ulx": 1063, "uly": 3711, "ncols": 35}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "4", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1063", "clef": "None", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1170, "uly": 3765, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "1170", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1237, "uly": 3765, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "1237", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1310, "uly": 3795, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "5", "note": "b", "octave": "2", "offset": "1310", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1374, "uly": 3764, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "5", "note": "c", "octave": "3", "offset": "1374", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1443, "uly": 3829, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "5", "note": "a", "octave": "2", "offset": "1443", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1522, "uly": 3853, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "5", "note": "g", "octave": "2", "offset": "1522", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 135, "ulx": 3044, "uly": 3845, "ncols": 33}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "2", "clef_pos": "None", "note": "None", "octave": "None", "offset": "3044", "clef": "None", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3140, "uly": 3965, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "3140", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3149, "uly": 3832, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3149", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 83, "ulx": 3398, "uly": 3789, "ncols": 53}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "3398", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3614, "uly": 3836, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3614", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3764, "uly": 3858, "ncols": 34}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3764", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 89, "ulx": 1074, "uly": 4283, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "1074", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 79, "ulx": 1075, "uly": 4223, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1075", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1196, "uly": 4245, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1196", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1453, "uly": 4283, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "1453", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1669, "uly": 4252, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1669", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 42, "ulx": 1702, "uly": 4210, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1702", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1859, "uly": 4247, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1859", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 74, "ulx": 2130, "uly": 4294, "ncols": 57}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "2130", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2306, "uly": 4279, "ncols": 52}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2306", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2443, "uly": 4246, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "2443", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2477, "uly": 4202, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2477", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2595, "uly": 4272, "ncols": 52}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "2595", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 2641, "uly": 4308, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "2641", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2852, "uly": 4342, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2852", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2989, "uly": 4344, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "9", "note": "a", "octave": "2", "offset": "2989", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3234, "uly": 4288, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3234", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3339, "uly": 4288, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3339", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 3523, "uly": 4299, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3523", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3554, "uly": 4225, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3554", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3590, "uly": 4188, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "3590", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3731, "uly": 4225, "ncols": 28}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3731", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 73, "ulx": 1065, "uly": 4562, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1065", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 1071, "uly": 4634, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1071", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1139, "uly": 4538, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "9", "note": "g", "octave": "3", "offset": "1139", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 1177, "uly": 4570, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1177", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1252, "uly": 4581, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1252", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1282, "uly": 4540, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "9", "note": "g", "octave": "3", "offset": "1282", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1323, "uly": 4577, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1323", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1467, "uly": 4643, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "1467", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1501, "uly": 4610, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1501", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 42, "ulx": 1662, "uly": 4579, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "1662", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 1787, "uly": 4614, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "1787", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2005, "uly": 4612, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2005", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2121, "uly": 4610, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2121", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2222, "uly": 4609, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2222", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2388, "uly": 4611, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2388", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 2556, "uly": 4614, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2556", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2687, "uly": 4606, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2687", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 2933, "uly": 4610, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "2933", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2965, "uly": 4572, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "2965", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3069, "uly": 4612, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3069", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3247, "uly": 4607, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3247", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 3289, "uly": 4640, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3289", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 3410, "uly": 4699, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "9", "note": "b", "octave": "2", "offset": "3410", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3535, "uly": 4638, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3535", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3541, "uly": 4582, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "9", "note": "f", "octave": "3", "offset": "3541", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 3654, "uly": 4616, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "9", "note": "e", "octave": "3", "offset": "3654", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 3689, "uly": 4652, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "9", "note": "d", "octave": "3", "offset": "3689", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3764, "uly": 4673, "ncols": 65}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "9", "clef_pos": "9", "note": "c", "octave": "3", "offset": "3764", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 139, "ulx": 1061, "uly": 4945, "ncols": 36}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1061", "clef": "None", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1175, "uly": 5062, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1175", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1325, "uly": 5064, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1325", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 1550, "uly": 4940, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1550", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1626, "uly": 4935, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1626", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1705, "uly": 4962, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1705", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1774, "uly": 5001, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1774", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1851, "uly": 4965, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1851", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1883, "uly": 4927, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1883", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1948, "uly": 4964, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1948", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 132, "ulx": 2393, "uly": 4962, "ncols": 41}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "2393", "clef": "None", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2459, "uly": 5103, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2459", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2569, "uly": 5073, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2569", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2572, "uly": 5006, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2572", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 42, "ulx": 2681, "uly": 5010, "ncols": 47}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2681", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2890, "uly": 5012, "ncols": 52}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2890", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 3020, "uly": 5010, "ncols": 50}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3020", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3222, "uly": 5016, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3222", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 3363, "uly": 5080, "ncols": 46}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3363", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3527, "uly": 5017, "ncols": 51}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3527", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 3644, "uly": 5048, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3644", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3760, "uly": 5100, "ncols": 27}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3760", "clef": "clef.c", "staff": "15"}}], "page": {"bounding_box": {"nrows": 6930, "ulx": 0, "uly": 0, "ncols": 4414}, "resolution": 0.0}, "staves": [{"staff_no": 1, "line_positions": [[[1088, 507], [1089, 507], [1090, 507], [1261, 516], [1471, 522], [1681, 526], [1891, 533], [2101, 534], [2312, 528], [2522, 527], [2640, 527], [2641, 527], [2642, 527]], [[1088, 573], [1089, 573], [1090, 573], [1261, 582], [1471, 588], [1681, 592], [1891, 599], [2101, 600], [2312, 594], [2522, 593], [2640, 593], [2641, 593], [2642, 593]], [[1088, 639], [1089, 639], [1090, 639], [1261, 648], [1471, 654], [1681, 658], [1891, 665], [2101, 666], [2312, 660], [2522, 659], [2640, 659], [2641, 659], [2642, 659]], [[1088, 704], [1089, 704], [1090, 707], [1261, 711], [1471, 717], [1681, 719], [1891, 727], [2101, 728], [2312, 724], [2522, 719], [2640, 719], [2641, 719], [2642, 719]], [[1088, 768], [1089, 768], [1090, 769], [1261, 771], [1471, 777], [1681, 779], [1891, 787], [2101, 789], [2312, 784], [2522, 779], [2640, 779], [2641, 779], [2642, 779]], [[1088, 832], [1089, 840], [1090, 840], [1261, 840], [1471, 840], [1681, 840], [1891, 847], [2101, 848], [2312, 844], [2522, 839], [2640, 839], [2641, 839], [2642, 839]], [[1088, 896], [1089, 904], [1090, 904], [1261, 904], [1471, 904], [1681, 904], [1891, 911], [2101, 912], [2312, 908], [2522, 903], [2640, 903], [2641, 903], [2642, 903]], [[1088, 960], [1089, 968], [1090, 968], [1261, 968], [1471, 968], [1681, 968], [1891, 975], [2101, 976], [2312, 972], [2522, 967], [2640, 967], [2641, 967], [2642, 967]]], "bounding_box": {"nrows": 209, "ulx": 1088, "uly": 639, "ncols": 1554}, "num_lines": 4}, {"staff_no": 2, "line_positions": [[[3058, 528], [3059, 528], [3152, 528], [3363, 533], [3573, 533], [3783, 532], [3839, 532], [3840, 532]], [[3058, 592], [3059, 592], [3152, 592], [3363, 597], [3573, 597], [3783, 596], [3839, 596], [3840, 596]], [[3058, 656], [3059, 656], [3152, 656], [3363, 661], [3573, 661], [3783, 660], [3839, 660], [3840, 660]], [[3058, 719], [3059, 720], [3152, 720], [3363, 723], [3573, 724], [3783, 723], [3839, 723], [3840, 723]], [[3058, 783], [3059, 784], [3152, 784], [3363, 784], [3573, 785], [3783, 785], [3839, 785], [3840, 785]], [[3058, 843], [3059, 843], [3152, 843], [3363, 846], [3573, 847], [3783, 847], [3839, 847], [3840, 847]], [[3058, 903], [3059, 903], [3152, 903], [3363, 906], [3573, 907], [3783, 907], [3839, 907], [3840, 907]], [[3058, 963], [3059, 963], [3152, 963], [3363, 966], [3573, 967], [3783, 967], [3839, 967], [3840, 967]]], "bounding_box": {"nrows": 191, "ulx": 3058, "uly": 656, "ncols": 782}, "num_lines": 4}, {"staff_no": 3, "line_positions": [[[1101, 886], [1102, 886], [1103, 886], [1261, 894], [1471, 895], [1681, 902], [1891, 910], [2101, 912], [2312, 909], [2522, 907], [2732, 905], [2942, 908], [3152, 910], [3363, 911], [3573, 912], [3783, 913], [3835, 913], [3836, 913], [3837, 913]], [[1101, 950], [1102, 950], [1103, 950], [1261, 958], [1471, 959], [1681, 966], [1891, 974], [2101, 976], [2312, 973], [2522, 971], [2732, 969], [2942, 972], [3152, 974], [3363, 975], [3573, 976], [3783, 977], [3835, 977], [3836, 977], [3837, 977]], [[1101, 1014], [1102, 1014], [1103, 1014], [1261, 1022], [1471, 1023], [1681, 1030], [1891, 1038], [2101, 1040], [2312, 1037], [2522, 1035], [2732, 1033], [2942, 1036], [3152, 1038], [3363, 1039], [3573, 1040], [3783, 1041], [3835, 1041], [3836, 1041], [3837, 1041]], [[1101, 1078], [1102, 1078], [1103, 1081], [1261, 1085], [1471, 1085], [1681, 1093], [1891, 1099], [2101, 1101], [2312, 1096], [2522, 1091], [2732, 1095], [2942, 1099], [3152, 1101], [3363, 1102], [3573, 1100], [3783, 1102], [3835, 1101], [3836, 1101], [3837, 1101]], [[1101, 1139], [1102, 1146], [1103, 1146], [1261, 1146], [1471, 1146], [1681, 1153], [1891, 1159], [2101, 1160], [2312, 1156], [2522, 1151], [2732, 1151], [2942, 1160], [3152, 1162], [3363, 1164], [3573, 1161], [3783, 1163], [3835, 1162], [3836, 1162], [3837, 1162]], [[1101, 1199], [1102, 1207], [1103, 1207], [1261, 1207], [1471, 1207], [1681, 1215], [1891, 1219], [2101, 1221], [2312, 1222], [2522, 1217], [2732, 1218], [2942, 1221], [3152, 1223], [3363, 1224], [3573, 1223], [3783, 1225], [3835, 1224], [3836, 1224], [3837, 1224]], [[1101, 1259], [1102, 1267], [1103, 1267], [1261, 1267], [1471, 1267], [1681, 1275], [1891, 1279], [2101, 1281], [2312, 1282], [2522, 1277], [2732, 1278], [2942, 1281], [3152, 1283], [3363, 1284], [3573, 1283], [3783, 1285], [3835, 1284], [3836, 1284], [3837, 1284]], [[1101, 1319], [1102, 1327], [1103, 1327], [1261, 1327], [1471, 1327], [1681, 1335], [1891, 1339], [2101, 1341], [2312, 1342], [2522, 1337], [2732, 1338], [2942, 1341], [3152, 1343], [3363, 1344], [3573, 1343], [3783, 1345], [3835, 1344], [3836, 1344], [3837, 1344]]], "bounding_box": {"nrows": 211, "ulx": 1101, "uly": 1014, "ncols": 2736}, "num_lines": 4}, {"staff_no": 4, "line_positions": [[[1072, 1289], [1073, 1289], [1074, 1289], [1261, 1292], [1471, 1294], [1681, 1298], [1891, 1302], [2101, 1304], [2312, 1305], [2522, 1299], [2732, 1302], [2942, 1305], [3152, 1307], [3354, 1307], [3355, 1308], [3356, 1309]], [[1072, 1351], [1073, 1351], [1074, 1351], [1261, 1354], [1471, 1356], [1681, 1360], [1891, 1364], [2101, 1366], [2312, 1367], [2522, 1361], [2732, 1364], [2942, 1367], [3152, 1369], [3354, 1369], [3355, 1370], [3356, 1371]], [[1072, 1413], [1073, 1413], [1074, 1413], [1261, 1416], [1471, 1418], [1681, 1422], [1891, 1426], [2101, 1428], [2312, 1429], [2522, 1423], [2732, 1426], [2942, 1429], [3152, 1431], [3354, 1431], [3355, 1432], [3356, 1433]], [[1072, 1475], [1073, 1475], [1074, 1475], [1261, 1479], [1471, 1481], [1681, 1485], [1891, 1489], [2101, 1491], [2312, 1492], [2522, 1486], [2732, 1487], [2942, 1490], [3152, 1492], [3354, 1493], [3355, 1494], [3356, 1494]], [[1072, 1534], [1073, 1534], [1074, 1537], [1261, 1540], [1471, 1541], [1681, 1546], [1891, 1553], [2101, 1552], [2312, 1553], [2522, 1553], [2732, 1547], [2942, 1549], [3152, 1552], [3354, 1553], [3355, 1553], [3356, 1553]], [[1072, 1597], [1073, 1601], [1074, 1601], [1261, 1601], [1471, 1603], [1681, 1606], [1891, 1614], [2101, 1615], [2312, 1615], [2522, 1610], [2732, 1609], [2942, 1610], [3152, 1613], [3354, 1614], [3355, 1614], [3356, 1614]], [[1072, 1661], [1073, 1665], [1074, 1665], [1261, 1665], [1471, 1667], [1681, 1670], [1891, 1678], [2101, 1679], [2312, 1679], [2522, 1674], [2732, 1673], [2942, 1674], [3152, 1677], [3354, 1678], [3355, 1678], [3356, 1678]], [[1072, 1725], [1073, 1729], [1074, 1729], [1261, 1729], [1471, 1731], [1681, 1734], [1891, 1742], [2101, 1743], [2312, 1743], [2522, 1738], [2732, 1737], [2942, 1738], [3152, 1741], [3354, 1742], [3355, 1742], [3356, 1742]]], "bounding_box": {"nrows": 202, "ulx": 1072, "uly": 1413, "ncols": 2284}, "num_lines": 4}, {"staff_no": 5, "line_positions": [[[1486, 1673], [1487, 1673], [1681, 1681], [1891, 1689], [2101, 1694], [2312, 1694], [2522, 1690], [2732, 1688], [2942, 1689], [3152, 1691], [3363, 1693], [3573, 1692], [3783, 1696], [3817, 1696], [3818, 1696], [3819, 1696]], [[1486, 1741], [1487, 1741], [1681, 1749], [1891, 1757], [2101, 1762], [2312, 1762], [2522, 1758], [2732, 1756], [2942, 1757], [3152, 1759], [3363, 1761], [3573, 1760], [3783, 1764], [3817, 1764], [3818, 1764], [3819, 1764]], [[1486, 1809], [1487, 1809], [1681, 1817], [1891, 1825], [2101, 1830], [2312, 1830], [2522, 1826], [2732, 1824], [2942, 1825], [3152, 1827], [3363, 1829], [3573, 1828], [3783, 1832], [3817, 1832], [3818, 1832], [3819, 1832]], [[1486, 1876], [1487, 1876], [1681, 1880], [1891, 1887], [2101, 1892], [2312, 1893], [2522, 1889], [2732, 1887], [2942, 1888], [3152, 1890], [3363, 1892], [3573, 1891], [3783, 1895], [3817, 1894], [3818, 1894], [3819, 1894]], [[1486, 1937], [1487, 1941], [1681, 1941], [1891, 1948], [2101, 1950], [2312, 1953], [2522, 1949], [2732, 1948], [2942, 1950], [3152, 1951], [3363, 1953], [3573, 1954], [3783, 1954], [3817, 1954], [3818, 1955], [3819, 1955]], [[1486, 1999], [1487, 2003], [1681, 2003], [1891, 2009], [2101, 2011], [2312, 2015], [2522, 2011], [2732, 2010], [2942, 2012], [3152, 2013], [3363, 2015], [3573, 2015], [3783, 2018], [3817, 2017], [3818, 2017], [3819, 2017]], [[1486, 2061], [1487, 2065], [1681, 2065], [1891, 2071], [2101, 2073], [2312, 2077], [2522, 2073], [2732, 2072], [2942, 2074], [3152, 2075], [3363, 2077], [3573, 2077], [3783, 2080], [3817, 2079], [3818, 2079], [3819, 2079]], [[1486, 2123], [1487, 2127], [1681, 2127], [1891, 2133], [2101, 2135], [2312, 2139], [2522, 2135], [2732, 2134], [2942, 2136], [3152, 2137], [3363, 2139], [3573, 2139], [3783, 2142], [3817, 2141], [3818, 2141], [3819, 2141]]], "bounding_box": {"nrows": 209, "ulx": 1486, "uly": 1809, "ncols": 2333}, "num_lines": 4}, {"staff_no": 6, "line_positions": [[[1091, 2088], [1092, 2088], [1093, 2088], [1261, 2090], [1471, 2096], [1681, 2094], [1891, 2097], [2101, 2102], [2312, 2104], [2522, 2104], [2732, 2103], [2942, 2104], [3140, 2104], [3141, 2105], [3142, 2105], [3143, 2106]], [[1091, 2146], [1092, 2146], [1093, 2146], [1261, 2148], [1471, 2154], [1681, 2152], [1891, 2155], [2101, 2160], [2312, 2162], [2522, 2162], [2732, 2161], [2942, 2162], [3140, 2162], [3141, 2163], [3142, 2163], [3143, 2164]], [[1091, 2204], [1092, 2204], [1093, 2204], [1261, 2206], [1471, 2212], [1681, 2210], [1891, 2213], [2101, 2218], [2312, 2220], [2522, 2220], [2732, 2219], [2942, 2220], [3140, 2220], [3141, 2221], [3142, 2221], [3143, 2222]], [[1091, 2261], [1092, 2261], [1093, 2265], [1261, 2269], [1471, 2275], [1681, 2273], [1891, 2276], [2101, 2281], [2312, 2282], [2522, 2282], [2732, 2282], [2942, 2283], [3140, 2283], [3141, 2283], [3142, 2284], [3143, 2284]], [[1091, 2327], [1092, 2331], [1093, 2331], [1261, 2331], [1471, 2337], [1681, 2335], [1891, 2337], [2101, 2342], [2312, 2343], [2522, 2343], [2732, 2344], [2942, 2345], [3140, 2345], [3141, 2346], [3142, 2346], [3143, 2346]], [[1091, 2389], [1092, 2392], [1093, 2392], [1261, 2392], [1471, 2393], [1681, 2397], [1891, 2399], [2101, 2403], [2312, 2404], [2522, 2406], [2732, 2406], [2942, 2408], [3140, 2410], [3141, 2410], [3142, 2410], [3143, 2410]], [[1091, 2451], [1092, 2454], [1093, 2454], [1261, 2454], [1471, 2455], [1681, 2459], [1891, 2461], [2101, 2465], [2312, 2466], [2522, 2468], [2732, 2468], [2942, 2470], [3140, 2472], [3141, 2472], [3142, 2472], [3143, 2472]], [[1091, 2513], [1092, 2516], [1093, 2516], [1261, 2516], [1471, 2517], [1681, 2521], [1891, 2523], [2101, 2527], [2312, 2528], [2522, 2530], [2732, 2530], [2942, 2532], [3140, 2534], [3141, 2534], [3142, 2534], [3143, 2534]]], "bounding_box": {"nrows": 206, "ulx": 1091, "uly": 2204, "ncols": 2052}, "num_lines": 4}, {"staff_no": 7, "line_positions": [[[1317, 2467], [1318, 2467], [1471, 2472], [1681, 2475], [1891, 2477], [2101, 2479], [2312, 2480], [2522, 2481], [2732, 2479], [2942, 2481], [3152, 2484], [3363, 2483], [3573, 2484], [3783, 2487], [3821, 2487], [3822, 2487], [3823, 2487]], [[1317, 2537], [1318, 2537], [1471, 2542], [1681, 2545], [1891, 2547], [2101, 2549], [2312, 2550], [2522, 2551], [2732, 2549], [2942, 2551], [3152, 2554], [3363, 2553], [3573, 2554], [3783, 2557], [3821, 2557], [3822, 2557], [3823, 2557]], [[1317, 2607], [1318, 2607], [1471, 2612], [1681, 2615], [1891, 2617], [2101, 2619], [2312, 2620], [2522, 2621], [2732, 2619], [2942, 2621], [3152, 2624], [3363, 2623], [3573, 2624], [3783, 2627], [3821, 2627], [3822, 2627], [3823, 2627]], [[1317, 2676], [1318, 2676], [1471, 2677], [1681, 2678], [1891, 2680], [2101, 2681], [2312, 2683], [2522, 2683], [2732, 2682], [2942, 2684], [3152, 2686], [3363, 2686], [3573, 2687], [3783, 2692], [3821, 2692], [3822, 2692], [3823, 2692]], [[1317, 2731], [1318, 2731], [1471, 2737], [1681, 2739], [1891, 2741], [2101, 2742], [2312, 2743], [2522, 2743], [2732, 2742], [2942, 2743], [3152, 2746], [3363, 2748], [3573, 2749], [3783, 2753], [3821, 2753], [3822, 2753], [3823, 2753]], [[1317, 2791], [1318, 2798], [1471, 2798], [1681, 2802], [1891, 2806], [2101, 2808], [2312, 2806], [2522, 2806], [2732, 2804], [2942, 2805], [3152, 2808], [3363, 2810], [3573, 2811], [3783, 2811], [3821, 2812], [3822, 2812], [3823, 2812]], [[1317, 2851], [1318, 2858], [1471, 2858], [1681, 2862], [1891, 2866], [2101, 2868], [2312, 2866], [2522, 2866], [2732, 2864], [2942, 2865], [3152, 2868], [3363, 2870], [3573, 2871], [3783, 2871], [3821, 2872], [3822, 2872], [3823, 2872]], [[1317, 2911], [1318, 2918], [1471, 2918], [1681, 2922], [1891, 2926], [2101, 2928], [2312, 2926], [2522, 2926], [2732, 2924], [2942, 2925], [3152, 2928], [3363, 2930], [3573, 2931], [3783, 2931], [3821, 2932], [3822, 2932], [3823, 2932]]], "bounding_box": {"nrows": 205, "ulx": 1317, "uly": 2607, "ncols": 2506}, "num_lines": 4}, {"staff_no": 8, "line_positions": [[[1087, 2853], [1088, 2853], [1089, 2853], [1261, 2860], [1471, 2866], [1681, 2866], [1891, 2865], [2101, 2867], [2175, 2867], [2176, 2868], [2177, 2868], [2178, 2869]], [[1087, 2921], [1088, 2921], [1089, 2921], [1261, 2928], [1471, 2934], [1681, 2934], [1891, 2933], [2101, 2935], [2175, 2935], [2176, 2936], [2177, 2936], [2178, 2937]], [[1087, 2989], [1088, 2989], [1089, 2989], [1261, 2996], [1471, 3002], [1681, 3002], [1891, 3001], [2101, 3003], [2175, 3003], [2176, 3004], [2177, 3004], [2178, 3005]], [[1087, 3057], [1088, 3057], [1089, 3057], [1261, 3060], [1471, 3066], [1681, 3062], [1891, 3065], [2101, 3066], [2175, 3066], [2176, 3066], [2177, 3067], [2178, 3067]], [[1087, 3118], [1088, 3118], [1089, 3120], [1261, 3122], [1471, 3128], [1681, 3124], [1891, 3126], [2101, 3128], [2175, 3128], [2176, 3129], [2177, 3129], [2178, 3129]], [[1087, 3181], [1088, 3183], [1089, 3183], [1261, 3183], [1471, 3189], [1681, 3186], [1891, 3189], [2101, 3190], [2175, 3190], [2176, 3190], [2177, 3190], [2178, 3190]], [[1087, 3245], [1088, 3247], [1089, 3247], [1261, 3247], [1471, 3253], [1681, 3250], [1891, 3253], [2101, 3254], [2175, 3254], [2176, 3254], [2177, 3254], [2178, 3254]], [[1087, 3309], [1088, 3311], [1089, 3311], [1261, 3311], [1471, 3317], [1681, 3314], [1891, 3317], [2101, 3318], [2175, 3318], [2176, 3318], [2177, 3318], [2178, 3318]]], "bounding_box": {"nrows": 201, "ulx": 1087, "uly": 2989, "ncols": 1091}, "num_lines": 4}, {"staff_no": 9, "line_positions": [[[3240, 2884], [3241, 2884], [3363, 2884], [3573, 2886], [3783, 2888], [3822, 2888], [3823, 2888]], [[3240, 2946], [3241, 2946], [3363, 2946], [3573, 2948], [3783, 2950], [3822, 2950], [3823, 2950]], [[3240, 3008], [3241, 3008], [3363, 3008], [3573, 3010], [3783, 3012], [3822, 3012], [3823, 3012]], [[3240, 3070], [3241, 3071], [3363, 3071], [3573, 3074], [3783, 3075], [3822, 3075], [3823, 3075]], [[3240, 3132], [3241, 3132], [3363, 3132], [3573, 3136], [3783, 3136], [3822, 3135], [3823, 3135]], [[3240, 3195], [3241, 3195], [3363, 3195], [3573, 3197], [3783, 3199], [3822, 3199], [3823, 3199]], [[3240, 3259], [3241, 3259], [3363, 3259], [3573, 3261], [3783, 3263], [3822, 3263], [3823, 3263]], [[3240, 3323], [3241, 3323], [3363, 3323], [3573, 3325], [3783, 3327], [3822, 3327], [3823, 3327]]], "bounding_box": {"nrows": 191, "ulx": 3240, "uly": 3008, "ncols": 583}, "num_lines": 4}, {"staff_no": 10, "line_positions": [[[1090, 3269], [1091, 3269], [1261, 3271], [1471, 3277], [1681, 3274], [1891, 3277], [2101, 3275], [2312, 3276], [2522, 3277], [2732, 3275], [2942, 3277], [3152, 3279], [3363, 3280], [3573, 3281], [3783, 3284], [3818, 3284], [3819, 3284], [3820, 3284]], [[1090, 3335], [1091, 3335], [1261, 3337], [1471, 3343], [1681, 3340], [1891, 3343], [2101, 3341], [2312, 3342], [2522, 3343], [2732, 3341], [2942, 3343], [3152, 3345], [3363, 3346], [3573, 3347], [3783, 3350], [3818, 3350], [3819, 3350], [3820, 3350]], [[1090, 3401], [1091, 3401], [1261, 3403], [1471, 3409], [1681, 3406], [1891, 3409], [2101, 3407], [2312, 3408], [2522, 3409], [2732, 3407], [2942, 3409], [3152, 3411], [3363, 3412], [3573, 3413], [3783, 3416], [3818, 3416], [3819, 3416], [3820, 3416]], [[1090, 3466], [1091, 3467], [1261, 3467], [1471, 3473], [1681, 3470], [1891, 3472], [2101, 3471], [2312, 3471], [2522, 3471], [2732, 3471], [2942, 3472], [3152, 3473], [3363, 3475], [3573, 3477], [3783, 3479], [3818, 3479], [3819, 3479], [3820, 3479]], [[1090, 3524], [1091, 3528], [1261, 3528], [1471, 3534], [1681, 3534], [1891, 3533], [2101, 3532], [2312, 3532], [2522, 3532], [2732, 3532], [2942, 3533], [3152, 3535], [3363, 3536], [3573, 3538], [3783, 3541], [3818, 3541], [3819, 3541], [3820, 3541]], [[1090, 3586], [1091, 3590], [1261, 3590], [1471, 3596], [1681, 3593], [1891, 3596], [2101, 3598], [2312, 3594], [2522, 3594], [2732, 3594], [2942, 3595], [3152, 3597], [3363, 3599], [3573, 3600], [3783, 3603], [3818, 3603], [3819, 3603], [3820, 3603]], [[1090, 3648], [1091, 3652], [1261, 3652], [1471, 3658], [1681, 3655], [1891, 3658], [2101, 3660], [2312, 3656], [2522, 3656], [2732, 3656], [2942, 3657], [3152, 3659], [3363, 3661], [3573, 3662], [3783, 3665], [3818, 3665], [3819, 3665], [3820, 3665]], [[1090, 3710], [1091, 3714], [1261, 3714], [1471, 3720], [1681, 3717], [1891, 3720], [2101, 3722], [2312, 3718], [2522, 3718], [2732, 3718], [2942, 3719], [3152, 3721], [3363, 3723], [3573, 3724], [3783, 3727], [3818, 3727], [3819, 3727], [3820, 3727]]], "bounding_box": {"nrows": 202, "ulx": 1090, "uly": 3401, "ncols": 2730}, "num_lines": 4}, {"staff_no": 11, "line_positions": [[[3007, 3665], [3008, 3665], [3152, 3666], [3363, 3668], [3573, 3670], [3783, 3670], [3812, 3670], [3813, 3670]], [[3007, 3729], [3008, 3729], [3152, 3730], [3363, 3732], [3573, 3734], [3783, 3734], [3812, 3734], [3813, 3734]], [[3007, 3793], [3008, 3793], [3152, 3794], [3363, 3796], [3573, 3798], [3783, 3798], [3812, 3798], [3813, 3798]], [[3007, 3857], [3008, 3858], [3152, 3858], [3363, 3859], [3573, 3860], [3783, 3860], [3812, 3860], [3813, 3860]], [[3007, 3918], [3008, 3919], [3152, 3919], [3363, 3920], [3573, 3922], [3783, 3923], [3812, 3923], [3813, 3923]], [[3007, 3981], [3008, 3983], [3152, 3983], [3363, 3983], [3573, 3984], [3783, 3985], [3812, 3985], [3813, 3985]], [[3007, 4045], [3008, 4047], [3152, 4047], [3363, 4047], [3573, 4048], [3783, 4049], [3812, 4049], [3813, 4049]], [[3007, 4109], [3008, 4111], [3152, 4111], [3363, 4111], [3573, 4112], [3783, 4113], [3812, 4113], [3813, 4113]]], "bounding_box": {"nrows": 192, "ulx": 3007, "uly": 3793, "ncols": 806}, "num_lines": 4}, {"staff_no": 12, "line_positions": [[[1078, 4043], [1079, 4043], [1081, 4043], [1082, 4043], [1261, 4047], [1471, 4053], [1681, 4058], [1698, 4058], [1699, 4058], [1701, 4058], [1703, 4059], [1891, 4049], [2101, 4044], [2312, 4045], [2522, 4046], [2732, 4049], [2942, 4051], [3152, 4055], [3363, 4057], [3573, 4059], [3783, 4059], [3807, 4059], [3808, 4059], [3809, 4059]], [[1078, 4107], [1079, 4107], [1081, 4107], [1082, 4107], [1261, 4111], [1471, 4117], [1681, 4122], [1698, 4122], [1699, 4122], [1701, 4122], [1703, 4123], [1891, 4113], [2101, 4108], [2312, 4109], [2522, 4110], [2732, 4113], [2942, 4115], [3152, 4119], [3363, 4121], [3573, 4123], [3783, 4123], [3807, 4123], [3808, 4123], [3809, 4123]], [[1078, 4171], [1079, 4171], [1081, 4171], [1082, 4171], [1261, 4175], [1471, 4181], [1681, 4186], [1698, 4186], [1699, 4186], [1701, 4186], [1703, 4187], [1891, 4177], [2101, 4172], [2312, 4173], [2522, 4174], [2732, 4177], [2942, 4179], [3152, 4183], [3363, 4185], [3573, 4187], [3783, 4187], [3807, 4187], [3808, 4187], [3809, 4187]], [[1078, 4234], [1079, 4234], [1081, 4234], [1082, 4236], [1261, 4238], [1471, 4244], [1681, 4245], [1698, 4246], [1699, 4247], [1701, 4248], [1703, 4248], [1891, 4238], [2101, 4235], [2312, 4236], [2522, 4237], [2732, 4239], [2942, 4242], [3152, 4245], [3363, 4248], [3573, 4249], [3783, 4250], [3807, 4249], [3808, 4249], [3809, 4249]], [[1078, 4295], [1079, 4295], [1081, 4296], [1082, 4298], [1261, 4300], [1471, 4306], [1681, 4306], [1698, 4307], [1699, 4308], [1701, 4308], [1703, 4308], [1891, 4300], [2101, 4302], [2312, 4303], [2522, 4303], [2732, 4298], [2942, 4302], [3152, 4305], [3363, 4308], [3573, 4311], [3783, 4312], [3807, 4312], [3808, 4312], [3809, 4312]], [[1078, 4358], [1079, 4362], [1081, 4362], [1082, 4362], [1261, 4362], [1471, 4368], [1681, 4364], [1698, 4362], [1699, 4362], [1701, 4362], [1703, 4362], [1891, 4356], [2101, 4357], [2312, 4359], [2522, 4360], [2732, 4360], [2942, 4361], [3152, 4369], [3363, 4370], [3573, 4373], [3783, 4374], [3807, 4374], [3808, 4374], [3809, 4374]], [[1078, 4422], [1079, 4426], [1081, 4426], [1082, 4426], [1261, 4426], [1471, 4432], [1681, 4428], [1698, 4426], [1699, 4426], [1701, 4426], [1703, 4426], [1891, 4416], [2101, 4417], [2312, 4419], [2522, 4420], [2732, 4420], [2942, 4421], [3152, 4429], [3363, 4430], [3573, 4433], [3783, 4434], [3807, 4434], [3808, 4434], [3809, 4434]], [[1078, 4486], [1079, 4490], [1081, 4490], [1082, 4490], [1261, 4490], [1471, 4496], [1681, 4492], [1698, 4490], [1699, 4490], [1701, 4490], [1703, 4490], [1891, 4476], [2101, 4477], [2312, 4479], [2522, 4480], [2732, 4480], [2942, 4481], [3152, 4489], [3363, 4490], [3573, 4493], [3783, 4494], [3807, 4494], [3808, 4494], [3809, 4494]]], "bounding_box": {"nrows": 205, "ulx": 1078, "uly": 4169, "ncols": 2731}, "num_lines": 4}, {"staff_no": 13, "line_positions": [[[1052, 4446], [1053, 4446], [1261, 4449], [1471, 4455], [1681, 4451], [1891, 4450], [2101, 4446], [2312, 4448], [2522, 4449], [2732, 4448], [2942, 4450], [3152, 4453], [3363, 4456], [3573, 4459], [3783, 4460], [3790, 4459], [3791, 4459]], [[1052, 4506], [1053, 4506], [1261, 4509], [1471, 4515], [1681, 4511], [1891, 4510], [2101, 4506], [2312, 4508], [2522, 4509], [2732, 4508], [2942, 4510], [3152, 4513], [3363, 4516], [3573, 4519], [3783, 4520], [3790, 4519], [3791, 4519]], [[1052, 4566], [1053, 4566], [1261, 4569], [1471, 4575], [1681, 4571], [1891, 4570], [2101, 4566], [2312, 4568], [2522, 4569], [2732, 4568], [2942, 4570], [3152, 4573], [3363, 4576], [3573, 4579], [3783, 4580], [3790, 4579], [3791, 4579]], [[1052, 4626], [1053, 4632], [1261, 4632], [1471, 4633], [1681, 4632], [1891, 4628], [2101, 4629], [2312, 4632], [2522, 4633], [2732, 4631], [2942, 4632], [3152, 4636], [3363, 4640], [3573, 4642], [3783, 4643], [3790, 4643], [3791, 4643]], [[1052, 4687], [1053, 4693], [1261, 4693], [1471, 4699], [1681, 4687], [1891, 4689], [2101, 4691], [2312, 4693], [2522, 4695], [2732, 4692], [2942, 4695], [3152, 4698], [3363, 4701], [3573, 4704], [3783, 4704], [3790, 4705], [3791, 4705]], [[1052, 4749], [1053, 4755], [1261, 4755], [1471, 4761], [1681, 4749], [1891, 4751], [2101, 4752], [2312, 4756], [2522, 4756], [2732, 4754], [2942, 4756], [3152, 4760], [3363, 4763], [3573, 4766], [3783, 4766], [3790, 4766], [3791, 4766]], [[1052, 4811], [1053, 4817], [1261, 4817], [1471, 4823], [1681, 4811], [1891, 4813], [2101, 4814], [2312, 4818], [2522, 4818], [2732, 4816], [2942, 4818], [3152, 4822], [3363, 4825], [3573, 4828], [3783, 4828], [3790, 4828], [3791, 4828]], [[1052, 4873], [1053, 4879], [1261, 4879], [1471, 4885], [1681, 4873], [1891, 4875], [2101, 4876], [2312, 4880], [2522, 4880], [2732, 4878], [2942, 4880], [3152, 4884], [3363, 4887], [3573, 4890], [3783, 4890], [3790, 4890], [3791, 4890]]], "bounding_box": {"nrows": 200, "ulx": 1052, "uly": 4566, "ncols": 2739}, "num_lines": 4}, {"staff_no": 14, "line_positions": [[[1046, 4828], [1048, 4828], [1050, 4828], [1052, 4828], [1261, 4834], [1471, 4840], [1530, 4840], [1532, 4840], [1533, 4840], [1535, 4841], [1681, 4838], [1891, 4842], [2101, 4844], [2161, 4844], [2162, 4844], [2163, 4844]], [[1046, 4890], [1048, 4890], [1050, 4890], [1052, 4890], [1261, 4896], [1471, 4902], [1530, 4902], [1532, 4902], [1533, 4902], [1535, 4903], [1681, 4898], [1891, 4902], [2101, 4904], [2161, 4904], [2162, 4904], [2163, 4904]], [[1046, 4952], [1048, 4952], [1050, 4952], [1052, 4952], [1261, 4958], [1471, 4964], [1530, 4964], [1532, 4964], [1533, 4964], [1535, 4965], [1681, 4958], [1891, 4962], [2101, 4964], [2161, 4964], [2162, 4964], [2163, 4964]], [[1046, 5014], [1048, 5014], [1050, 5014], [1052, 5017], [1261, 5021], [1471, 5027], [1530, 5028], [1532, 5029], [1533, 5030], [1535, 5030], [1681, 5019], [1891, 5020], [2101, 5025], [2161, 5025], [2162, 5025], [2163, 5025]], [[1046, 5075], [1048, 5075], [1050, 5076], [1052, 5079], [1261, 5082], [1471, 5088], [1530, 5089], [1532, 5091], [1533, 5091], [1535, 5091], [1681, 5080], [1891, 5082], [2101, 5086], [2161, 5086], [2162, 5086], [2163, 5086]], [[1046, 5137], [1048, 5144], [1050, 5144], [1052, 5144], [1261, 5144], [1471, 5150], [1530, 5152], [1532, 5152], [1533, 5152], [1535, 5152], [1681, 5142], [1891, 5143], [2101, 5148], [2161, 5148], [2162, 5148], [2163, 5148]], [[1046, 5199], [1048, 5206], [1050, 5206], [1052, 5206], [1261, 5206], [1471, 5212], [1530, 5214], [1532, 5214], [1533, 5214], [1535, 5214], [1681, 5204], [1891, 5205], [2101, 5210], [2161, 5210], [2162, 5210], [2163, 5210]], [[1046, 5261], [1048, 5268], [1050, 5268], [1052, 5268], [1261, 5268], [1471, 5274], [1530, 5276], [1532, 5276], [1533, 5276], [1535, 5276], [1681, 5266], [1891, 5267], [2101, 5272], [2161, 5272], [2162, 5272], [2163, 5272]]], "bounding_box": {"nrows": 200, "ulx": 1046, "uly": 4952, "ncols": 1117}, "num_lines": 4}, {"staff_no": 15, "line_positions": [[[2404, 4841], [2405, 4841], [2406, 4841], [2522, 4841], [2732, 4840], [2942, 4843], [3152, 4848], [3363, 4851], [3573, 4852], [3783, 4851], [3795, 4851], [3796, 4851], [3797, 4851]], [[2404, 4903], [2405, 4903], [2406, 4903], [2522, 4903], [2732, 4902], [2942, 4905], [3152, 4910], [3363, 4913], [3573, 4914], [3783, 4913], [3795, 4913], [3796, 4913], [3797, 4913]], [[2404, 4965], [2405, 4965], [2406, 4965], [2522, 4965], [2732, 4964], [2942, 4967], [3152, 4972], [3363, 4975], [3573, 4976], [3783, 4975], [3795, 4975], [3796, 4975], [3797, 4975]], [[2404, 5027], [2405, 5027], [2406, 5028], [2522, 5029], [2732, 5030], [2942, 5031], [3152, 5036], [3363, 5038], [3573, 5037], [3783, 5038], [3795, 5038], [3796, 5038], [3797, 5038]], [[2404, 5089], [2405, 5089], [2406, 5089], [2522, 5090], [2732, 5089], [2942, 5092], [3152, 5097], [3363, 5099], [3573, 5101], [3783, 5099], [3795, 5099], [3796, 5099], [3797, 5099]], [[2404, 5151], [2405, 5151], [2406, 5151], [2522, 5151], [2732, 5151], [2942, 5154], [3152, 5159], [3363, 5161], [3573, 5162], [3783, 5163], [3795, 5163], [3796, 5163], [3797, 5163]], [[2404, 5213], [2405, 5213], [2406, 5213], [2522, 5213], [2732, 5213], [2942, 5216], [3152, 5221], [3363, 5223], [3573, 5224], [3783, 5225], [3795, 5225], [3796, 5225], [3797, 5225]], [[2404, 5275], [2405, 5275], [2406, 5275], [2522, 5275], [2732, 5275], [2942, 5278], [3152, 5283], [3363, 5285], [3573, 5286], [3783, 5287], [3795, 5287], [3796, 5287], [3797, 5287]]], "bounding_box": {"nrows": 199, "ulx": 2404, "uly": 4964, "ncols": 1393}, "num_lines": 4}]} \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_400.json b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_400.json new file mode 100755 index 000000000..50d6d3b26 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/pitches_salzinnes_400.json @@ -0,0 +1 @@ +{"glyphs": [{"glyph": {"bounding_box": {"nrows": 140, "ulx": 1316, "uly": 596, "ncols": 33}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1316", "clef": "None", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 70, "ulx": 1433, "uly": 599, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1433", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 1568, "uly": 674, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1568", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1679, "uly": 621, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1679", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1708, "uly": 583, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1708", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 1756, "uly": 581, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1756", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 1788, "uly": 609, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1788", "clef": "clef.c", "staff": "1"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 1882, "uly": 605, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1882", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1959, "uly": 632, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1959", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 68, "ulx": 2051, "uly": 665, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2051", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2195, "uly": 626, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2195", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2285, "uly": 648, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2285", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2313, "uly": 689, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2313", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2542, "uly": 702, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2542", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2752, "uly": 615, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2752", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2752, "uly": 683, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2752", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2867, "uly": 613, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2867", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2902, "uly": 680, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2902", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3058, "uly": 648, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3058", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3241, "uly": 676, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3241", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 3348, "uly": 708, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3348", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3419, "uly": 729, "ncols": 23}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "3419", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 33, "ulx": 3679, "uly": 649, "ncols": 20}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3679", "clef": "clef.c", "staff": "2"}}, {"glyph": {"bounding_box": {"nrows": 145, "ulx": 1023, "uly": 993, "ncols": 34}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1023", "clef": "None", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1176, "uly": 1157, "ncols": 49}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1176", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1390, "uly": 1101, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1390", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1599, "uly": 1042, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1599", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 1782, "uly": 1061, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1782", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 1956, "uly": 1090, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1956", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 2058, "uly": 1124, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2058", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 2151, "uly": 1088, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2151", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2370, "uly": 1084, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2370", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2511, "uly": 1020, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2511", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 2646, "uly": 1037, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2646", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2819, "uly": 1112, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2819", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 66, "ulx": 2918, "uly": 1114, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2918", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3057, "uly": 987, "ncols": 31}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3057", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3110, "uly": 987, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3110", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 3171, "uly": 962, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3171", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3239, "uly": 985, "ncols": 31}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3239", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3302, "uly": 1010, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3302", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 3379, "uly": 974, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3379", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3383, "uly": 1042, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3383", "clef": "clef.c", "staff": "3"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 1239, "uly": 1385, "ncols": 25}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1239", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 1239, "uly": 1437, "ncols": 28}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1239", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 1339, "uly": 1505, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1339", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1456, "uly": 1490, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1456", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1524, "uly": 1489, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1524", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 1545, "uly": 1369, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1545", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1574, "uly": 1336, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "1574", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1689, "uly": 1373, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1689", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1893, "uly": 1369, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1893", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2016, "uly": 1369, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2016", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2189, "uly": 1364, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2189", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2342, "uly": 1355, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2342", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2509, "uly": 1352, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2509", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 93, "ulx": 2578, "uly": 1348, "ncols": 99}, "state": "AUTOMATIC", "name": "neume.oblique2"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2578", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2661, "uly": 1350, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2661", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 2687, "uly": 1319, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "2687", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 2735, "uly": 1344, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2735", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 2778, "uly": 1372, "ncols": 101}, "state": "AUTOMATIC", "name": "neume.oblique2"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2778", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2982, "uly": 1418, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2982", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3142, "uly": 1379, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3142", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3291, "uly": 1345, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3291", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 3399, "uly": 1370, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3399", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3501, "uly": 1396, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3501", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3535, "uly": 1432, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3535", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3652, "uly": 1404, "ncols": 25}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3652", "clef": "clef.c", "staff": "4"}}, {"glyph": {"bounding_box": {"nrows": 167, "ulx": 1043, "uly": 1783, "ncols": 29}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1043", "clef": "None", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1167, "uly": 1818, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1167", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1198, "uly": 1776, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1198", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1376, "uly": 1878, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1376", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1547, "uly": 1886, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1547", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1635, "uly": 1873, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1635", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 92, "ulx": 1660, "uly": 1779, "ncols": 98}, "state": "AUTOMATIC", "name": "neume.oblique2"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1660", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1746, "uly": 1781, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1746", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1896, "uly": 1759, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1896", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 2023, "uly": 1770, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2023", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 2136, "uly": 1809, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2136", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2170, "uly": 1841, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2170", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2261, "uly": 1819, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2261", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2288, "uly": 1777, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2288", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 2327, "uly": 1799, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2327", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 2376, "uly": 1827, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2376", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 2432, "uly": 1887, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2432", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 68, "ulx": 2577, "uly": 1821, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2577", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2609, "uly": 1797, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2609", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 2765, "uly": 1757, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2765", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 2841, "uly": 1788, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2841", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2878, "uly": 1832, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2878", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2959, "uly": 1860, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2959", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3042, "uly": 1857, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3042", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 70, "ulx": 3171, "uly": 1738, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3171", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 3237, "uly": 1738, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3237", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 3307, "uly": 1757, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3307", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 3371, "uly": 1796, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3371", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3436, "uly": 1752, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3436", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 3464, "uly": 1720, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3464", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3541, "uly": 1754, "ncols": 31}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3541", "clef": "clef.c", "staff": "5"}}, {"glyph": {"bounding_box": {"nrows": 156, "ulx": 1258, "uly": 2152, "ncols": 29}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1258", "clef": "None", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 1343, "uly": 2264, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1343", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 1454, "uly": 2207, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1454", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 1585, "uly": 2223, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1585", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 1620, "uly": 2285, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1620", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 1781, "uly": 2229, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1781", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1912, "uly": 2198, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1912", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2016, "uly": 2259, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2016", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 2120, "uly": 2287, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2120", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2263, "uly": 2262, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2263", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 2391, "uly": 2283, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2391", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2618, "uly": 2322, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "2618", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 2771, "uly": 2273, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2771", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2913, "uly": 2312, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "2913", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3054, "uly": 2252, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3054", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 3184, "uly": 2194, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3184", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 3295, "uly": 2183, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3295", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3408, "uly": 2203, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3408", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 3445, "uly": 2266, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3445", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 3589, "uly": 2202, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3589", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3690, "uly": 2185, "ncols": 21}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3690", "clef": "clef.c", "staff": "6"}}, {"glyph": {"bounding_box": {"nrows": 150, "ulx": 1041, "uly": 2552, "ncols": 30}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1041", "clef": "None", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1128, "uly": 2595, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1128", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 1234, "uly": 2663, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1234", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 62, "ulx": 1266, "uly": 2622, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1266", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 1399, "uly": 2656, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1399", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1654, "uly": 2685, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1654", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 1788, "uly": 2688, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1788", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1980, "uly": 2601, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1980", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2060, "uly": 2597, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2060", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 2140, "uly": 2624, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2140", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2209, "uly": 2595, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2209", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 2277, "uly": 2656, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2277", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2339, "uly": 2688, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2339", "clef": "clef.c", "staff": "7"}}, {"glyph": {"bounding_box": {"nrows": 121, "ulx": 2859, "uly": 2539, "ncols": 48}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2859", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 73, "ulx": 2875, "uly": 2480, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "2875", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 81, "ulx": 3044, "uly": 2645, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3044", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 3182, "uly": 2708, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "3182", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3329, "uly": 2702, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "3329", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 3361, "uly": 2737, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "12", "clef_pos": "7", "note": "e", "octave": "2", "offset": "3361", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3479, "uly": 2650, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3479", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 3599, "uly": 2612, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3599", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3696, "uly": 2642, "ncols": 26}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3696", "clef": "clef.c", "staff": "8"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 1044, "uly": 2896, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "1044", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 68, "ulx": 1046, "uly": 2950, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1046", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 1140, "uly": 3056, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1140", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 73, "ulx": 1169, "uly": 3002, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1169", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1197, "uly": 2981, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1197", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 91, "ulx": 1320, "uly": 2983, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1320", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1570, "uly": 3046, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1570", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 1824, "uly": 2989, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1824", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1931, "uly": 2982, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1931", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1933, "uly": 2918, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1933", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2123, "uly": 2979, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2123", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 88, "ulx": 2284, "uly": 3000, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2284", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 138, "ulx": 2502, "uly": 2920, "ncols": 122}, "state": "AUTOMATIC", "name": "neume.oblique4"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2502", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 93, "ulx": 2651, "uly": 2995, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2651", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 2827, "uly": 2994, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2827", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 2858, "uly": 3064, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2858", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2932, "uly": 3042, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2932", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 2962, "uly": 3006, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2962", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2987, "uly": 2968, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2987", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3072, "uly": 2996, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3072", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 3184, "uly": 2995, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3184", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 3370, "uly": 2963, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3370", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 3404, "uly": 3038, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3404", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3586, "uly": 3001, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3586", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 90, "ulx": 3685, "uly": 3029, "ncols": 32}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3685", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3739, "uly": 3053, "ncols": 21}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3739", "clef": "clef.c", "staff": "9"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 1030, "uly": 3348, "ncols": 26}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1030", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 138, "ulx": 1064, "uly": 3325, "ncols": 38}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1064", "clef": "None", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 101, "ulx": 1235, "uly": 3368, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1235", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 1447, "uly": 3364, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1447", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 1564, "uly": 3421, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1564", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 1790, "uly": 3433, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1790", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 1953, "uly": 3361, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1953", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 2082, "uly": 3413, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2082", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 85, "ulx": 2257, "uly": 3384, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2257", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 2366, "uly": 3362, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2366", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 70, "ulx": 2476, "uly": 3310, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2476", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2508, "uly": 3293, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2508", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 2575, "uly": 3313, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2575", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2650, "uly": 3362, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2650", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 2803, "uly": 3362, "ncols": 45}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2803", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2951, "uly": 3361, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2951", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 76, "ulx": 2979, "uly": 3321, "ncols": 43}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2979", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 3053, "uly": 3352, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3053", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3089, "uly": 3381, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3089", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 3214, "uly": 3438, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3214", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 91, "ulx": 3392, "uly": 3372, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3392", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 73, "ulx": 3559, "uly": 3312, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3559", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 72, "ulx": 3593, "uly": 3374, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3593", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 56, "ulx": 3704, "uly": 3343, "ncols": 23}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3704", "clef": "clef.c", "staff": "10"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 1021, "uly": 3725, "ncols": 31}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1021", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 135, "ulx": 1053, "uly": 3704, "ncols": 37}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1053", "clef": "None", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 1160, "uly": 3756, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1160", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 1195, "uly": 3793, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1195", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 1363, "uly": 3818, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1363", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 86, "ulx": 1450, "uly": 3818, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1450", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1625, "uly": 3700, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1625", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1688, "uly": 3701, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1688", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 1757, "uly": 3717, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1757", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1820, "uly": 3755, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1820", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 66, "ulx": 1881, "uly": 3707, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1881", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 1910, "uly": 3689, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1910", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1976, "uly": 3722, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1976", "clef": "clef.c", "staff": "11"}}, {"glyph": {"bounding_box": {"nrows": 93, "ulx": 2532, "uly": 3705, "ncols": 27}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2532", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 84, "ulx": 2548, "uly": 3800, "ncols": 10}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2548", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 66, "ulx": 2571, "uly": 3705, "ncols": 29}, "state": "AUTOMATIC", "name": "neume.inclinatum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2571", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 92, "ulx": 2571, "uly": 3753, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2571", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 70, "ulx": 2696, "uly": 3810, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2696", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2945, "uly": 3810, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2945", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 43, "ulx": 3109, "uly": 3808, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3109", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 3142, "uly": 3844, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3142", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 3295, "uly": 3749, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3295", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 84, "ulx": 3402, "uly": 3705, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3402", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 3552, "uly": 3749, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3552", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3632, "uly": 3712, "ncols": 29}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3632", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 3653, "uly": 3675, "ncols": 32}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3653", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 88, "ulx": 3713, "uly": 3673, "ncols": 31}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3713", "clef": "clef.c", "staff": "12"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 1040, "uly": 4117, "ncols": 25}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1040", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 73, "ulx": 1070, "uly": 4100, "ncols": 25}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1070", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 71, "ulx": 1071, "uly": 4160, "ncols": 25}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "1071", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1183, "uly": 4096, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1183", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 1302, "uly": 4048, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "4", "clef_pos": "7", "note": "f", "octave": "3", "offset": "1302", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 1414, "uly": 4077, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1414", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 65, "ulx": 1579, "uly": 4110, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1579", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 44, "ulx": 1803, "uly": 4109, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1803", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1905, "uly": 4112, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1905", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 2060, "uly": 4076, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2060", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2183, "uly": 4132, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2183", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2215, "uly": 4173, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2215", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2332, "uly": 4207, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2332", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2539, "uly": 4109, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2539", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 2655, "uly": 4166, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2655", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 88, "ulx": 2764, "uly": 4097, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "2764", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2900, "uly": 4081, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "2900", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 76, "ulx": 3016, "uly": 4101, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3016", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 3092, "uly": 4147, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3092", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 3123, "uly": 4111, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3123", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3252, "uly": 4160, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3252", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 3288, "uly": 4232, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3288", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 3437, "uly": 4168, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3437", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 3464, "uly": 4134, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3464", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 93, "ulx": 3614, "uly": 4187, "ncols": 33}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3614", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 3673, "uly": 4191, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3673", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 64, "ulx": 3744, "uly": 4060, "ncols": 34}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3744", "clef": "clef.c", "staff": "13"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1039, "uly": 4499, "ncols": 27}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1039", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 124, "ulx": 1073, "uly": 4481, "ncols": 31}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1073", "clef": "None", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 86, "ulx": 1156, "uly": 4465, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1156", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 1218, "uly": 4467, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1218", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1286, "uly": 4490, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1286", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 1357, "uly": 4516, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1357", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 1426, "uly": 4494, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1426", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 1456, "uly": 4459, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "1456", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 1522, "uly": 4492, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "1522", "clef": "clef.c", "staff": "14"}}, {"glyph": {"bounding_box": {"nrows": 163, "ulx": 2048, "uly": 4468, "ncols": 35}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "2048", "clef": "None", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 69, "ulx": 2139, "uly": 4599, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2139", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2302, "uly": 4584, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2302", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2466, "uly": 4647, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "2466", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 46, "ulx": 2498, "uly": 4612, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2498", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 2665, "uly": 4615, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2665", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 2759, "uly": 4615, "ncols": 41}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2759", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 51, "ulx": 2893, "uly": 4587, "ncols": 42}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2893", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3024, "uly": 4520, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3024", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3184, "uly": 4550, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "3184", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 3359, "uly": 4519, "ncols": 44}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3359", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 3471, "uly": 4582, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3471", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 3635, "uly": 4602, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3635", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 3716, "uly": 4560, "ncols": 33}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3716", "clef": "clef.c", "staff": "15"}}, {"glyph": {"bounding_box": {"nrows": 136, "ulx": 1065, "uly": 4857, "ncols": 30}, "state": "HEURISTIC", "name": "clef.c"}, "pitch": {"strt_pos": "3", "clef_pos": "None", "note": "None", "octave": "None", "offset": "1065", "clef": "None", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 1165, "uly": 4974, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1165", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 1187, "uly": 4906, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "1187", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 45, "ulx": 1279, "uly": 4960, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1279", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 49, "ulx": 1311, "uly": 5000, "ncols": 34}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1311", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 84, "ulx": 1417, "uly": 4968, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1417", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 58, "ulx": 1614, "uly": 4994, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1614", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1646, "uly": 5035, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "11", "clef_pos": "7", "note": "f", "octave": "2", "offset": "1646", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 54, "ulx": 1773, "uly": 4998, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "1773", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 1803, "uly": 4965, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1803", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 67, "ulx": 1943, "uly": 4972, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "1943", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2144, "uly": 5008, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2144", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 55, "ulx": 2250, "uly": 5012, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2250", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 52, "ulx": 2403, "uly": 4919, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2403", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 50, "ulx": 2470, "uly": 4917, "ncols": 40}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2470", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 57, "ulx": 2533, "uly": 4942, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "8", "clef_pos": "7", "note": "b", "octave": "2", "offset": "2533", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 53, "ulx": 2592, "uly": 4915, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "2592", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 2677, "uly": 4972, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "2677", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 2738, "uly": 5002, "ncols": 35}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "2738", "clef": "clef.c", "staff": "16"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 3253, "uly": 4887, "ncols": 25}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3253", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 144, "ulx": 3261, "uly": 4866, "ncols": 142}, "state": "HEURISTIC", "name": "neume.oblique4"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3261", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3329, "uly": 4970, "ncols": 39}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "9", "clef_pos": "7", "note": "a", "octave": "2", "offset": "3329", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 60, "ulx": 3360, "uly": 5011, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "10", "clef_pos": "7", "note": "g", "octave": "2", "offset": "3360", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 63, "ulx": 3421, "uly": 4917, "ncols": 37}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3421", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 77, "ulx": 3499, "uly": 4870, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3499", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 59, "ulx": 3610, "uly": 4902, "ncols": 38}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "7", "clef_pos": "7", "note": "c", "octave": "3", "offset": "3610", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 47, "ulx": 3637, "uly": 4875, "ncols": 29}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "6", "clef_pos": "7", "note": "d", "octave": "3", "offset": "3637", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 48, "ulx": 3658, "uly": 4831, "ncols": 36}, "state": "AUTOMATIC", "name": "neume.punctum"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3658", "clef": "clef.c", "staff": "17"}}, {"glyph": {"bounding_box": {"nrows": 61, "ulx": 3720, "uly": 4824, "ncols": 35}, "state": "AUTOMATIC", "name": "custos"}, "pitch": {"strt_pos": "5", "clef_pos": "7", "note": "e", "octave": "3", "offset": "3720", "clef": "clef.c", "staff": "17"}}], "page": {"bounding_box": {"nrows": 6930, "ulx": 0, "uly": 0, "ncols": 4414}, "resolution": 0.0}, "staves": [{"staff_no": 1, "line_positions": [[[1298, 484], [1471, 484], [1681, 484], [1707, 484]], [[1298, 544], [1471, 544], [1681, 544], [1707, 544]], [[1298, 604], [1471, 604], [1681, 604], [1707, 604]], [[1298, 664], [1471, 665], [1681, 665], [1707, 665]], [[1298, 724], [1471, 724], [1681, 724], [1707, 723]], [[1298, 783], [1471, 783], [1681, 782], [1707, 782]], [[1298, 843], [1471, 843], [1681, 842], [1707, 842]], [[1298, 903], [1471, 903], [1681, 902], [1707, 902]]], "bounding_box": {"nrows": 179, "ulx": 1298, "uly": 604, "ncols": 409}, "num_lines": 4}, {"staff_no": 2, "line_positions": [[[1940, 453], [1941, 450], [1942, 450], [2101, 450], [2312, 450], [2522, 449], [2732, 447], [2942, 447], [3152, 450], [3363, 448], [3459, 448], [3460, 448]], [[1940, 517], [1941, 514], [1942, 514], [2101, 514], [2312, 514], [2522, 513], [2732, 511], [2942, 511], [3152, 514], [3363, 512], [3459, 512], [3460, 512]], [[1940, 581], [1941, 578], [1942, 578], [2101, 578], [2312, 578], [2522, 577], [2732, 575], [2942, 575], [3152, 578], [3363, 576], [3459, 576], [3460, 576]], [[1940, 645], [1941, 645], [1942, 643], [2101, 642], [2312, 641], [2522, 640], [2732, 638], [2942, 639], [3152, 641], [3363, 639], [3459, 639], [3460, 639]], [[1940, 712], [1941, 712], [1942, 711], [2101, 710], [2312, 708], [2522, 702], [2732, 700], [2942, 701], [3152, 702], [3363, 700], [3459, 700], [3460, 700]], [[1940, 778], [1941, 778], [1942, 778], [2101, 777], [2312, 769], [2522, 764], [2732, 762], [2942, 763], [3152, 764], [3363, 763], [3459, 762], [3460, 762]], [[1940, 844], [1941, 844], [1942, 844], [2101, 843], [2312, 835], [2522, 830], [2732, 828], [2942, 829], [3152, 830], [3363, 829], [3459, 828], [3460, 828]], [[1940, 910], [1941, 910], [1942, 910], [2101, 909], [2312, 901], [2522, 896], [2732, 894], [2942, 895], [3152, 896], [3363, 895], [3459, 894], [3460, 894]]], "bounding_box": {"nrows": 203, "ulx": 1940, "uly": 575, "ncols": 1520}, "num_lines": 4}, {"staff_no": 3, "line_positions": [[[1031, 872], [1032, 872], [1050, 872], [1261, 871], [1471, 873], [1681, 879], [1891, 876], [2101, 875], [2118, 875], [2119, 875], [2312, 859], [2522, 855], [2732, 854], [2942, 855], [3152, 855], [3363, 854], [3533, 852]], [[1031, 934], [1032, 934], [1050, 934], [1261, 933], [1471, 935], [1681, 941], [1891, 938], [2101, 937], [2118, 937], [2119, 937], [2312, 921], [2522, 917], [2732, 916], [2942, 917], [3152, 917], [3363, 916], [3533, 914]], [[1031, 996], [1032, 996], [1050, 996], [1261, 995], [1471, 997], [1681, 1003], [1891, 1000], [2101, 999], [2118, 999], [2119, 999], [2312, 983], [2522, 979], [2732, 978], [2942, 979], [3152, 979], [3363, 978], [3533, 976]], [[1031, 1058], [1032, 1058], [1050, 1058], [1261, 1055], [1471, 1059], [1681, 1064], [1891, 1061], [2101, 1060], [2118, 1060], [2119, 1060], [2312, 1045], [2522, 1043], [2732, 1042], [2942, 1042], [3152, 1041], [3363, 1040], [3533, 1037]], [[1031, 1120], [1032, 1120], [1050, 1120], [1261, 1116], [1471, 1116], [1681, 1124], [1891, 1122], [2101, 1122], [2118, 1122], [2119, 1122], [2312, 1106], [2522, 1103], [2732, 1102], [2942, 1104], [3152, 1103], [3363, 1102], [3533, 1101]], [[1031, 1182], [1032, 1182], [1050, 1182], [1261, 1178], [1471, 1180], [1681, 1185], [1891, 1183], [2101, 1182], [2118, 1182], [2119, 1182], [2312, 1167], [2522, 1165], [2732, 1165], [2942, 1166], [3152, 1164], [3363, 1163], [3533, 1162]], [[1031, 1244], [1032, 1244], [1050, 1244], [1261, 1240], [1471, 1242], [1681, 1247], [1891, 1245], [2101, 1244], [2118, 1244], [2119, 1244], [2312, 1227], [2522, 1225], [2732, 1225], [2942, 1226], [3152, 1224], [3363, 1223], [3533, 1222]], [[1031, 1306], [1032, 1306], [1050, 1306], [1261, 1302], [1471, 1304], [1681, 1309], [1891, 1307], [2101, 1306], [2118, 1306], [2119, 1306], [2312, 1287], [2522, 1285], [2732, 1285], [2942, 1286], [3152, 1284], [3363, 1283], [3533, 1282]]], "bounding_box": {"nrows": 209, "ulx": 1031, "uly": 976, "ncols": 2502}, "num_lines": 4}, {"staff_no": 4, "line_positions": [[[1244, 1257], [1245, 1258], [1261, 1258], [1471, 1258], [1681, 1264], [1891, 1265], [2101, 1257], [2312, 1256], [2522, 1252], [2732, 1248], [2942, 1246], [3152, 1248], [3363, 1243], [3573, 1240], [3687, 1240], [3688, 1240]], [[1244, 1321], [1245, 1322], [1261, 1322], [1471, 1322], [1681, 1328], [1891, 1329], [2101, 1321], [2312, 1320], [2522, 1316], [2732, 1312], [2942, 1310], [3152, 1312], [3363, 1307], [3573, 1304], [3687, 1304], [3688, 1304]], [[1244, 1385], [1245, 1386], [1261, 1386], [1471, 1386], [1681, 1392], [1891, 1393], [2101, 1385], [2312, 1384], [2522, 1380], [2732, 1376], [2942, 1374], [3152, 1376], [3363, 1371], [3573, 1368], [3687, 1368], [3688, 1368]], [[1244, 1448], [1245, 1448], [1261, 1448], [1471, 1448], [1681, 1453], [1891, 1454], [2101, 1448], [2312, 1441], [2522, 1436], [2732, 1436], [2942, 1436], [3152, 1438], [3363, 1433], [3573, 1431], [3687, 1430], [3688, 1430]], [[1244, 1507], [1245, 1507], [1261, 1508], [1471, 1508], [1681, 1514], [1891, 1515], [2101, 1509], [2312, 1503], [2522, 1497], [2732, 1495], [2942, 1497], [3152, 1499], [3363, 1495], [3573, 1492], [3687, 1492], [3688, 1492]], [[1244, 1570], [1245, 1570], [1261, 1570], [1471, 1569], [1681, 1574], [1891, 1576], [2101, 1575], [2312, 1565], [2522, 1559], [2732, 1556], [2942, 1558], [3152, 1560], [3363, 1556], [3573, 1554], [3687, 1553], [3688, 1553]], [[1244, 1634], [1245, 1634], [1261, 1634], [1471, 1633], [1681, 1638], [1891, 1640], [2101, 1639], [2312, 1629], [2522, 1623], [2732, 1620], [2942, 1622], [3152, 1624], [3363, 1620], [3573, 1618], [3687, 1617], [3688, 1617]], [[1244, 1698], [1245, 1698], [1261, 1698], [1471, 1697], [1681, 1702], [1891, 1704], [2101, 1703], [2312, 1693], [2522, 1687], [2732, 1684], [2942, 1686], [3152, 1688], [3363, 1684], [3573, 1682], [3687, 1681], [3688, 1681]]], "bounding_box": {"nrows": 208, "ulx": 1244, "uly": 1368, "ncols": 2444}, "num_lines": 4}, {"staff_no": 5, "line_positions": [[[1035, 1653], [1036, 1653], [1050, 1653], [1261, 1647], [1471, 1646], [1681, 1650], [1891, 1651], [2101, 1645], [2312, 1642], [2522, 1635], [2732, 1631], [2942, 1631], [3152, 1631], [3363, 1628], [3573, 1625], [3602, 1625], [3603, 1625]], [[1035, 1717], [1036, 1717], [1050, 1717], [1261, 1711], [1471, 1710], [1681, 1714], [1891, 1715], [2101, 1709], [2312, 1706], [2522, 1699], [2732, 1695], [2942, 1695], [3152, 1695], [3363, 1692], [3573, 1689], [3602, 1689], [3603, 1689]], [[1035, 1781], [1036, 1781], [1050, 1781], [1261, 1775], [1471, 1774], [1681, 1778], [1891, 1779], [2101, 1773], [2312, 1770], [2522, 1763], [2732, 1759], [2942, 1759], [3152, 1759], [3363, 1756], [3573, 1753], [3602, 1753], [3603, 1753]], [[1035, 1844], [1036, 1844], [1050, 1844], [1261, 1837], [1471, 1837], [1681, 1839], [1891, 1841], [2101, 1840], [2312, 1832], [2522, 1826], [2732, 1822], [2942, 1821], [3152, 1822], [3363, 1818], [3573, 1815], [3602, 1814], [3603, 1814]], [[1035, 1905], [1036, 1905], [1050, 1905], [1261, 1898], [1471, 1898], [1681, 1900], [1891, 1902], [2101, 1897], [2312, 1893], [2522, 1888], [2732, 1884], [2942, 1882], [3152, 1883], [3363, 1879], [3573, 1876], [3602, 1876], [3603, 1876]], [[1035, 1965], [1036, 1965], [1050, 1966], [1261, 1960], [1471, 1960], [1681, 1961], [1891, 1963], [2101, 1958], [2312, 1954], [2522, 1948], [2732, 1945], [2942, 1944], [3152, 1944], [3363, 1940], [3573, 1937], [3602, 1937], [3603, 1937]], [[1035, 2025], [1036, 2025], [1050, 2026], [1261, 2020], [1471, 2020], [1681, 2021], [1891, 2023], [2101, 2018], [2312, 2014], [2522, 2008], [2732, 2005], [2942, 2004], [3152, 2004], [3363, 2000], [3573, 1997], [3602, 1997], [3603, 1997]], [[1035, 2085], [1036, 2085], [1050, 2086], [1261, 2080], [1471, 2080], [1681, 2081], [1891, 2083], [2101, 2078], [2312, 2074], [2522, 2068], [2732, 2065], [2942, 2064], [3152, 2064], [3363, 2060], [3573, 2057], [3602, 2057], [3603, 2057]]], "bounding_box": {"nrows": 213, "ulx": 1035, "uly": 1753, "ncols": 2568}, "num_lines": 4}, {"staff_no": 6, "line_positions": [[[1268, 2031], [1269, 2031], [1471, 2031], [1681, 2034], [1891, 2034], [2101, 2031], [2312, 2026], [2522, 2023], [2732, 2020], [2942, 2019], [3152, 2018], [3363, 2013], [3573, 2010], [3732, 2007], [3733, 2007], [3734, 2007]], [[1268, 2097], [1269, 2097], [1471, 2097], [1681, 2100], [1891, 2100], [2101, 2097], [2312, 2092], [2522, 2089], [2732, 2086], [2942, 2085], [3152, 2084], [3363, 2079], [3573, 2076], [3732, 2073], [3733, 2073], [3734, 2073]], [[1268, 2163], [1269, 2163], [1471, 2163], [1681, 2166], [1891, 2166], [2101, 2163], [2312, 2158], [2522, 2155], [2732, 2152], [2942, 2151], [3152, 2150], [3363, 2145], [3573, 2142], [3732, 2139], [3733, 2139], [3734, 2139]], [[1268, 2228], [1269, 2229], [1471, 2229], [1681, 2229], [1891, 2227], [2101, 2225], [2312, 2220], [2522, 2217], [2732, 2215], [2942, 2214], [3152, 2212], [3363, 2207], [3573, 2205], [3732, 2204], [3733, 2204], [3734, 2204]], [[1268, 2284], [1269, 2284], [1471, 2286], [1681, 2289], [1891, 2287], [2101, 2285], [2312, 2281], [2522, 2279], [2732, 2276], [2942, 2275], [3152, 2273], [3363, 2268], [3573, 2266], [3732, 2264], [3733, 2263], [3734, 2263]], [[1268, 2346], [1269, 2346], [1471, 2347], [1681, 2347], [1891, 2347], [2101, 2345], [2312, 2342], [2522, 2340], [2732, 2338], [2942, 2338], [3152, 2338], [3363, 2329], [3573, 2327], [3732, 2326], [3733, 2325], [3734, 2325]], [[1268, 2408], [1269, 2408], [1471, 2409], [1681, 2409], [1891, 2409], [2101, 2407], [2312, 2404], [2522, 2402], [2732, 2400], [2942, 2400], [3152, 2400], [3363, 2391], [3573, 2389], [3732, 2388], [3733, 2387], [3734, 2387]], [[1268, 2470], [1269, 2470], [1471, 2471], [1681, 2471], [1891, 2471], [2101, 2469], [2312, 2466], [2522, 2464], [2732, 2462], [2942, 2462], [3152, 2462], [3363, 2453], [3573, 2451], [3732, 2450], [3733, 2449], [3734, 2449]]], "bounding_box": {"nrows": 208, "ulx": 1268, "uly": 2139, "ncols": 2466}, "num_lines": 4}, {"staff_no": 7, "line_positions": [[[1046, 2436], [1047, 2436], [1050, 2436], [1261, 2436], [1471, 2437], [1681, 2437], [1891, 2436], [2101, 2435], [2312, 2432], [2426, 2432]], [[1046, 2498], [1047, 2498], [1050, 2498], [1261, 2498], [1471, 2499], [1681, 2499], [1891, 2498], [2101, 2497], [2312, 2494], [2426, 2494]], [[1046, 2560], [1047, 2560], [1050, 2560], [1261, 2560], [1471, 2561], [1681, 2561], [1891, 2560], [2101, 2559], [2312, 2556], [2426, 2556]], [[1046, 2621], [1047, 2621], [1050, 2621], [1261, 2621], [1471, 2622], [1681, 2622], [1891, 2621], [2101, 2621], [2312, 2617], [2426, 2616]], [[1046, 2681], [1047, 2681], [1050, 2681], [1261, 2681], [1471, 2681], [1681, 2683], [1891, 2682], [2101, 2681], [2312, 2678], [2426, 2677]], [[1046, 2744], [1047, 2744], [1050, 2744], [1261, 2741], [1471, 2741], [1681, 2742], [1891, 2742], [2101, 2741], [2312, 2738], [2426, 2738]], [[1046, 2808], [1047, 2808], [1050, 2808], [1261, 2805], [1471, 2805], [1681, 2806], [1891, 2806], [2101, 2805], [2312, 2802], [2426, 2802]], [[1046, 2872], [1047, 2872], [1050, 2872], [1261, 2869], [1471, 2869], [1681, 2870], [1891, 2870], [2101, 2869], [2312, 2866], [2426, 2866]]], "bounding_box": {"nrows": 188, "ulx": 1046, "uly": 2556, "ncols": 1380}, "num_lines": 4}, {"staff_no": 8, "line_positions": [[[2865, 2424], [2942, 2424], [3152, 2423], [3363, 2421], [3573, 2419], [3750, 2417]], [[2865, 2486], [2942, 2486], [3152, 2485], [3363, 2483], [3573, 2481], [3750, 2479]], [[2865, 2548], [2942, 2548], [3152, 2547], [3363, 2545], [3573, 2543], [3750, 2541]], [[2865, 2609], [2942, 2610], [3152, 2609], [3363, 2608], [3573, 2606], [3750, 2603]], [[2865, 2670], [2942, 2670], [3152, 2670], [3363, 2669], [3573, 2667], [3750, 2666]], [[2865, 2731], [2942, 2731], [3152, 2731], [3363, 2730], [3573, 2728], [3750, 2726]], [[2865, 2793], [2942, 2793], [3152, 2793], [3363, 2792], [3573, 2790], [3750, 2788]], [[2865, 2855], [2942, 2855], [3152, 2855], [3363, 2854], [3573, 2852], [3750, 2850]]], "bounding_box": {"nrows": 190, "ulx": 2865, "uly": 2541, "ncols": 885}, "num_lines": 4}, {"staff_no": 9, "line_positions": [[[1043, 2825], [1044, 2826], [1045, 2826], [1050, 2826], [1261, 2826], [1471, 2824], [1681, 2823], [1891, 2820], [2101, 2819], [2312, 2816], [2522, 2814], [2732, 2811], [2942, 2810], [3152, 2808], [3363, 2806], [3573, 2805], [3746, 2803], [3747, 2803], [3748, 2803]], [[1043, 2887], [1044, 2888], [1045, 2888], [1050, 2888], [1261, 2888], [1471, 2886], [1681, 2885], [1891, 2882], [2101, 2881], [2312, 2878], [2522, 2876], [2732, 2873], [2942, 2872], [3152, 2870], [3363, 2868], [3573, 2867], [3746, 2865], [3747, 2865], [3748, 2865]], [[1043, 2949], [1044, 2950], [1045, 2950], [1050, 2950], [1261, 2950], [1471, 2948], [1681, 2947], [1891, 2944], [2101, 2943], [2312, 2940], [2522, 2938], [2732, 2935], [2942, 2934], [3152, 2932], [3363, 2930], [3573, 2929], [3746, 2927], [3747, 2927], [3748, 2927]], [[1043, 3011], [1044, 3011], [1045, 3011], [1050, 3012], [1261, 3011], [1471, 3009], [1681, 3007], [1891, 3006], [2101, 3004], [2312, 3003], [2522, 3001], [2732, 2997], [2942, 2996], [3152, 2994], [3363, 2992], [3573, 2991], [3746, 2990], [3747, 2989], [3748, 2989]], [[1043, 3072], [1044, 3072], [1045, 3072], [1050, 3073], [1261, 3071], [1471, 3068], [1681, 3068], [1891, 3066], [2101, 3065], [2312, 3063], [2522, 3060], [2732, 3059], [2942, 3059], [3152, 3055], [3363, 3053], [3573, 3053], [3746, 3052], [3747, 3052], [3748, 3052]], [[1043, 3130], [1044, 3130], [1045, 3130], [1050, 3130], [1261, 3130], [1471, 3128], [1681, 3127], [1891, 3126], [2101, 3125], [2312, 3124], [2522, 3121], [2732, 3120], [2942, 3118], [3152, 3116], [3363, 3114], [3573, 3114], [3746, 3113], [3747, 3112], [3748, 3112]], [[1043, 3188], [1044, 3188], [1045, 3188], [1050, 3188], [1261, 3188], [1471, 3186], [1681, 3185], [1891, 3184], [2101, 3183], [2312, 3182], [2522, 3179], [2732, 3178], [2942, 3176], [3152, 3174], [3363, 3172], [3573, 3172], [3746, 3171], [3747, 3170], [3748, 3170]], [[1043, 3246], [1044, 3246], [1045, 3246], [1050, 3246], [1261, 3246], [1471, 3244], [1681, 3243], [1891, 3242], [2101, 3241], [2312, 3240], [2522, 3237], [2732, 3236], [2942, 3234], [3152, 3232], [3363, 3230], [3573, 3230], [3746, 3229], [3747, 3228], [3748, 3228]]], "bounding_box": {"nrows": 203, "ulx": 1043, "uly": 2927, "ncols": 2705}, "num_lines": 4}, {"staff_no": 10, "line_positions": [[[1038, 3213], [1039, 3213], [1050, 3213], [1261, 3210], [1471, 3208], [1681, 3207], [1891, 3205], [2101, 3203], [2312, 3202], [2522, 3200], [2732, 3199], [2942, 3199], [3152, 3197], [3363, 3196], [3573, 3195], [3752, 3193], [3753, 3193]], [[1038, 3273], [1039, 3273], [1050, 3273], [1261, 3270], [1471, 3268], [1681, 3267], [1891, 3265], [2101, 3263], [2312, 3262], [2522, 3260], [2732, 3259], [2942, 3259], [3152, 3257], [3363, 3256], [3573, 3255], [3752, 3253], [3753, 3253]], [[1038, 3333], [1039, 3333], [1050, 3333], [1261, 3330], [1471, 3328], [1681, 3327], [1891, 3325], [2101, 3323], [2312, 3322], [2522, 3320], [2732, 3319], [2942, 3319], [3152, 3317], [3363, 3316], [3573, 3315], [3752, 3313], [3753, 3313]], [[1038, 3392], [1039, 3392], [1050, 3392], [1261, 3392], [1471, 3392], [1681, 3389], [1891, 3386], [2101, 3385], [2312, 3384], [2522, 3384], [2732, 3382], [2942, 3381], [3152, 3380], [3363, 3378], [3573, 3377], [3752, 3376], [3753, 3376]], [[1038, 3452], [1039, 3452], [1050, 3452], [1261, 3452], [1471, 3451], [1681, 3450], [1891, 3448], [2101, 3447], [2312, 3445], [2522, 3445], [2732, 3443], [2942, 3442], [3152, 3441], [3363, 3439], [3573, 3439], [3752, 3437], [3753, 3437]], [[1038, 3514], [1039, 3514], [1050, 3514], [1261, 3514], [1471, 3512], [1681, 3512], [1891, 3509], [2101, 3507], [2312, 3506], [2522, 3506], [2732, 3505], [2942, 3504], [3152, 3503], [3363, 3501], [3573, 3500], [3752, 3499], [3753, 3498]], [[1038, 3576], [1039, 3576], [1050, 3576], [1261, 3576], [1471, 3574], [1681, 3574], [1891, 3571], [2101, 3569], [2312, 3568], [2522, 3568], [2732, 3567], [2942, 3566], [3152, 3565], [3363, 3563], [3573, 3562], [3752, 3561], [3753, 3560]], [[1038, 3638], [1039, 3638], [1050, 3638], [1261, 3638], [1471, 3636], [1681, 3636], [1891, 3633], [2101, 3631], [2312, 3630], [2522, 3630], [2732, 3629], [2942, 3628], [3152, 3627], [3363, 3625], [3573, 3624], [3752, 3623], [3753, 3622]]], "bounding_box": {"nrows": 201, "ulx": 1038, "uly": 3313, "ncols": 2715}, "num_lines": 4}, {"staff_no": 11, "line_positions": [[[1031, 3590], [1050, 3590], [1261, 3592], [1471, 3592], [1681, 3592], [1891, 3590], [2050, 3590], [2051, 3590]], [[1031, 3652], [1050, 3652], [1261, 3654], [1471, 3654], [1681, 3654], [1891, 3652], [2050, 3652], [2051, 3652]], [[1031, 3714], [1050, 3714], [1261, 3716], [1471, 3716], [1681, 3716], [1891, 3714], [2050, 3714], [2051, 3714]], [[1031, 3775], [1050, 3776], [1261, 3778], [1471, 3779], [1681, 3779], [1891, 3779], [2050, 3779], [2051, 3779]], [[1031, 3836], [1050, 3837], [1261, 3839], [1471, 3840], [1681, 3840], [1891, 3840], [2050, 3840], [2051, 3840]], [[1031, 3898], [1050, 3898], [1261, 3900], [1471, 3901], [1681, 3901], [1891, 3901], [2050, 3900], [2051, 3900]], [[1031, 3960], [1050, 3960], [1261, 3962], [1471, 3963], [1681, 3963], [1891, 3963], [2050, 3962], [2051, 3962]], [[1031, 4022], [1050, 4022], [1261, 4024], [1471, 4025], [1681, 4025], [1891, 4025], [2050, 4024], [2051, 4024]]], "bounding_box": {"nrows": 187, "ulx": 1031, "uly": 3714, "ncols": 1020}, "num_lines": 4}, {"staff_no": 12, "line_positions": [[[2526, 3586], [2732, 3586], [2942, 3586], [3152, 3586], [3363, 3585], [3573, 3583], [3746, 3582], [3747, 3582]], [[2526, 3648], [2732, 3648], [2942, 3648], [3152, 3648], [3363, 3647], [3573, 3645], [3746, 3644], [3747, 3644]], [[2526, 3710], [2732, 3710], [2942, 3710], [3152, 3710], [3363, 3709], [3573, 3707], [3746, 3706], [3747, 3706]], [[2526, 3771], [2732, 3773], [2942, 3773], [3152, 3773], [3363, 3771], [3573, 3769], [3746, 3768], [3747, 3768]], [[2526, 3833], [2732, 3833], [2942, 3833], [3152, 3834], [3363, 3832], [3573, 3831], [3746, 3830], [3747, 3829]], [[2526, 3895], [2732, 3895], [2942, 3895], [3152, 3895], [3363, 3894], [3573, 3892], [3746, 3891], [3747, 3890]], [[2526, 3957], [2732, 3957], [2942, 3957], [3152, 3957], [3363, 3956], [3573, 3954], [3746, 3953], [3747, 3952]], [[2526, 4019], [2732, 4019], [2942, 4019], [3152, 4019], [3363, 4018], [3573, 4016], [3746, 4015], [3747, 4014]]], "bounding_box": {"nrows": 189, "ulx": 2526, "uly": 3706, "ncols": 1221}, "num_lines": 4}, {"staff_no": 13, "line_positions": [[[1066, 3982], [1067, 3982], [1261, 3982], [1471, 3981], [1681, 3979], [1891, 3973], [2101, 3973], [2312, 3974], [2522, 3973], [2732, 3972], [2942, 3972], [3152, 3972], [3363, 3972], [3573, 3968], [3745, 3966], [3746, 3966]], [[1066, 4046], [1067, 4046], [1261, 4046], [1471, 4045], [1681, 4043], [1891, 4037], [2101, 4037], [2312, 4038], [2522, 4037], [2732, 4036], [2942, 4036], [3152, 4036], [3363, 4036], [3573, 4032], [3745, 4030], [3746, 4030]], [[1066, 4110], [1067, 4110], [1261, 4110], [1471, 4109], [1681, 4107], [1891, 4101], [2101, 4101], [2312, 4102], [2522, 4101], [2732, 4100], [2942, 4100], [3152, 4100], [3363, 4100], [3573, 4096], [3745, 4094], [3746, 4094]], [[1066, 4173], [1067, 4173], [1261, 4173], [1471, 4171], [1681, 4169], [1891, 4164], [2101, 4163], [2312, 4165], [2522, 4164], [2732, 4163], [2942, 4162], [3152, 4162], [3363, 4162], [3573, 4158], [3745, 4157], [3746, 4156]], [[1066, 4233], [1067, 4233], [1261, 4233], [1471, 4232], [1681, 4230], [1891, 4224], [2101, 4224], [2312, 4227], [2522, 4225], [2732, 4224], [2942, 4223], [3152, 4223], [3363, 4223], [3573, 4220], [3745, 4219], [3746, 4219]], [[1066, 4293], [1067, 4293], [1261, 4293], [1471, 4292], [1681, 4291], [1891, 4285], [2101, 4286], [2312, 4288], [2522, 4287], [2732, 4286], [2942, 4284], [3152, 4285], [3363, 4285], [3573, 4282], [3745, 4280], [3746, 4279]], [[1066, 4353], [1067, 4353], [1261, 4353], [1471, 4352], [1681, 4351], [1891, 4345], [2101, 4346], [2312, 4348], [2522, 4347], [2732, 4346], [2942, 4344], [3152, 4345], [3363, 4345], [3573, 4342], [3745, 4340], [3746, 4339]], [[1066, 4413], [1067, 4413], [1261, 4413], [1471, 4412], [1681, 4411], [1891, 4405], [2101, 4406], [2312, 4408], [2522, 4407], [2732, 4406], [2942, 4404], [3152, 4405], [3363, 4405], [3573, 4402], [3745, 4400], [3746, 4399]]], "bounding_box": {"nrows": 199, "ulx": 1066, "uly": 4094, "ncols": 2680}, "num_lines": 4}, {"staff_no": 14, "line_positions": [[[1060, 4357], [1061, 4357], [1261, 4358], [1471, 4358], [1614, 4358], [1615, 4358]], [[1060, 4419], [1061, 4419], [1261, 4420], [1471, 4420], [1614, 4420], [1615, 4420]], [[1060, 4481], [1061, 4481], [1261, 4482], [1471, 4482], [1614, 4482], [1615, 4482]], [[1060, 4543], [1061, 4543], [1261, 4543], [1471, 4544], [1614, 4544], [1615, 4544]], [[1060, 4600], [1061, 4603], [1261, 4603], [1471, 4604], [1614, 4604], [1615, 4604]], [[1060, 4660], [1061, 4663], [1261, 4663], [1471, 4664], [1614, 4663], [1615, 4663]], [[1060, 4720], [1061, 4723], [1261, 4723], [1471, 4724], [1614, 4723], [1615, 4723]], [[1060, 4780], [1061, 4783], [1261, 4783], [1471, 4784], [1614, 4783], [1615, 4783]]], "bounding_box": {"nrows": 183, "ulx": 1060, "uly": 4481, "ncols": 555}, "num_lines": 4}, {"staff_no": 15, "line_positions": [[[2056, 4352], [2101, 4352], [2312, 4355], [2522, 4355], [2732, 4352], [2942, 4353], [3152, 4354], [3363, 4354], [3573, 4350], [3706, 4350]], [[2056, 4416], [2101, 4416], [2312, 4419], [2522, 4419], [2732, 4416], [2942, 4417], [3152, 4418], [3363, 4418], [3573, 4414], [3706, 4414]], [[2056, 4480], [2101, 4480], [2312, 4483], [2522, 4483], [2732, 4480], [2942, 4481], [3152, 4482], [3363, 4482], [3573, 4478], [3706, 4478]], [[2056, 4543], [2101, 4542], [2312, 4546], [2522, 4545], [2732, 4542], [2942, 4544], [3152, 4545], [3363, 4544], [3573, 4542], [3706, 4541]], [[2056, 4603], [2101, 4603], [2312, 4602], [2522, 4606], [2732, 4603], [2942, 4605], [3152, 4607], [3363, 4606], [3573, 4601], [3706, 4600]], [[2056, 4663], [2101, 4664], [2312, 4668], [2522, 4666], [2732, 4664], [2942, 4667], [3152, 4668], [3363, 4667], [3573, 4662], [3706, 4661]], [[2056, 4723], [2101, 4724], [2312, 4728], [2522, 4726], [2732, 4724], [2942, 4727], [3152, 4728], [3363, 4727], [3573, 4722], [3706, 4721]], [[2056, 4783], [2101, 4784], [2312, 4788], [2522, 4786], [2732, 4784], [2942, 4787], [3152, 4788], [3363, 4787], [3573, 4782], [3706, 4781]]], "bounding_box": {"nrows": 190, "ulx": 2056, "uly": 4478, "ncols": 1650}, "num_lines": 4}, {"staff_no": 16, "line_positions": [[[1030, 4737], [1050, 4738], [1261, 4740], [1471, 4740], [1681, 4739], [1891, 4739], [2101, 4738], [2103, 4738], [2104, 4738], [2312, 4753], [2522, 4749], [2732, 4749], [2811, 4749], [2812, 4749]], [[1030, 4801], [1050, 4802], [1261, 4804], [1471, 4804], [1681, 4803], [1891, 4803], [2101, 4802], [2103, 4802], [2104, 4802], [2312, 4815], [2522, 4811], [2732, 4811], [2811, 4811], [2812, 4811]], [[1030, 4865], [1050, 4866], [1261, 4868], [1471, 4868], [1681, 4867], [1891, 4867], [2101, 4866], [2103, 4866], [2104, 4866], [2312, 4877], [2522, 4873], [2732, 4873], [2811, 4873], [2812, 4873]], [[1030, 4928], [1050, 4928], [1261, 4931], [1471, 4929], [1681, 4928], [1891, 4930], [2101, 4929], [2103, 4928], [2104, 4928], [2312, 4940], [2522, 4936], [2732, 4935], [2811, 4934], [2812, 4934]], [[1030, 4988], [1050, 4989], [1261, 4990], [1471, 4990], [1681, 4989], [1891, 4990], [2101, 4990], [2103, 4991], [2104, 4991], [2312, 5001], [2522, 4998], [2732, 4997], [2811, 4997], [2812, 4997]], [[1030, 5050], [1050, 5050], [1261, 5050], [1471, 5049], [1681, 5049], [1891, 5051], [2101, 5051], [2103, 5051], [2104, 5051], [2312, 5063], [2522, 5060], [2732, 5058], [2811, 5058], [2812, 5058]], [[1030, 5112], [1050, 5112], [1261, 5112], [1471, 5111], [1681, 5111], [1891, 5113], [2101, 5113], [2103, 5113], [2104, 5113], [2312, 5121], [2522, 5118], [2732, 5116], [2811, 5116], [2812, 5116]], [[1030, 5174], [1050, 5174], [1261, 5174], [1471, 5173], [1681, 5173], [1891, 5175], [2101, 5175], [2103, 5175], [2104, 5175], [2312, 5179], [2522, 5176], [2732, 5174], [2811, 5174], [2812, 5174]]], "bounding_box": {"nrows": 198, "ulx": 1030, "uly": 4865, "ncols": 1782}, "num_lines": 4}, {"staff_no": 17, "line_positions": [[[2996, 4745], [2997, 4743], [2998, 4743], [3152, 4743], [3363, 4741], [3573, 4737], [3661, 4737], [3662, 4737], [3663, 4737]], [[2996, 4811], [2997, 4809], [2998, 4809], [3152, 4809], [3363, 4807], [3573, 4803], [3661, 4803], [3662, 4803], [3663, 4803]], [[2996, 4877], [2997, 4875], [2998, 4875], [3152, 4875], [3363, 4873], [3573, 4869], [3661, 4869], [3662, 4869], [3663, 4869]], [[2996, 4943], [2997, 4938], [2998, 4938], [3152, 4938], [3363, 4938], [3573, 4936], [3661, 4935], [3662, 4935], [3663, 4935]], [[2996, 4997], [2997, 4997], [2998, 4995], [3152, 4994], [3363, 4992], [3573, 4991], [3661, 4991], [3662, 4991], [3663, 4991]], [[2996, 5064], [2997, 5064], [2998, 5064], [3152, 5062], [3363, 5060], [3573, 5058], [3661, 5057], [3662, 5057], [3663, 5057]], [[2996, 5132], [2997, 5132], [2998, 5132], [3152, 5130], [3363, 5128], [3573, 5126], [3661, 5125], [3662, 5125], [3663, 5125]], [[2996, 5200], [2997, 5200], [2998, 5200], [3152, 5198], [3363, 5196], [3573, 5194], [3661, 5193], [3662, 5193], [3663, 5193]]], "bounding_box": {"nrows": 195, "ulx": 2996, "uly": 4869, "ncols": 667}, "num_lines": 4}]} \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/square_notation_basic_classifier.csv b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/square_notation_basic_classifier.csv new file mode 100644 index 000000000..d9279e260 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/square_notation_basic_classifier.csv @@ -0,0 +1,12 @@ +imagePath,imagesBinary,name,folio,width,description,classification,mei,review,dob,project +[],[],Punctum,001r,1,,neume.punctum," ",No,,5d39e8755fbd53216a2fa442 +[],[],Podastus 2,001r,2,,neume.podastus2," ",No,,5d39e8755fbd53216a2fa442 +[],[],Inclinatum,001r,1,,neume.inclinatum," ",No,,5d39e8755fbd53216a2fa442 +[],[],Podastus 3,001r,2,,neume.podastus3," ",No,,5d39e8755fbd53216a2fa442 +[],[],Podastus 4,001r,2,,neume.podastus4," ",No,,5d39e8755fbd53216a2fa442 +[],[],Oblique 2,001r,"1,1",,neume.oblique2," ",No,,5d39e8755fbd53216a2fa442 +[],[],Oblique 3,001r,"1,1",,neume.oblique3," ",No,,5d39e8755fbd53216a2fa442 +[],[],Oblique 4,001r,"1,1",,neume.oblique4," ",No,,5d39e8755fbd53216a2fa442 +[],[],Custos,001r,1,,custos,,No,,5d39e8755fbd53216a2fa442 +[],[],C clef,001r,1,clef.c,clef.c,"",No,,5d39e8755fbd53216a2fa442 +[],[],F Clef,001r,1,,clef.f,"",No,,5d39e8755fbd53216a2fa442 diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_304.json b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_304.json new file mode 100644 index 000000000..b90c07bd7 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_304.json @@ -0,0 +1 @@ +{"syl_boxes": [{"ul": [1155, 856], "lr": [1421, 1015], "syl": "sunt"}, {"ul": [1476, 858], "lr": [1583, 1016], "syl": "al"}, {"ul": [1584, 859], "lr": [1675, 1016], "syl": "le"}, {"ul": [1676, 859], "lr": [1817, 1017], "syl": "lu"}, {"ul": [1818, 860], "lr": [1946, 1018], "syl": "ya"}, {"ul": [2022, 862], "lr": [2142, 1019], "syl": "e"}, {"ul": [2143, 862], "lr": [2238, 1020], "syl": "u"}, {"ul": [2239, 863], "lr": [2296, 1021], "syl": "o"}, {"ul": [2297, 864], "lr": [2388, 1021], "syl": "u"}, {"ul": [2389, 864], "lr": [2555, 1022], "syl": "ae"}, {"ul": [2827, 867], "lr": [3201, 1027], "syl": "ma"}, {"ul": [3202, 870], "lr": [3322, 1028], "syl": "o"}, {"ul": [3323, 871], "lr": [3564, 1029], "syl": "rem"}, {"ul": [1143, 1225], "lr": [1259, 1396], "syl": "ri"}, {"ul": [1260, 1225], "lr": [1393, 1397], "syl": "ta"}, {"ul": [1394, 1226], "lr": [1606, 1399], "syl": "tem"}, {"ul": [1689, 1228], "lr": [1831, 1400], "syl": "ne"}, {"ul": [1832, 1229], "lr": [2061, 1402], "syl": "mo"}, {"ul": [2101, 1231], "lr": [2226, 1403], "syl": "ha"}, {"ul": [2383, 1233], "lr": [2573, 1405], "syl": "bet"}, {"ul": [2622, 1235], "lr": [2746, 1407], "syl": "ut"}, {"ul": [2799, 1236], "lr": [2868, 1407], "syl": "a"}, {"ul": [2869, 1236], "lr": [3007, 1408], "syl": "ni"}, {"ul": [3008, 1237], "lr": [3210, 1410], "syl": "mam"}, {"ul": [3276, 1239], "lr": [3419, 1411], "syl": "su"}, {"ul": [3420, 1240], "lr": [3483, 1412], "syl": "am"}, {"ul": [3545, 1241], "lr": [3692, 1413], "syl": "po"}, {"ul": [1137, 1623], "lr": [1370, 1800], "syl": "nat"}, {"ul": [1426, 1625], "lr": [1697, 1802], "syl": "quis"}, {"ul": [1769, 1627], "lr": [1969, 1804], "syl": "pro"}, {"ul": [2017, 1629], "lr": [2052, 1805], "syl": "a"}, {"ul": [2054, 1629], "lr": [2262, 1806], "syl": "mi"}, {"ul": [2264, 1630], "lr": [2415, 1807], "syl": "cis"}, {"ul": [2475, 1632], "lr": [2696, 1809], "syl": "suis"}, {"ul": [2764, 1634], "lr": [2857, 1810], "syl": "e"}, {"ul": [2859, 1634], "lr": [2985, 1811], "syl": "u"}, {"ul": [2987, 1635], "lr": [3043, 1812], "syl": "o"}, {"ul": [3045, 1636], "lr": [3150, 1812], "syl": "u"}, {"ul": [3152, 1636], "lr": [3303, 1813], "syl": "ae"}, {"ul": [1398, 2017], "lr": [1533, 2184], "syl": "vos"}, {"ul": [1598, 2019], "lr": [1665, 2185], "syl": "a"}, {"ul": [1666, 2019], "lr": [1852, 2187], "syl": "mi"}, {"ul": [1853, 2021], "lr": [1967, 2187], "syl": "ci"}, {"ul": [2015, 2022], "lr": [2260, 2189], "syl": "mei"}, {"ul": [2295, 2024], "lr": [2346, 2190], "syl": "e"}, {"ul": [2347, 2024], "lr": [2550, 2191], "syl": "stis"}, {"ul": [2597, 2026], "lr": [2690, 2192], "syl": "si"}, {"ul": [2721, 2026], "lr": [2822, 2193], "syl": "fe"}, {"ul": [2823, 2027], "lr": [2945, 2194], "syl": "ce"}, {"ul": [2946, 2028], "lr": [3056, 2195], "syl": "ri"}, {"ul": [3057, 2029], "lr": [3209, 2196], "syl": "tis"}, {"ul": [3265, 2030], "lr": [3477, 2198], "syl": "que"}, {"ul": [3542, 2032], "lr": [3719, 2199], "syl": "pre"}, {"ul": [3763, 2034], "lr": [3809, 2200], "syl": "ci"}, {"ul": [1128, 2419], "lr": [1271, 2580], "syl": "pi"}, {"ul": [1272, 2420], "lr": [1358, 2580], "syl": "o"}, {"ul": [1396, 2420], "lr": [1536, 2581], "syl": "vo"}, {"ul": [1537, 2421], "lr": [1730, 2583], "syl": "bis"}, {"ul": [1793, 2423], "lr": [1920, 2584], "syl": "di"}, {"ul": [1921, 2424], "lr": [2073, 2585], "syl": "cit"}, {"ul": [2123, 2425], "lr": [2229, 2586], "syl": "do"}, {"ul": [2230, 2426], "lr": [2423, 2587], "syl": "mi"}, {"ul": [2424, 2427], "lr": [2585, 2589], "syl": "nus"}, {"ul": [2631, 2429], "lr": [2737, 2590], "syl": "e"}, {"ul": [2738, 2430], "lr": [2836, 2590], "syl": "u"}, {"ul": [2837, 2430], "lr": [2894, 2591], "syl": "o"}, {"ul": [2895, 2431], "lr": [2989, 2591], "syl": "u"}, {"ul": [2990, 2431], "lr": [3097, 2592], "syl": "ae"}, {"ul": [1419, 2818], "lr": [1479, 2980], "syl": "be"}, {"ul": [1480, 2818], "lr": [1557, 2981], "syl": "a"}, {"ul": [1558, 2819], "lr": [1661, 2981], "syl": "ti"}, {"ul": [1710, 2820], "lr": [1874, 2983], "syl": "mun"}, {"ul": [1875, 2821], "lr": [2038, 2984], "syl": "do"}, {"ul": [2091, 2822], "lr": [2247, 2985], "syl": "cor"}, {"ul": [2248, 2823], "lr": [2377, 2986], "syl": "de"}, {"ul": [2430, 2825], "lr": [2659, 2988], "syl": "quo"}, {"ul": [2660, 2826], "lr": [2819, 2989], "syl": "ni"}, {"ul": [2820, 2827], "lr": [2884, 2990], "syl": "am"}, {"ul": [2955, 2828], "lr": [3075, 2991], "syl": "ip"}, {"ul": [3076, 2829], "lr": [3188, 2992], "syl": "si"}, {"ul": [3241, 2830], "lr": [3349, 2993], "syl": "de"}, {"ul": [3350, 2831], "lr": [3513, 2994], "syl": "um"}, {"ul": [3601, 2833], "lr": [3730, 2995], "syl": "vi"}, {"ul": [1128, 3214], "lr": [1280, 3376], "syl": "de"}, {"ul": [1281, 3215], "lr": [1573, 3378], "syl": "bunt"}, {"ul": [1644, 3217], "lr": [1763, 3379], "syl": "e"}, {"ul": [1764, 3218], "lr": [1866, 3380], "syl": "u"}, {"ul": [1867, 3219], "lr": [1928, 3380], "syl": "o"}, {"ul": [1929, 3219], "lr": [2027, 3381], "syl": "u"}, {"ul": [2028, 3220], "lr": [2118, 3381], "syl": "ae"}, {"ul": [3266, 3228], "lr": [3372, 3390], "syl": "be"}, {"ul": [3373, 3229], "lr": [3430, 3390], "syl": "a"}, {"ul": [3431, 3229], "lr": [3546, 3391], "syl": "ti"}, {"ul": [3576, 3230], "lr": [3785, 3393], "syl": "qui"}, {"ul": [1064, 3600], "lr": [1297, 3766], "syl": "per"}, {"ul": [1298, 3602], "lr": [1405, 3767], "syl": "se"}, {"ul": [1406, 3603], "lr": [1530, 3767], "syl": "cu"}, {"ul": [1531, 3603], "lr": [1639, 3768], "syl": "ti"}, {"ul": [1640, 3604], "lr": [1718, 3769], "syl": "o"}, {"ul": [1765, 3605], "lr": [1889, 3770], "syl": "nem"}, {"ul": [1944, 3606], "lr": [2060, 3771], "syl": "pa"}, {"ul": [2061, 3607], "lr": [2169, 3772], "syl": "ti"}, {"ul": [2170, 3608], "lr": [2261, 3772], "syl": "un"}, {"ul": [2262, 3608], "lr": [2536, 3774], "syl": "tur"}, {"ul": [2595, 3611], "lr": [2836, 3776], "syl": "prop"}, {"ul": [2837, 3612], "lr": [2999, 3777], "syl": "ter"}, {"ul": [3079, 3614], "lr": [3133, 3778], "syl": "u"}, {"ul": [3171, 3615], "lr": [3316, 3780], "syl": "sti"}, {"ul": [3317, 3616], "lr": [3412, 3780], "syl": "ci"}, {"ul": [3413, 3616], "lr": [3583, 3781], "syl": "am"}, {"ul": [2459, 3899], "lr": [2492, 4013], "syl": "e"}, {"ul": [1185, 4007], "lr": [1280, 4141], "syl": "u"}, {"ul": [1281, 4008], "lr": [1354, 4141], "syl": "o"}, {"ul": [1452, 4009], "lr": [1558, 4143], "syl": "ae"}, {"ul": [3087, 4020], "lr": [3268, 4154], "syl": "jam"}, {"ul": [3343, 4022], "lr": [3606, 4157], "syl": "non"}, {"ul": [3607, 4024], "lr": [3743, 4158], "syl": "di"}, {"ul": [1121, 4376], "lr": [1348, 4540], "syl": "jam"}, {"ul": [1409, 4378], "lr": [1596, 4542], "syl": "vos"}, {"ul": [1645, 4379], "lr": [1792, 4543], "syl": "ser"}, {"ul": [1793, 4380], "lr": [2029, 4545], "syl": "vos"}, {"ul": [2086, 4382], "lr": [2257, 4546], "syl": "sed"}, {"ul": [2310, 4384], "lr": [2365, 4547], "syl": "a"}, {"ul": [2366, 4384], "lr": [2561, 4548], "syl": "mi"}, {"ul": [2562, 4385], "lr": [2741, 4550], "syl": "cos"}, {"ul": [2794, 4387], "lr": [2981, 4551], "syl": "me"}, {"ul": [2982, 4388], "lr": [3098, 4552], "syl": "os"}, {"ul": [3159, 4390], "lr": [3378, 4554], "syl": "qui"}, {"ul": [3379, 4391], "lr": [3462, 4555], "syl": "a"}, {"ul": [3495, 4392], "lr": [3646, 4556], "syl": "om"}, {"ul": [1128, 4780], "lr": [1270, 4940], "syl": "ni"}, {"ul": [1271, 4781], "lr": [1331, 4940], "syl": "a"}, {"ul": [1402, 4782], "lr": [1626, 4942], "syl": "que"}, {"ul": [1627, 4783], "lr": [1740, 4943], "syl": "cum"}, {"ul": [1741, 4784], "lr": [1904, 4944], "syl": "que"}, {"ul": [1950, 4785], "lr": [2104, 4945], "syl": "au"}, {"ul": [2105, 4786], "lr": [2219, 4946], "syl": "di"}, {"ul": [2220, 4787], "lr": [2264, 4946], "syl": "vi"}, {"ul": [2396, 4788], "lr": [2476, 4948], "syl": "a"}, {"ul": [2510, 4789], "lr": [2640, 4949], "syl": "pa"}, {"ul": [2641, 4790], "lr": [2828, 4950], "syl": "tre"}, {"ul": [2894, 4792], "lr": [3090, 4952], "syl": "me"}, {"ul": [3091, 4793], "lr": [3171, 4953], "syl": "o"}, {"ul": [3222, 4794], "lr": [3368, 4954], "syl": "no"}, {"ul": [3369, 4795], "lr": [3527, 4955], "syl": "ta"}, {"ul": [3561, 4796], "lr": [3654, 4956], "syl": "fe"}, {"ul": [3655, 4797], "lr": [3764, 4957], "syl": "ci"}, {"ul": [1098, 5162], "lr": [1240, 5342], "syl": "vo"}, {"ul": [1241, 5163], "lr": [1467, 5344], "syl": "bis"}, {"ul": [1535, 5165], "lr": [1632, 5345], "syl": "e"}, {"ul": [1633, 5166], "lr": [1726, 5346], "syl": "u"}, {"ul": [1727, 5167], "lr": [1788, 5346], "syl": "o"}, {"ul": [1789, 5167], "lr": [1904, 5347], "syl": "u"}, {"ul": [1905, 5168], "lr": [2011, 5348], "syl": "ae"}, {"ul": [2458, 5172], "lr": [2595, 5352], "syl": "tol"}, {"ul": [2596, 5173], "lr": [2680, 5352], "syl": "li"}, {"ul": [2681, 5173], "lr": [2787, 5353], "syl": "te"}, {"ul": [2855, 5174], "lr": [2938, 5354], "syl": "ju"}, {"ul": [2939, 5175], "lr": [3108, 5355], "syl": "gum"}, {"ul": [3198, 5177], "lr": [3384, 5357], "syl": "me"}, {"ul": [3385, 5178], "lr": [3429, 5357], "syl": "um"}, {"ul": [3506, 5179], "lr": [3621, 5359], "syl": "su"}, {"ul": [3622, 5180], "lr": [3701, 5359], "syl": "per"}], "median_line_spacing": 393.25} \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_400.json b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_400.json new file mode 100644 index 000000000..66518fb9d --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/resources/syls_salzinnes_400.json @@ -0,0 +1 @@ +{"syl_boxes": [{"ul": [1396, 808], "lr": [1534, 966], "syl": "pro"}, {"ul": [1532, 807], "lr": [1703, 965], "syl": "pri"}, {"ul": [1701, 806], "lr": [1782, 964], "syl": "o"}, {"ul": [1883, 804], "lr": [1984, 963], "syl": "fi"}, {"ul": [1982, 804], "lr": [2075, 962], "syl": "li"}, {"ul": [2073, 803], "lr": [2149, 961], "syl": "o"}, {"ul": [2188, 802], "lr": [2306, 960], "syl": "su"}, {"ul": [2304, 801], "lr": [2372, 960], "syl": "o"}, {"ul": [2424, 800], "lr": [2690, 957], "syl": "non"}, {"ul": [2733, 798], "lr": [2846, 956], "syl": "pe"}, {"ul": [2844, 797], "lr": [3036, 954], "syl": "per"}, {"ul": [3034, 796], "lr": [3185, 953], "syl": "cit"}, {"ul": [3228, 794], "lr": [3308, 952], "syl": "de"}, {"ul": [3306, 793], "lr": [3469, 951], "syl": "us"}, {"ul": [1109, 1207], "lr": [1275, 1361], "syl": "sed"}, {"ul": [1325, 1206], "lr": [1503, 1359], "syl": "pro"}, {"ul": [1561, 1204], "lr": [1695, 1358], "syl": "no"}, {"ul": [1693, 1203], "lr": [1900, 1356], "syl": "bis"}, {"ul": [1938, 1201], "lr": [2012, 1355], "syl": "om"}, {"ul": [2010, 1200], "lr": [2064, 1355], "syl": "ni"}, {"ul": [2062, 1200], "lr": [2268, 1353], "syl": "bus"}, {"ul": [2318, 1198], "lr": [2468, 1352], "syl": "tra"}, {"ul": [2466, 1197], "lr": [2596, 1351], "syl": "di"}, {"ul": [2594, 1196], "lr": [2748, 1350], "syl": "dit"}, {"ul": [2830, 1194], "lr": [2876, 1349], "syl": "il"}, {"ul": [2874, 1194], "lr": [2960, 1348], "syl": "lum"}, {"ul": [3063, 1192], "lr": [3161, 1347], "syl": "e"}, {"ul": [3159, 1192], "lr": [3257, 1346], "syl": "u"}, {"ul": [3255, 1191], "lr": [3313, 1345], "syl": "o"}, {"ul": [3311, 1190], "lr": [3413, 1345], "syl": "u"}, {"ul": [3411, 1190], "lr": [3509, 1344], "syl": "ae"}, {"ul": [1363, 1595], "lr": [1442, 1754], "syl": "po"}, {"ul": [1440, 1595], "lr": [1555, 1753], "syl": "su"}, {"ul": [1553, 1594], "lr": [1628, 1752], "syl": "e"}, {"ul": [1626, 1593], "lr": [1806, 1751], "syl": "runt"}, {"ul": [1857, 1592], "lr": [1964, 1750], "syl": "su"}, {"ul": [1962, 1591], "lr": [2122, 1749], "syl": "per"}, {"ul": [2168, 1589], "lr": [2280, 1747], "syl": "ca"}, {"ul": [2278, 1588], "lr": [2494, 1746], "syl": "put"}, {"ul": [2537, 1586], "lr": [2587, 1745], "syl": "e"}, {"ul": [2634, 1586], "lr": [2777, 1744], "syl": "jus"}, {"ul": [2909, 1583], "lr": [3113, 1741], "syl": "cau"}, {"ul": [3111, 1582], "lr": [3226, 1740], "syl": "sam"}, {"ul": [3310, 1580], "lr": [3376, 1739], "syl": "ip"}, {"ul": [3374, 1580], "lr": [3445, 1738], "syl": "si"}, {"ul": [3471, 1579], "lr": [3607, 1737], "syl": "us"}, {"ul": [1525, 1982], "lr": [1569, 2122], "syl": "i"}, {"ul": [1567, 1982], "lr": [1611, 2122], "syl": "e"}, {"ul": [1609, 1982], "lr": [1808, 2120], "syl": "jus"}, {"ul": [1855, 1980], "lr": [2001, 2119], "syl": "na"}, {"ul": [1999, 1979], "lr": [2149, 2117], "syl": "za"}, {"ul": [2147, 1977], "lr": [2263, 2117], "syl": "re"}, {"ul": [2261, 1977], "lr": [2483, 2115], "syl": "jus"}, {"ul": [2553, 1974], "lr": [2718, 2113], "syl": "rex"}, {"ul": [2758, 1973], "lr": [2783, 2112], "syl": "i"}, {"ul": [2781, 1973], "lr": [2828, 2112], "syl": "u"}, {"ul": [2826, 1972], "lr": [2969, 2111], "syl": "de"}, {"ul": [2967, 1971], "lr": [3037, 2111], "syl": "o"}, {"ul": [3035, 1971], "lr": [3155, 2110], "syl": "rum"}, {"ul": [3175, 1969], "lr": [3272, 2109], "syl": "e"}, {"ul": [3270, 1969], "lr": [3344, 2108], "syl": "u"}, {"ul": [3342, 1968], "lr": [3413, 2108], "syl": "o"}, {"ul": [3411, 1968], "lr": [3511, 2107], "syl": "u"}, {"ul": [3509, 1967], "lr": [3614, 2106], "syl": "ae"}, {"ul": [1325, 2371], "lr": [1460, 2522], "syl": "rep"}, {"ul": [1458, 2370], "lr": [1570, 2521], "syl": "le"}, {"ul": [1568, 2369], "lr": [1741, 2520], "syl": "vit"}, {"ul": [1780, 2367], "lr": [1866, 2519], "syl": "et"}, {"ul": [1913, 2366], "lr": [2067, 2517], "syl": "ne"}, {"ul": [2065, 2365], "lr": [2257, 2516], "syl": "bri"}, {"ul": [2255, 2364], "lr": [2306, 2515], "syl": "a"}, {"ul": [2304, 2363], "lr": [2503, 2514], "syl": "vit"}, {"ul": [2562, 2361], "lr": [2720, 2512], "syl": "me"}, {"ul": [2771, 2360], "lr": [2818, 2511], "syl": "a"}, {"ul": [2816, 2359], "lr": [3042, 2509], "syl": "ma"}, {"ul": [3040, 2358], "lr": [3087, 2509], "syl": "ri"}, {"ul": [3135, 2357], "lr": [3281, 2508], "syl": "tu"}, {"ul": [3279, 2356], "lr": [3398, 2507], "syl": "di"}, {"ul": [3396, 2355], "lr": [3531, 2506], "syl": "ne"}, {"ul": [1126, 2764], "lr": [1343, 2894], "syl": "mi"}, {"ul": [1342, 2763], "lr": [1510, 2892], "syl": "cus"}, {"ul": [1574, 2761], "lr": [1772, 2890], "syl": "me"}, {"ul": [1771, 2759], "lr": [1893, 2889], "syl": "us"}, {"ul": [1953, 2758], "lr": [2061, 2888], "syl": "e"}, {"ul": [2060, 2757], "lr": [2144, 2887], "syl": "u"}, {"ul": [2143, 2756], "lr": [2205, 2887], "syl": "o"}, {"ul": [2204, 2756], "lr": [2300, 2886], "syl": "u"}, {"ul": [2298, 2755], "lr": [2436, 2885], "syl": "ae"}, {"ul": [2491, 2754], "lr": [2535, 2884], "syl": "a"}, {"ul": [2992, 2750], "lr": [3092, 2880], "syl": "it"}, {"ul": [3144, 2749], "lr": [3183, 2879], "syl": "la"}, {"ul": [3242, 2748], "lr": [3422, 2878], "syl": "tro"}, {"ul": [3459, 2746], "lr": [3577, 2876], "syl": "ad"}, {"ul": [3576, 2745], "lr": [3695, 2875], "syl": "la"}, {"ul": [1104, 3156], "lr": [1287, 3308], "syl": "tro"}, {"ul": [1286, 3154], "lr": [1424, 3307], "syl": "nem"}, {"ul": [1488, 3153], "lr": [1679, 3305], "syl": "nos"}, {"ul": [1727, 3151], "lr": [1885, 3303], "syl": "qui"}, {"ul": [1925, 3149], "lr": [2027, 3302], "syl": "dem"}, {"ul": [2078, 3148], "lr": [2265, 3301], "syl": "dig"}, {"ul": [2264, 3147], "lr": [2407, 3299], "syl": "na"}, {"ul": [2467, 3145], "lr": [2589, 3298], "syl": "fa"}, {"ul": [2588, 3144], "lr": [2779, 3297], "syl": "ctis"}, {"ul": [2830, 3142], "lr": [2940, 3295], "syl": "re"}, {"ul": [2939, 3141], "lr": [3013, 3295], "syl": "ci"}, {"ul": [3012, 3141], "lr": [3143, 3294], "syl": "pi"}, {"ul": [3190, 3139], "lr": [3333, 3292], "syl": "mus"}, {"ul": [3367, 3138], "lr": [3515, 3291], "syl": "hic"}, {"ul": [3553, 3137], "lr": [3684, 3290], "syl": "au"}, {"ul": [1147, 3540], "lr": [1396, 3690], "syl": "quid"}, {"ul": [1455, 3538], "lr": [1553, 3689], "syl": "fe"}, {"ul": [1552, 3537], "lr": [1673, 3688], "syl": "cit"}, {"ul": [1736, 3536], "lr": [1889, 3686], "syl": "me"}, {"ul": [1888, 3534], "lr": [2081, 3685], "syl": "men"}, {"ul": [2080, 3533], "lr": [2201, 3684], "syl": "to"}, {"ul": [2240, 3532], "lr": [2465, 3682], "syl": "mei"}, {"ul": [2501, 3530], "lr": [2638, 3681], "syl": "do"}, {"ul": [2569, 3529], "lr": [2638, 3681], "syl": "mi"}, {"ul": [2637, 3529], "lr": [2742, 3680], "syl": "ne"}, {"ul": [2785, 3528], "lr": [2894, 3679], "syl": "dum"}, {"ul": [2968, 3526], "lr": [3074, 3677], "syl": "ve"}, {"ul": [3072, 3525], "lr": [3194, 3676], "syl": "ne"}, {"ul": [3192, 3524], "lr": [3347, 3675], "syl": "ris"}, {"ul": [3401, 3523], "lr": [3467, 3674], "syl": "in"}, {"ul": [3533, 3522], "lr": [3687, 3673], "syl": "reg"}, {"ul": [1121, 3924], "lr": [1254, 4059], "syl": "num"}, {"ul": [1334, 3923], "lr": [1464, 4058], "syl": "tu"}, {"ul": [1463, 3922], "lr": [1502, 4057], "syl": "um"}, {"ul": [1583, 3921], "lr": [1685, 4056], "syl": "e"}, {"ul": [1684, 3920], "lr": [1758, 4056], "syl": "u"}, {"ul": [1757, 3920], "lr": [1820, 4055], "syl": "o"}, {"ul": [1819, 3919], "lr": [1925, 4054], "syl": "u"}, {"ul": [1924, 3918], "lr": [2022, 4053], "syl": "ae"}, {"ul": [2641, 3913], "lr": [2729, 4048], "syl": "dum"}, {"ul": [2870, 3911], "lr": [3062, 4045], "syl": "con"}, {"ul": [3060, 3909], "lr": [3256, 4044], "syl": "tur"}, {"ul": [3254, 3908], "lr": [3388, 4043], "syl": "ba"}, {"ul": [3386, 3907], "lr": [3520, 4042], "syl": "ta"}, {"ul": [3545, 3906], "lr": [3644, 4041], "syl": "fu"}, {"ul": [3642, 3905], "lr": [3687, 4041], "syl": "e"}, {"ul": [1123, 4318], "lr": [1268, 4468], "syl": "rit"}, {"ul": [1324, 4317], "lr": [1397, 4467], "syl": "a"}, {"ul": [1396, 4316], "lr": [1496, 4467], "syl": "ni"}, {"ul": [1495, 4316], "lr": [1716, 4465], "syl": "ma"}, {"ul": [1761, 4313], "lr": [1929, 4463], "syl": "me"}, {"ul": [1928, 4312], "lr": [1997, 4463], "syl": "a"}, {"ul": [2053, 4311], "lr": [2142, 4462], "syl": "do"}, {"ul": [2141, 4311], "lr": [2312, 4460], "syl": "mi"}, {"ul": [2311, 4309], "lr": [2445, 4459], "syl": "ne"}, {"ul": [2494, 4308], "lr": [2647, 4458], "syl": "mi"}, {"ul": [2646, 4307], "lr": [2757, 4457], "syl": "se"}, {"ul": [2756, 4306], "lr": [2852, 4456], "syl": "ri"}, {"ul": [2851, 4305], "lr": [3011, 4455], "syl": "cor"}, {"ul": [3010, 4304], "lr": [3129, 4454], "syl": "di"}, {"ul": [3128, 4303], "lr": [3178, 4454], "syl": "e"}, {"ul": [3226, 4302], "lr": [3379, 4452], "syl": "me"}, {"ul": [3378, 4301], "lr": [3569, 4450], "syl": "mor"}, {"ul": [3606, 4299], "lr": [3660, 4450], "syl": "e"}, {"ul": [3659, 4299], "lr": [3710, 4449], "syl": "ris"}, {"ul": [1093, 4682], "lr": [1222, 4830], "syl": "e"}, {"ul": [1220, 4681], "lr": [1310, 4829], "syl": "u"}, {"ul": [1308, 4680], "lr": [1371, 4829], "syl": "o"}, {"ul": [1369, 4680], "lr": [1479, 4828], "syl": "u"}, {"ul": [1477, 4679], "lr": [1575, 4827], "syl": "ae"}, {"ul": [1711, 4677], "lr": [2204, 4822], "syl": "me"}, {"ul": [2202, 4673], "lr": [2442, 4820], "syl": "men"}, {"ul": [2440, 4671], "lr": [2565, 4819], "syl": "to"}, {"ul": [2609, 4670], "lr": [2837, 4817], "syl": "mei"}, {"ul": [2870, 4668], "lr": [2967, 4816], "syl": "do"}, {"ul": [2966, 4667], "lr": [3155, 4815], "syl": "mi"}, {"ul": [3154, 4666], "lr": [3285, 4814], "syl": "ne"}, {"ul": [3330, 4664], "lr": [3454, 4812], "syl": "de"}, {"ul": [3453, 4663], "lr": [3569, 4811], "syl": "us"}, {"ul": [3606, 4662], "lr": [3696, 4810], "syl": "dum"}, {"ul": [1111, 5095], "lr": [1265, 5250], "syl": "ve"}, {"ul": [1264, 5093], "lr": [1402, 5249], "syl": "ne"}, {"ul": [1401, 5092], "lr": [1543, 5248], "syl": "ris"}, {"ul": [1628, 5091], "lr": [1665, 5247], "syl": "in"}, {"ul": [1730, 5090], "lr": [1904, 5245], "syl": "reg"}, {"ul": [1903, 5088], "lr": [2033, 5244], "syl": "num"}, {"ul": [2107, 5087], "lr": [2237, 5243], "syl": "tu"}, {"ul": [2236, 5086], "lr": [2280, 5242], "syl": "um"}, {"ul": [2377, 5085], "lr": [2488, 5241], "syl": "e"}, {"ul": [2487, 5084], "lr": [2574, 5240], "syl": "u"}, {"ul": [2573, 5083], "lr": [2625, 5240], "syl": "o"}, {"ul": [2624, 5083], "lr": [2719, 5239], "syl": "u"}, {"ul": [2718, 5082], "lr": [2817, 5238], "syl": "ae"}, {"ul": [2875, 5081], "lr": [3350, 5234], "syl": "ac"}, {"ul": [3349, 5077], "lr": [3483, 5233], "syl": "cep"}, {"ul": [3482, 5076], "lr": [3578, 5232], "syl": "to"}, {"ul": [3577, 5075], "lr": [3660, 5232], "syl": "pa"}, {"ul": [3659, 5075], "lr": [3711, 5231], "syl": "u"}], "median_line_spacing": 393.0} \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_glyph_creation.py b/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_glyph_creation.py new file mode 100644 index 000000000..0d5929ddd --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_glyph_creation.py @@ -0,0 +1,124 @@ +import os +import sys + +root_folder = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(root_folder) + +import json +import unittest +import xml.etree.ElementTree as ET +import build_mei_file as bmf +from pymei import MeiElement +from copy import copy + + +class TestMEIGlyphCreation(unittest.TestCase): + + punctum_xml = ' ' + podastus3_xml = ' ' + clefc_xml = '' + oblique3_xml = ' ' + + punctum_glyph = {'bounding_box': {'lrx': 1010, 'lry': 1010, 'ulx': 1000, 'uly': 1000}, + 'name': 'neume.punctum', + 'note': 'g', + 'octave': '2', + 'staff': '3', + 'strt_pos': '10', + 'system_begin': False} + + clefc_glyph = {'bounding_box': {'lrx': 1010, 'lry': 1010, 'ulx': 1000, 'uly': 1000}, + 'name': 'clef.c', + 'note': 'None', + 'octave': 'None', + 'staff': '9', + 'strt_pos': '4', + 'system_begin': False} + + oblique3_glyph = {'bounding_box': {'lrx': 2648, 'lry': 5164, 'ulx': 2503, 'uly': 5040}, + 'name': 'neume.oblique3', + 'note': 'b', + 'octave': '2', + 'staff': '14', + 'strt_pos': '8', + 'system_begin': False} + + def setUp(self): + self.dummy_surface = MeiElement('surface') + + def test_punctum_primitive(self): + xml = ET.fromstring(self.punctum_xml)[0] + el = bmf.create_primitive_element(xml, self.punctum_glyph, 0, self.dummy_surface) + + # should return a simple MeiElement with a note, an octave, and a facsimile + self.assertEqual(type(el), MeiElement) + self.assertEqual(el.getAttribute('pname').value, self.punctum_glyph['note']) + self.assertEqual(el.getAttribute('oct').value, self.punctum_glyph['octave']) + + # make sure there are no extraneous elements + exp_atts = set(['pname', 'oct', 'facs']) + res_atts = set([x.name for x in el.attributes]) + self.assertEqual(exp_atts, res_atts) + + def test_clefc_primitive(self): + xml = ET.fromstring(self.clefc_xml) + el = bmf.create_primitive_element(xml, self.clefc_glyph, 0, self.dummy_surface) + + # should return a simple MeiElement with a shape, an line, and a facsimile + self.assertEqual(type(el), MeiElement) + self.assertEqual(el.getAttribute('line').value, self.clefc_glyph['strt_pos']) + + # make sure there are no extraneous elements + exp_atts = set(['line', 'shape', 'facs']) + res_atts = set([x.name for x in el.attributes]) + self.assertEqual(exp_atts, res_atts) + + def test_oblique3_neume(self): + dummy_classifier = {'neume.oblique3': ET.fromstring(self.oblique3_xml)} + width_container = {'neume.oblique3': [1, 1]} + el = bmf.glyph_to_element(dummy_classifier, width_container, self.oblique3_glyph, self.dummy_surface) + + # should return a single MeiElement with no attributes... + self.assertEqual(type(el), MeiElement) + self.assertEqual(el.getAttributes(), []) + + # ...and two children + clds = el.getChildren() + self.assertEqual(len(clds), 2) + + def test_resolve_interval(self): + ''' + Test resolving an interval between two neume components and getting a pname/octave for each + ''' + nc1 = MeiElement('nc') + nc1.addAttribute('pname', 'c') + nc1.addAttribute('oct', '2') + + # normal case + nc2 = MeiElement('nc') + nc2.addAttribute('intm', '2s') + res = bmf.resolve_interval(nc1, nc2) + self.assertEqual(res, ('e', '2')) + + # octave up + nc2 = MeiElement('nc') + nc2.addAttribute('intm', '7S') + res = bmf.resolve_interval(nc1, nc2) + self.assertEqual(res, ('c', '3')) + + # octave down + nc2 = MeiElement('nc') + nc2.addAttribute('intm', '-1s') + res = bmf.resolve_interval(nc1, nc2) + self.assertEqual(res, ('b', '1')) + + # invalid pitch + nc3 = MeiElement('nc') + nc3.addAttribute('pname', 'z') + nc3.addAttribute('oct', '2') + with self.assertRaises(ValueError) as context: + res = bmf.resolve_interval(nc3, nc2) + + +if __name__ == '__main__': + unittest.main() diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_validity.py b/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_validity.py new file mode 100644 index 000000000..b41ce5821 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/tests/test_MEI_validity.py @@ -0,0 +1,109 @@ +import os +import sys + +root_folder = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.append(root_folder) + +from lxml import etree +import unittest +import build_mei_file as bmf +import json +import parse_classifier_table as pct +from StringIO import StringIO + +class TestMEIValidity(unittest.TestCase): + + # to be replaced with the neume schema when the clef/custos issue is resolved (hopefully) + rng_path = './tests/resources/mei-all.rng' + classifier_path = './tests/resources/square_notation_basic_classifier.csv' + + # i can't figure out how to elegantly parametrize this in python 2.7 without adding + # dependencies that don't support python 2.7. hopefully i will move this code to python 3 + # and everything will be moot + syls_path = './tests/resources/syls_salzinnes_304.json' + pitches_path = './tests/resources/pitches_salzinnes_304.json' + + with open(rng_path) as file: + relaxng_doc = etree.parse(file) + rng = etree.RelaxNG(relaxng_doc) + classifier = pct.fetch_table_from_csv(classifier_path) + + def setUp(self): + with open(self.pitches_path) as file: + self.jsomr = json.loads(file.read()) + with open(self.syls_path) as file: + self.syls = json.loads(file.read()) + + def test_build_mei(self): + ''' + Ensures that the MEI file generated validates against the MEI RNG schema. + ''' + mei_text = bmf.process(self.jsomr, self.syls, self.classifier, width_mult=1, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + self.assertTrue(self.rng.validate(mei_xml)) + + def test_build_mei_no_merging(self): + ''' + Ensures that the MEI file generated validates against the MEI RNG schema without merging + neume components as a final step. + ''' + mei_text = bmf.process(self.jsomr, self.syls, self.classifier, width_mult=0, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + self.assertTrue(self.rng.validate(mei_xml)) + + def test_build_mei_no_syls(self): + ''' + Ensures that the MEI file generated validates against the MEI RNG schema if syllables + are not supplied. + ''' + mei_text = bmf.process(self.jsomr, None, self.classifier, width_mult=1, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + self.assertTrue(self.rng.validate(mei_xml)) + + def test_mei_remove_glyphs(self): + ''' + Ensures that removing most of the glyphs from the pitch-finding output (all punctums) + still results in a valid MEI file. + ''' + new_g = [x for x in self.jsomr['glyphs'] if not ('punctum' in x['glyph']['name'])] + self.jsomr['glyphs'] = new_g + + mei_text = bmf.process(self.jsomr, self.syls, self.classifier, width_mult=1, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + + self.assertTrue(self.rng.validate(mei_xml)) + + def test_mei_remove_syls(self): + ''' + Ensures that removing most of the syllables (every other one) from the text-alignment output + still results in a valid MEI file. + ''' + new_s = [x for i, x in enumerate(self.syls['syl_boxes']) if not i % 2] + self.syls['syl_boxes'] = new_s + + mei_text = bmf.process(self.jsomr, self.syls, self.classifier, width_mult=1, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + + self.assertTrue(self.rng.validate(mei_xml)) + + def test_mei_move_syl_boxes(self): + ''' + Ensures that shifting each of the syl_boxes into an awkward position before neume-to-text + alignment still results in a valid MEI file. + ''' + sh_amt = int(self.syls['median_line_spacing']) + + # shift diagonally upwards and to the right + for sb in self.syls['syl_boxes']: + sb['lr'][0] -= sh_amt + sb['lr'][1] += sh_amt + sb['ul'][0] -= sh_amt + sb['ul'][1] += sh_amt + + mei_text = bmf.process(self.jsomr, self.syls, self.classifier, width_mult=1, verbose=False) + mei_xml = etree.parse(StringIO(mei_text)) + self.assertTrue(self.rng.validate(mei_xml)) + + +if __name__ == '__main__': + unittest.main() diff --git a/rodan-main/code/rodan/jobs/MEI_encoding/visualize_alignment.py b/rodan-main/code/rodan/jobs/MEI_encoding/visualize_alignment.py new file mode 100644 index 000000000..81124b1ee --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_encoding/visualize_alignment.py @@ -0,0 +1,86 @@ +import numpy as np +from PIL import Image, ImageDraw, ImageFont, ImageOps +from pymei import MeiDocument, MeiElement, MeiAttribute, documentToText, documentToFile + +# This file contains only functions for drawing out intermediate results of the alignment, for +# use when developing; nothing here is called in the rodan job. + + +def draw_neume_alignment(in_png, out_fname, pairs, text_size=60): + ''' + Given the pairs from neume_to_lyric_alignment, draws the result on the original page (given a + path to the .png) + ''' + fnt = ImageFont.truetype('FreeMono.ttf', text_size) + im = Image.open(in_png).convert('RGB') + draw = ImageDraw.Draw(im) + + last_text = None + for gs, tb in pairs: + if not tb: + continue + + draw.rectangle(tb['ul'] + tb['lr'], outline='black') + # draw.text(tb['ul'], tb['syl'], font=fnt, fill='gray') + for g in gs: + + if 'clef' in g['name'] or 'custos' in g['name']: + continue + + bb = g['bounding_box'] + pt1 = (bb['ulx'] + bb['ncols'] // 2, bb['uly'] + bb['nrows'] // 2) + pt2 = ((tb['ul'][0] + tb['lr'][0]) // 2, (tb['ul'][1] + tb['lr'][1]) // 2) + + if pt1[1] > pt2[1]: + continue + + draw.line((pt1, pt2), fill='black', width=5) + im.save(out_fname) + + +def draw_mei_doc(in_png, out_fname, meiDoc, text_size=60): + ''' + Given an encoded mei_doc result, draws the result on the original page (given a + path to the .png) + ''' + + fnt = ImageFont.truetype('FreeMono.ttf', text_size) + im = Image.open(in_png).convert('RGB') + draw = ImageDraw.Draw(im) + + all_syllables = meiDoc.getElementsByName('syllable') + surface = meiDoc.getElementsByName('surface')[0] + + # build a dictionary linking each zone's ID to its element object for easy access + surf_dict = {} + for c in surface.getChildren(): + surf_dict[c.id] = {} + for coord in c.attributes: + surf_dict[c.id][coord.name] = int(coord.value) + + for syllable in all_syllables: + neumes = syllable.getChildrenByName('neume') + + for n in neumes: + nc_ids = [x.getAttribute('facs').value[1:] for x in n.children] + zones = [surf_dict[x] for x in nc_ids] + ulx = min([z['ulx'] for z in zones]) + uly = min([z['uly'] for z in zones]) + lrx = max([z['lrx'] for z in zones]) + lry = max([z['lry'] for z in zones]) + + draw.rectangle((ulx, uly, lrx, lry), outline='black') + neume_avg_x = (ulx + lrx) // 2 + neume_avg_y = (uly + lry) // 2 + + syl = syllable.getChildrenByName('syl')[0] + syl_zone = surf_dict[syl.getAttribute('facs').value[1:]] + syl_avg_x = (syl_zone['ulx'] + syl_zone['lrx']) // 2 + syl_avg_y = (syl_zone['uly'] + syl_zone['lry']) // 2 + + # don't draw a line to a blank syllable + if not syl_avg_x or syl_avg_y: + continue + draw.line((neume_avg_x, neume_avg_y, syl_avg_x, syl_avg_y), fill='black', width=3) + + im.save(out_fname) diff --git a/rodan-main/code/rodan/jobs/MEI_resizing/.gitignore b/rodan-main/code/rodan/jobs/MEI_resizing/.gitignore new file mode 100644 index 000000000..2729cb226 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_resizing/.gitignore @@ -0,0 +1,141 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/python +# Edit at https://www.toptal.com/developers/gitignore?templates=python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +pytestdebug.log + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ +doc/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# End of https://www.toptal.com/developers/gitignore/api/python diff --git a/rodan-main/code/rodan/jobs/MEI_resizing/LICENSE b/rodan-main/code/rodan/jobs/MEI_resizing/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_resizing/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/rodan-main/code/rodan/jobs/MEI_resizing/README.md b/rodan-main/code/rodan/jobs/MEI_resizing/README.md new file mode 100644 index 000000000..da82f6863 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_resizing/README.md @@ -0,0 +1,3 @@ +# MEI Scaling + +Scale the facsimile of an MEI file! In Rodan! diff --git a/rodan-main/code/rodan/jobs/MEI_resizing/__init__.py b/rodan-main/code/rodan/jobs/MEI_resizing/__init__.py new file mode 100644 index 000000000..b25c32568 --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_resizing/__init__.py @@ -0,0 +1,7 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + + +__version__ = "0.1.1" +from rodan.jobs import module_loader +module_loader('rodan.jobs.MEI_resizing.mei_resize') diff --git a/rodan-main/code/rodan/jobs/MEI_resizing/mei_resize.py b/rodan-main/code/rodan/jobs/MEI_resizing/mei_resize.py new file mode 100644 index 000000000..1fdfd0d4f --- /dev/null +++ b/rodan-main/code/rodan/jobs/MEI_resizing/mei_resize.py @@ -0,0 +1,103 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + + +import pymei + +from celery.utils.log import get_task_logger +from rodan.jobs.base import RodanTask + + +def recurse_scale(factor, element): + """Scale down coordinated atts of element and its descendants""" + if element.hasAttribute('ulx'): + ulx = element.getAttribute('ulx') + ulx.setValue(str(int(int(ulx.getValue()) * factor))) + if element.hasAttribute('uly'): + uly = element.getAttribute('uly') + uly.setValue(str(int(int(uly.getValue()) * factor))) + if element.hasAttribute('lrx'): + lrx = element.getAttribute('lrx') + lrx.setValue(str(int(int(lrx.getValue()) * factor))) + if element.hasAttribute('lry'): + lry = element.getAttribute('lry') + lry.setValue(str(int(int(lry.getValue()) * factor))) + + for child in element.getChildren(): + recurse_scale(factor, child) + + +class MEI_Resize(RodanTask): + name = 'MEI Resizing' + author = 'Juliette Regimbal' + description = 'Scale the facsimile of an MEI file' + enabled = True + category = 'Encoding' + interactive = False + logger = get_task_logger(__name__) + + settings = { + 'job_queue': 'Python2', + 'type': 'object', + 'title': 'Settings', + 'properties': { + 'Scale Factor': { + 'type': 'number', + 'minimum': 0, + 'default': 1, + 'exclusiveMinimum': True, + 'description': 'Only used when scale input port is unused.' + } + } + } + + input_port_types = [ + { + 'name': 'MEI', + 'minimum': 1, + 'maximum': 1, + 'resource_types': ['application/mei+xml'] + }, + { + 'name': 'Scale Value', + 'minimum': 0, + 'maximum': 1, + 'resource_types': ['text/plain'] + } + ] + + output_port_types = [ + { + 'name': 'MEI', + 'minimum': 1, + 'maximum': 1, + 'resource_types': ['application/mei+xml'] + } + ] + + def run_my_task(self, inputs, settings, outputs): + self.logger.info(settings) + + if "Scale Value" in inputs: + scale_path = inputs['Scale Value'][0]['resource_path'] + with open(scale_path, 'r') as f: + factor = float(f.read()) + else: + factor = settings['Scale Factor'] + + self.logger.info("Attempting to scale by {}%...".format(factor * 100)) + + input_path = inputs['MEI'][0]['resource_path'] + output_path = outputs['MEI'][0]['resource_path'] + + doc = pymei.documentFromFile(input_path) + mei = doc.getMeiDocument() + facsimiles = mei.getElementsByName('facsimile') + if len(facsimiles) > 0: + pass + else: + self.logger.warn("No facsimiles in this file!") + + recurse_scale(factor, facsimiles[0]) + result = pymei.documentToFile(mei, output_path) + self.logger.info("Result: {}".format(result)) diff --git a/rodan/jobs/__init__.py b/rodan-main/code/rodan/jobs/__init__.py similarity index 100% rename from rodan/jobs/__init__.py rename to rodan-main/code/rodan/jobs/__init__.py diff --git a/rodan/jobs/base.py b/rodan-main/code/rodan/jobs/base.py similarity index 100% rename from rodan/jobs/base.py rename to rodan-main/code/rodan/jobs/base.py diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/.github/workflows/rodan-job.yml b/rodan-main/code/rodan/jobs/biollante_rodan/.github/workflows/rodan-job.yml new file mode 100644 index 000000000..b4c110dff --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/.github/workflows/rodan-job.yml @@ -0,0 +1,38 @@ +# This workflow will lint the project using flake8 and run tests. + +name: Biollante Rodan Job +on: + push: + branches: [ master, develop ] + pull_request: + branches: [ master, develop ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 2.7 + uses: actions/setup-python@v2 + with: + python-version: 2.7 + - name: Install Gamera + run: | + git clone https://github.com/hsnr-gamera/gamera.git ./gamera + cd gamera + # Checkout version used in Rodan + git reset --hard c77194d5e839204efc617971233967ba5a6c53bc + python setup.py install --nowx + cd .. + rm -rf gamera + - name: Install flake8 + run: | + python -m pip install --upgrade pip + pip install flake8 + # if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + flake8 . --count --statistics + - name: Run tests + run: | + python -m unittest knnga_util_test diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/.gitignore b/rodan-main/code/rodan/jobs/biollante_rodan/.gitignore new file mode 100644 index 000000000..ad79204b3 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/.gitignore @@ -0,0 +1,102 @@ +# Created by https://www.gitignore.io/api/python + +### Python ### +# Byte-compiled / optimized / DLL files +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +.pytest_cache/ +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule.* + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + + +# End of https://www.gitignore.io/api/python diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/CONTRIBUTING.md b/rodan-main/code/rodan/jobs/biollante_rodan/CONTRIBUTING.md new file mode 100644 index 000000000..17d155b80 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/CONTRIBUTING.md @@ -0,0 +1,17 @@ +#### Note on SPDX License Identifier + +The [SPDX License Identifier](https://spdx.dev/ids/) is used in place of the full GPL header that should appear in every source file of this project. +The text `SPDX-License-Identifier: GPL-3.0-or-later` should be included as a comment (along with general copyright information) at the top of files instead. +The header it replaces is: +> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +> +>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +> +>You should have received a copy of the GNU General Public License along with this program. If not, see . + +An example of the full usage of this identifier in Python is: +```python +# Description of the file +# Copyright (C) 20xx Author Name +# SPDX-License-Identifier: GPL-3.0-or-later +``` diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/LICENSE b/rodan-main/code/rodan/jobs/biollante_rodan/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/README.md b/rodan-main/code/rodan/jobs/biollante_rodan/README.md new file mode 100644 index 000000000..8f8306274 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/README.md @@ -0,0 +1,9 @@ +# Biollante Rodan + +This is [Gamera's](https://gamera.informatik.hsnr.de/) genetic algorithm optimizer for kNN classifiers ([Biollante](https://gamera.informatik.hsnr.de/docs/gamera-docs/ga_optimization.html#user-interface-biollante)) adapted for use in [Rodan](http://ddmal.music.mcgill.ca/Rodan/). + +This is a work in progress. + +## License + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/__init__.py b/rodan-main/code/rodan/jobs/biollante_rodan/__init__.py new file mode 100644 index 000000000..a6bbf5c0c --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/__init__.py @@ -0,0 +1,6 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + + +__version__ = "0.2.2" +from biollante_rodan import BiollanteRodan # noqa diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/biollante_rodan.py b/rodan-main/code/rodan/jobs/biollante_rodan/biollante_rodan.py new file mode 100644 index 000000000..bcea94f27 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/biollante_rodan.py @@ -0,0 +1,333 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import unicode_literals + +from celery.utils.log import get_task_logger +from gamera import knn, knnga +from rodan.jobs.base import RodanTask +from tempfile import NamedTemporaryFile as NTF +from time import sleep + +import json +import knnga_util as util +import shutil + + +STATE_INIT = 0 +STATE_NOT_OPTIMIZING = 1 +STATE_OPTIMIZING = 2 +STATE_FINISHING = 3 + + +class BiollanteRodan(RodanTask): + name = "Biollante" + author = "Juliette Regimbal" + description = "GA Optimizer for kNN Classifiers" + settings = { + "job_queue": "Python2" # This is due to using gamera + } + enabled = True + category = "Optimization" + interactive = True + + base = None + selection = None + replacement = None + mutation = None + crossover = None + stop_criteria = None + optimizer = None + + logger = get_task_logger(__name__) + + input_port_types = [ + { + "name": "Classifier Data", + "minimum": 1, + "maximum": 1, + "resource_types": ["application/gamera+xml"] + } + ] + output_port_types = [ + { + "name": "Feature Weights/Selection", + "minimum": 1, + "maximum": 1, + "resource_types": ["application/gamera+xml"] + } + ] + + def get_my_interface(self, inputs, settings): + self.logger.info(settings) + context = { + "base": json.loads(settings["@base"]), + "selection": json.loads(settings["@selection"]), + "replacement": json.loads(settings["@replacement"]), + "mutation": json.loads(settings["@mutation"]), + "crossover": json.loads(settings["@crossover"]), + "stop_criteria": json.loads(settings["@stop_criteria"]), + "optimizer": settings["@results"], + "weights": settings["@weights"], + } + return "index.html", context + + def validate_my_user_input(self, inputs, settings, user_input): + assert settings["@state"] == STATE_NOT_OPTIMIZING, \ + "Must not be optimizing! State is %s" % str(settings["@state"]) + + # Start the optimization process + if user_input["method"] == "start": + try: + self.setup_optimizer(user_input, settings["@num_features"]) + except Exception as e: + raise self.ManualPhaseException(str(e)) + + d = self.knnga_dict() + d["@state"] = STATE_OPTIMIZING + d["@settings"] = settings["@settings"] + return d + + # Save the latest classifier version and finsh job. + elif user_input["method"] == "finish": + return { + "@state": STATE_FINISHING, + "@settings": settings["@settings"] + } + else: + self.logger.warn("Unknown method: %s" % user_input["method"]) + return {} + + def run_my_task(self, inputs, settings, outputs): + if "@state" not in settings: + settings["@state"] = STATE_INIT + + if settings["@state"] == STATE_INIT: + self.logger.info("State: Init") + + with NTF(suffix=".xml") as temp: + self.logger.info(temp.name) + # Gamera fails to load files without xml extension. + shutil.copy2( + inputs["Classifier Data"][0]["resource_path"], + temp.name + ) + classifier = knn.kNNNonInteractive(temp.name) + + with NTF() as temp: + classifier.save_settings(temp.name) + temp.flush() + temp.seek(0) + settings["@settings"] = temp.read() + + # Preserve the number of features and weights for + # certain kinds of operations the GA optimizer might perform. + # (e.g., Gauss mutation) + settings["@num_features"] = classifier.num_features + settings["@weights"] = classifier.get_weights_by_features() + + self.base = knnga.GABaseSetting() + self.selection = util.SerializableSelection() + self.replacement = util.SerializableReplacement() + self.mutation = util.SerializableMutation() + self.crossover = util.SerializableCrossover() + self.stop_criteria = util.SerializableStopCriteria() + + settings["@state"] = STATE_NOT_OPTIMIZING + + if settings["@state"] == STATE_NOT_OPTIMIZING: + self.logger.info("State: Not Optimizing") + + # Create set of parameters for template + d = self.knnga_dict() + d["@state"] = STATE_NOT_OPTIMIZING + d["@settings"] = settings["@settings"] + d["@weights"] = settings["@weights"] + return self.WAITING_FOR_INPUT(d) + + elif settings["@state"] == STATE_OPTIMIZING: + self.logger.info("State: Optimizing") + self.load_from_settings(settings) + + # Load data + with NTF(suffix=".xml") as temp: + shutil.copy2( + inputs["Classifier Data"][0]["resource_path"], + temp.name + ) + classifier = knn.kNNNonInteractive(temp.name) + + # Load selection and weights + with NTF(suffix=".xml") as temp: + temp.write(settings["@settings"]) + temp.flush() + classifier.load_settings(temp.name) + + self.optimizer = knnga.GAOptimization( + classifier, + self.base, + self.selection.selection, + self.crossover.crossover, + self.mutation.mutation, + self.replacement.replacement, + self.stop_criteria.sc, + knnga.GAParallelization(True, 4) + ) + + assert isinstance(self.optimizer, knnga.GAOptimization), \ + "Optimizer is %s" % str(type(self.optimizer)) + + try: + self.optimizer.startCalculation() + except Exception as e: + self.logger.error(e) + self.logger.error("Failed to start optimizing!") + return False + + # Wait for optimization to finish + while self.optimizer.status: + sleep(30000) # 30 seconds + self.logger.info(self.optimizer.monitorString) + + # This is necessary since the classifier object isn't persistent + settings = self.knnga_dict() + + with NTF() as temp: + classifier.save_settings(temp.name) + temp.flush() + temp.seek(0) + settings["@settings"] = temp.read() + + self.logger.info(classifier.get_weights_by_features()) + settings["@state"] = STATE_NOT_OPTIMIZING + settings["@weights"] = classifier.get_weights_by_features() + return self.WAITING_FOR_INPUT(settings) + + else: # Finish + self.logger.info("State: Finishing") + with open( + outputs["Feature Weights/Selection"][0]["resource_path"], 'w' + ) as f: + f.write(settings["@settings"]) + return True + + def my_error_information(self, exc, traceback): + raise NotImplementedError + + def test_my_task(self, testcase): + with NTF() as outfile: + inputs = { + "kNN Training Data": [ + { + "resource_path": + "rodan/jobs/biollante-rodan/test_resources/" + + "Dalhousie_TD_421_422_NC-based_classifier.xml" + } + ] + } + outputs = { + "GA Optimized Classifier": [ + {"resource_path": outfile.name} + ] + } + + # Test initial run + result = self.run_my_task(inputs, {}, outputs) + testcase.assertTrue( + isinstance(result, self.WAITING_FOR_INPUT), + "Result was actually %s" % type(result) + ) + testcase.assertEqual( + result.settings_update["@state"], + STATE_NOT_OPTIMIZING, + "State was %s" % str(result.settings_update["@state"]) + ) + + # Start without enough GA optimizer settings + with testcase.assertRaises(self.ManualPhaseException): + self.validate_my_user_input( + inputs, + {"@state": STATE_NOT_OPTIMIZING, "@num_features": 42}, + {"method": "start"} + ) + + # Try to write in finish step + settings = { + "@state": STATE_FINISHING, + "@settings": "Hello, Test!" + } + testcase.assertTrue(self.run_my_task(inputs, settings, outputs)) + outfile.seek(0) + contents = outfile.read() + testcase.assertEqual(contents, "Hello, Test!", contents) + return True + + def knnga_dict(self): + """ + Return a dictionary object with serializations + of settings objects and a result summary (if any). + """ + return { + "@base": util.base_to_json(self.base), + "@selection": self.selection.toJSON(), + "@replacement": self.replacement.toJSON(), + "@mutation": self.mutation.toJSON(), + "@crossover": self.crossover.toJSON(), + "@stop_criteria": self.stop_criteria.toJSON(), + "@results": None if self.optimizer is None else { + "generation": self.optimizer.generation, + "bestFitness": self.optimizer.bestFitness, + } + } + + def load_from_settings(self, settings): + self.base = util.json_to_base(settings["@base"]) + self.selection = util.SerializableSelection.fromJSON( + settings["@selection"] + ) + self.replacement = util.SerializableReplacement.fromJSON( + settings["@replacement"] + ) + self.mutation = util.SerializableMutation.fromJSON( + settings["@mutation"] + ) + self.crossover = util.SerializableCrossover.fromJSON( + settings["@crossover"] + ) + self.stop_criteria = util.SerializableStopCriteria.fromJSON( + settings["@stop_criteria"] + ) + + def setup_optimizer(self, options, num_features): + """ + Ensure we have the info necessary to run GA optimization. + """ + assert num_features is not None, "NUM FEATURES" + base = util.dict_to_base(options["base"]) + selection = util.SerializableSelection.from_dict( + options["selection"] + ) + replacement = util.SerializableReplacement.from_dict( + options["replacement"] + ) + mutation = util.SerializableMutation.from_dict( + options["mutation"], + num_features + ) + crossover = util.SerializableCrossover.from_dict( + options["crossover"], + num_features + ) + stop_criteria = util.SerializableStopCriteria.from_dict( + options["stop_criteria"] + ) + + assert selection.method is not None, "No selection method" + assert replacement.method is not None, "No replacement method" + assert len(mutation.methods) > 0, "No mutation methods" + assert len(crossover.methods) > 0, "No crossover methods" + assert len(stop_criteria.methods) > 0, "No stop criteria" + + self.base, self.selection, self.replacement, self.mutation, \ + self.crossover, self.stop_criteria = base, selection, \ + replacement, mutation, crossover, stop_criteria diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/index.html b/rodan-main/code/rodan/jobs/biollante_rodan/index.html new file mode 100644 index 000000000..6a98da289 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/index.html @@ -0,0 +1,411 @@ + + + + + Biollante - GA Optimization + + + + +
                  + +
                  +
                  +
                  +
                  + {% if optimizer %} +

                  Latest Optimizer Results

                  +

                  Last Generation: {{ optimizer.generation }}

                  +

                  Best Result: {{ optimizer.bestFitness }}

                  + {% else %} +

                  No previous optimizer results.

                  + {% endif %} +
                  +
                  +
                  +
                  +

                  Base Settings

                  +
                  +
                  + + +
                  +
                  +
                  + +
                  + +
                  +
                  +
                  + +
                  + +
                  +
                  +
                  + +
                  + +
                  +
                  +
                  +
                  +
                  + + +
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + + + + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + + + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + + + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + + + + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + + + + + + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + +
                  +
                  +
                  +
                  + +
                  +
                  + + + + +
                  +
                  +
                  +
                  +
                  + + +
                  +
                  +
                  +
                  +
                  +
                  + {% if weights %} + + + + + + + + + {% for name, values in weights.items %} + {% for value in values %} + + + + + {% endfor %} + {% endfor %} + +
                  Feature NameWeight
                  {{ name }} - {{ forloop.counter0 }} + {% with v=value|floatformat:2 %} +
                  + {{ v }}  + {{ v }}% +
                  + {% endwith %} +
                  + {% else %} +

                  No weights! An error occurred.

                  + {% endif %} +
                  +
                  + + + diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util.py b/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util.py new file mode 100644 index 000000000..8fc5bf2d1 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util.py @@ -0,0 +1,627 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import unicode_literals +from gamera import knnga + +import json + + +# All default values are taken from the +# corresponding Gamera functions. +DEFAULT_PRESSURE = 2.0 +DEFAULT_EXPONENT = 1.0 +DEFAULT_TSIZE = 3 +DEFAULT_RATE = 0.05 +DEFAULT_ALPHA = 0.0 +DEFAULT_ETA = 1.0 +DEFAULT_PREFERENCE = 0.5 +DEFAULT_OPTIMUM = 1.0 +DEFAULT_EVAL_N = 5000 +DEFAULT_GEN_N = 100 +DEFAULT_MIN_GEN = 40 +DEFAULT_NO_CHANGE_GEN = 10 + + +class SerializableSelection(): + """ + Extension of gamera.knnga.GASelection that provides + access to the selection and parameters used. + """ + + def __init__(self): + self.method = None + self.parameters = {} + self.selection = knnga.GASelection() + + def __eq__(self, other): + if isinstance(other, self.__class__): + a = self.__dict__.copy() + del a['selection'] + b = other.__dict__.copy() + del b['selection'] + return a == b + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def setRandomSelection(self): + self.method = "random" + self.parameters = {} + self.selection.setRandomSelection() + + def setRankSelection( + self, + pressure=DEFAULT_PRESSURE, + exponent=DEFAULT_EXPONENT + ): + self.method = "rank" + self.parameters = { + "pressure": pressure, + "exponent": exponent + } + self.selection.setRankSelection(pressure, exponent) + + def setRouletteWheel(self): + self.method = "roulette" + self.parameters = {} + self.selection.setRoulettWheel() + + def setRouletteWheelScaled(self, pressure=DEFAULT_PRESSURE): + self.method = "roulette_scaled" + self.parameters = {"pressure": pressure} + self.selection.setRoulettWheelScaled(pressure) + + def setStochUniSampling(self): + self.method = "stochiastic" + self.parameters = {} + self.selection.setStochUniSampling() + + def setTournamentSelection(self, tSize=DEFAULT_TSIZE): + self.method = "tournament" + self.parameters = {"tSize": tSize} + self.selection.setTournamentSelection(tSize) + + def toJSON(self): + d = self.__dict__.copy() + del d['selection'] + return json.dumps(d) + + @staticmethod + def fromJSON(jsonString): + d = json.loads(jsonString) + return SerializableSelection.from_dict(d) + + @staticmethod + def from_dict(d): + p = d["parameters"] + e = SerializableSelection() + + if d["method"] == "random": + e.setRandomSelection() + elif d["method"] == "rank": + if "pressure" in p and "exponent" in p: + e.setRankSelection(p["pressure"], p["exponent"]) + elif "pressure" in p: + e.setRankSelection(p["pressure"]) + elif "exponent" in p: + e.setRankSelection(exponent=p["exponent"]) + else: + e.setRankSelection() + elif d["method"] == "roulette": + e.setRouletteWheel() + elif d["method"] == "roulette_scaled": + if "pressure" in p: + e.setRouletteWheelScaled(p["pressure"]) + else: + e.setRouletteWheelScaled() + elif d["method"] == "stochiastic": + e.setStochUniSampling() + elif d["method"] == "tournament": + if "tSize" in p: + e.setTournamentSelection(p["tSize"]) + return e + + +class SerializableReplacement(): + """ + Extension of gamera.knnga.GAReplacement that provides + access to selection method and parameters. + """ + + def __init__(self): + self.method = None + self.parameters = {} + self.replacement = knnga.GAReplacement() + + def __eq__(self, other): + if isinstance(other, self.__class__): + a = self.__dict__.copy() + del a['replacement'] + b = other.__dict__.copy() + del b['replacement'] + return a == b + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def setGenerationalReplacement(self): + self.method = "generational" + self.parameters = {} + self.replacement.setGenerationalReplacement() + + def setSSGAdetTournament(self, tSize=DEFAULT_TSIZE): + self.method = "SSGAdetTournament" + self.parameters = {"tSize": tSize} + self.replacement.setSSGAdetTournament(tSize) + + def setSSGAworse(self): + self.method = "SSGAworse" + self.parameters = {} + self.replacement.setSSGAworse() + + def toJSON(self): + d = self.__dict__.copy() + del d['replacement'] + return json.dumps(d) + + @staticmethod + def fromJSON(jsonString): + d = json.loads(jsonString) + return SerializableReplacement.from_dict(d) + + @staticmethod + def from_dict(d): + e = SerializableReplacement() + if d["method"] == "generational": + e.setGenerationalReplacement() + elif d["method"] == "SSGAdetTournament": + if "tSize" in d["parameters"]: + e.setSSGAdetTournament(d["parameters"]["tSize"]) + else: + e.setSSGAdetTournament() + elif d["method"] == "SSGAworse": + e.setSSGAworse() + return e + + +class SerializableMutation: + """ + Extension of gamera.knnga.GAMutation that provides + access to mutation methods and parameters + """ + + def __init__(self): + self.methods = [] + self.mutation = knnga.GAMutation() + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.methods == other.methods + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def setBinaryMutation(self, rate=DEFAULT_RATE, normalize=True): + self.methods = [x for x in self.methods if x["method"] != "binary"] + self.methods.append( + { + "method": "binary", + "parameters": { + "rate": rate, + "normalize": normalize + } + } + ) + self.methods.sort() + self.mutation.setBinaryMutation(rate, normalize) + + def setGaussMutation(self, numFeatures, minVal, maxVal, sigma, rate): + self.methods = [x for x in self.methods if x["method"] != "gauss"] + self.methods.append( + { + "method": "gauss", + "parameters": { + "numFeatures": numFeatures, + "min": minVal, + "max": maxVal, + "sigma": sigma, + "rate": rate + } + } + ) + self.methods.sort() + self.mutation.setGaussMutation( + numFeatures, + minVal, + maxVal, + sigma, + rate + ) + + def setInversionMutation(self): + if not len([x for x in self.methods if x["method"] == "inversion"]): + self.methods.append( + { + "method": "inversion", + "parameters": {} + } + ) + self.methods.sort() + self.mutation.setInversionMutation() + + def setShiftMutation(self): + if not len([x for x in self.methods if x["method"] == "shift"]): + self.methods.append( + { + "method": "shift", + "parameters": {} + } + ) + self.methods.sort() + self.mutation.setShiftMutation() + + def setSwapMutation(self): + if not len([x for x in self.methods if x["method"] == "swap"]): + self.methods.append( + { + "method": "swap", + "parameters": {} + } + ) + self.methods.sort() + self.mutation.setSwapMutation() + + def toJSON(self): + return json.dumps(self.methods) + + @staticmethod + def fromJSON(jsonString): + d = json.loads(jsonString) + return SerializableMutation.from_dict(d) + + @staticmethod + def from_dict(d, num_features=None): + e = SerializableMutation() + for op in d: + m = op["method"] + p = op["parameters"] + + if m == "binary": + if "rate" in p and "normalize" in p: + e.setBinaryMutation(p["rate"], p["normalize"]) + elif "rate" in p: + e.setBinaryMutation(p["rate"]) + elif "normalize" in p: + e.setBinaryMutation(normalize=p["normalize"]) + else: + e.setBinaryMutation + elif m == "gauss": + num = num_features if num_features is not None \ + else p["numFeatures"] + e.setGaussMutation( + num, + p["min"], + p["max"], + p["sigma"], + p["rate"] + ) + elif m == "inversion": + e.setInversionMutation() + elif m == "shift": + e.setShiftMutation() + elif m == "swap": + e.setSwapMutation() + + return e + + +class SerializableCrossover: + """ + Serializable version of gamera.knnga.GACrossover. + """ + + def __init__(self): + self.methods = [] + self.crossover = knnga.GACrossover() + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.methods == other.methods + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def setHypercubeCrossover( + self, + numFeatures, + min, + max, + alpha=DEFAULT_ALPHA + ): + self.methods = [x for x in self.methods if x["method"] != "hypercube"] + self.methods.append( + { + "method": "hypercube", + "parameters": { + "numFeatures": numFeatures, + "min": min, + "max": max, + "alpha": alpha + } + } + ) + self.methods.sort() + self.crossover.setHypercubeCrossover(numFeatures, min, max, alpha) + + def setNPointCrossover(self, n): + self.methods = [x for x in self.methods if x["method"] != "nPoint"] + self.methods.append( + { + "method": "nPoint", + "parameters": {"n": n} + } + ) + self.methods.sort() + self.crossover.setNPointCrossover(n) + + def setSBXCrossover(self, numFeatures, min, max, eta=DEFAULT_ETA): + self.methods = [x for x in self.methods if x["method"] != "sbx"] + self.methods.append( + { + "method": "sbx", + "parameters": { + "numFeatures": numFeatures, + "min": min, + "max": max, + "eta": eta + } + } + ) + self.methods.sort() + self.crossover.setSBXcrossover(numFeatures, min, max, eta) + + def setSegmentCrossover(self, numFeatures, min, max, alpha=DEFAULT_ALPHA): + self.methods = [x for x in self.methods if x["method"] != "segment"] + self.methods.append( + { + "method": "segment", + "parameters": { + "numFeatures": numFeatures, + "min": min, + "max": max, + "alpha": alpha + } + } + ) + self.methods.sort() + self.crossover.setSegmentCrossover(numFeatures, min, max, alpha) + + def setUniformCrossover(self, preference=DEFAULT_PREFERENCE): + self.methods = [x for x in self.methods if x["method"] != "uniform"] + self.methods.append( + { + "method": "uniform", + "parameters": {"preference": preference} + } + ) + self.methods.sort() + self.crossover.setUniformCrossover(preference) + + def toJSON(self): + return json.dumps(self.methods) + + @staticmethod + def fromJSON(jsonString): + d = json.loads(jsonString) + return SerializableCrossover.from_dict(d) + + @staticmethod + def from_dict(d, num_features=None): + e = SerializableCrossover() + for op in d: + m = op["method"] + p = op["parameters"] + + if m == "hypercube": + num = num_features if num_features is not None \ + else p["numFeatures"] + if "alpha" in p: + e.setHypercubeCrossover( + num, + p["min"], + p["max"], + p["alpha"] + ) + else: + e.setHypercubeCrossover( + num, + p["min"], + p["max"] + ) + elif m == "nPoint": + e.setNPointCrossover(p["n"]) + elif m == "sbx": + num = num_features if num_features is not None \ + else p["numFeatures"] + if "eta" in p: + e.setSBXCrossover( + num, + p["min"], + p["max"], + p["eta"] + ) + else: + e.setSBXCrossover( + num, + p["min"], + p["max"] + ) + elif m == "segment": + num = num_features if num_features is not None \ + else p["numFeatures"] + if "alpha" in p: + e.setSegmentCrossover( + num, + p["min"], + p["max"], + p["alpha"] + ) + else: + e.setSegmentCrossover( + num, + p["min"], + p["max"] + ) + elif m == "uniform": + if "preference" in p: + e.setUniformCrossover(p["preference"]) + else: + e.setUniformCrossover() + return e + + +class SerializableStopCriteria: + """ + Serializable version of gamera.knnga.GAStopCriteria + """ + + def __init__(self): + self.methods = [] + self.sc = knnga.GAStopCriteria() + + def __eq__(self, other): + if isinstance(other, self.__class__): + return self.methods == other.methods + else: + return False + + def __ne__(self, other): + return not self.__eq__(other) + + def setBestFitnessStop(self, optimum=DEFAULT_OPTIMUM): + self.methods = [x for x in self.methods + if x["method"] != "bestFitness"] + self.methods.append( + { + "method": "bestFitness", + "parameters": {"optimum": optimum} + } + ) + self.methods.sort() + self.sc.setBestFitnessStop(optimum) + + def setMaxFitnessEvals(self, n=DEFAULT_EVAL_N): + self.methods = [x for x in self.methods + if x["method"] != "maxFitnessEvals"] + self.methods.append( + { + "method": "maxFitnessEvals", + "parameters": {"n": n} + } + ) + self.methods.sort() + self.sc.setMaxFitnessEvals(n) + + def setMaxGenerations(self, n=DEFAULT_GEN_N): + self.methods = [x for x in self.methods + if x["method"] != "maxGenerations"] + self.methods.append( + { + "method": "maxGenerations", + "parameters": {"n": n} + } + ) + self.methods.sort() + self.sc.setMaxGenerations(n) + + def setSteadyStateStop( + self, + minGens=DEFAULT_MIN_GEN, + noChangeGens=DEFAULT_NO_CHANGE_GEN + ): + self.methods = [x for x in self.methods + if x["method"] != "steadyState"] + self.methods.append( + { + "method": "steadyState", + "parameters": { + "minGens": minGens, + "noChangeGens": noChangeGens + } + } + ) + self.methods.sort() + self.sc.setSteadyStateStop(minGens, noChangeGens) + + def toJSON(self): + return json.dumps(self.methods) + + @staticmethod + def fromJSON(jsonString): + d = json.loads(jsonString) + return SerializableStopCriteria.from_dict(d) + + @staticmethod + def from_dict(d): + e = SerializableStopCriteria() + for op in d: + m = op["method"] + p = op["parameters"] + + if m == "bestFitness": + if "optimum" in p: + e.setBestFitnessStop(p["optimum"]) + else: + e.setBestFitnessStop() + elif m == "maxFitnessEvals": + if "n" in p: + e.setMaxFitnessEvals(p["n"]) + else: + e.setMaxFitnessEvals() + elif m == "maxGenerations": + if "n" in p: + e.setMaxGenerations(p["n"]) + else: + e.setMaxGenerations() + elif m == "steadyState": + if "minGens" in p and "noChangeGens" in p: + e.setSteadyStateStop(p["minGens"], p["noChangeGens"]) + elif "minGens" in p: + e.setSteadyStateStop(p["minGens"]) + elif "noChangeGens" in p: + e.setSteadyStateStop(noChangeGens=p["noChangeGens"]) + else: + e.setSteadyStateStop() + return e + + +def base_to_json(setting): + return json.dumps({ + "opMode": setting.opMode, + "popSize": setting.popSize, + "crossRate": setting.crossRate, + "mutRate": setting.mutRate + }) + + +def json_to_base(jsonString): + vals = json.loads(jsonString) + return dict_to_base(vals) + + +def dict_to_base(vals): + base = knnga.GABaseSetting() + base.opMode = vals["opMode"] + base.popSize = vals["popSize"] + base.crossRate = vals["crossRate"] + base.mutRate = vals["mutRate"] + return base diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util_test.py b/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util_test.py new file mode 100644 index 000000000..4db296e44 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/knnga_util_test.py @@ -0,0 +1,285 @@ +# Copyright (C) 2020 Juliette Regimbal +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import unicode_literals +from gamera import knnga + +import json +import knnga_util +import unittest + + +class TestSelection(unittest.TestCase): + def setUp(self): + self.selection = knnga_util.SerializableSelection() + + def tearDown(self): + self.selection = None + + def test_to_json(self): + self.selection.setRandomSelection() # This should be overwritten + self.selection.setRankSelection(1.5, 1.0) + self.assertEqual( + json.loads(self.selection.toJSON()), + { + "method": "rank", + "parameters": { + "pressure": 1.5, + "exponent": 1.0 + } + } + ) + + def test_from_json(self): + self.selection.setRouletteWheelScaled() + testJSON = self.selection.toJSON() + test = knnga_util.SerializableSelection.fromJSON(testJSON) + self.assertEqual(self.selection, test) + + def test_overwrite(self): + self.selection.setRouletteWheel() + self.assertEqual(self.selection.method, "roulette") + self.assertEqual(len(self.selection.parameters), 0) + self.selection.setTournamentSelection(3) + self.assertEqual(self.selection.method, "tournament") + self.assertEqual(len(self.selection.parameters), 1) + self.assertEqual(self.selection.parameters["tSize"], 3) + + def test_all_settings(self): + # This just shouldn't error + self.selection.setRandomSelection() + self.selection.setRankSelection() + self.selection.setRouletteWheel() + self.selection.setRouletteWheelScaled() + self.selection.setStochUniSampling() + self.selection.setTournamentSelection() + + +class TestReplacement(unittest.TestCase): + def setUp(self): + self.replacement = knnga_util.SerializableReplacement() + + def tearDown(self): + self.replacement = None + + def test_to_json(self): + # This should be overwritten + self.replacement.setGenerationalReplacement() + self.replacement.setSSGAdetTournament(30) + self.assertEqual( + json.loads(self.replacement.toJSON()), + { + "method": "SSGAdetTournament", + "parameters": {"tSize": 30} + } + ) + + def test_from_json(self): + self.replacement.setSSGAworse() + testJSON = self.replacement.toJSON() + test = knnga_util.SerializableReplacement.fromJSON(testJSON) + self.assertEqual(self.replacement, test) + + def test_overwrite(self): + self.replacement.setSSGAworse() + self.assertEqual(self.replacement.method, "SSGAworse") + self.assertEqual(len(self.replacement.parameters), 0) + self.replacement.setSSGAdetTournament(3) + self.assertEqual(self.replacement.method, "SSGAdetTournament") + self.assertEqual(len(self.replacement.parameters), 1) + self.assertEqual(self.replacement.parameters["tSize"], 3) + + def test_all_settings(self): + # This just shouldn't error + self.replacement.setGenerationalReplacement() + self.replacement.setSSGAdetTournament() + self.replacement.setSSGAworse() + + +class TestMutation(unittest.TestCase): + def setUp(self): + self.mutation = knnga_util.SerializableMutation() + + def tearDown(self): + self.mutation = None + + def test_to_json(self): + # These should be combined + self.mutation.setInversionMutation() + self.mutation.setGaussMutation(30, 0.0, 1.0, 0.5, 1.0) + self.assertEqual( + json.loads(self.mutation.toJSON()), + sorted([{ + "method": "inversion", + "parameters": {} + }, { + "method": "gauss", + "parameters": { + "numFeatures": 30, + "min": 0.0, + "max": 1.0, + "sigma": 0.5, + "rate": 1.0 + } + }]) + ) + + def test_from_json(self): + self.mutation.setInversionMutation() + self.mutation.setBinaryMutation() + testJSON = self.mutation.toJSON() + test = knnga_util.SerializableMutation.fromJSON(testJSON) + self.assertEqual(self.mutation, test) + + def test_overwrite_same(self): + self.mutation.setBinaryMutation(0.07, False) + self.mutation.setBinaryMutation(0.05, True) + self.assertEqual(len(self.mutation.methods), 1) + self.assertEqual( + self.mutation.methods, + [{ + "method": "binary", + "parameters": { + "rate": 0.05, + "normalize": True + } + }] + ) + + def test_all_settings(self): + self.mutation.setBinaryMutation() + self.mutation.setGaussMutation(10, 0.0, 1.0, 0.05, 1.0) + self.mutation.setInversionMutation() + self.mutation.setShiftMutation() + self.mutation.setSwapMutation() + + +class TestCrossover(unittest.TestCase): + def setUp(self): + self.crossover = knnga_util.SerializableCrossover() + + def tearDown(self): + self.tearDown = None + + def test_to_json(self): + # These should be combined + self.crossover.setUniformCrossover() + self.crossover.setHypercubeCrossover(30, 0.0, 1.0) + self.assertEqual( + json.loads(self.crossover.toJSON()), + sorted([{ + "method": "uniform", + "parameters": {"preference": 0.5} + }, { + "method": "hypercube", + "parameters": { + "numFeatures": 30, + "min": 0.0, + "max": 1.0, + "alpha": 0.0 + } + }]) + ) + + def test_from_json(self): + self.crossover.setSegmentCrossover(30, 0.0, 1.0) + testJSON = self.crossover.toJSON() + test = knnga_util.SerializableCrossover.fromJSON(testJSON) + self.assertEqual(self.crossover, test) + + def test_overwrite_same(self): + self.crossover.setNPointCrossover(10) + self.crossover.setNPointCrossover(20) + self.assertEqual(len(self.crossover.methods), 1) + self.assertEqual( + self.crossover.methods, + [{ + "method": "nPoint", + "parameters": {"n": 20} + }] + ) + + def test_all_settings(self): + self.crossover.setHypercubeCrossover(30, 0.0, 1.0, 0.05) + self.crossover.setNPointCrossover(5) + self.crossover.setSBXCrossover(30, 0.0, 1.0, 1.15) + self.crossover.setSegmentCrossover(30, 0.0, 1.0, 0.95) + self.crossover.setUniformCrossover(0.5) + + +class TestStopCriteria(unittest.TestCase): + def setUp(self): + self.sc = knnga_util.SerializableStopCriteria() + + def tearDown(self): + self.sc = None + + def test_to_json(self): + # These should be combined + self.sc.setMaxGenerations(20) + self.sc.setMaxFitnessEvals() + self.assertEqual( + json.loads(self.sc.toJSON()), + sorted([{ + "method": "maxGenerations", + "parameters": {"n": 20} + }, { + "method": "maxFitnessEvals", + "parameters": {"n": 5000} + }]) + ) + + def test_from_json(self): + self.sc.setSteadyStateStop() + testJSON = self.sc.toJSON() + test = knnga_util.SerializableStopCriteria.fromJSON(testJSON) + self.assertEqual(self.sc, test) + + def test_overwrite_same(self): + self.sc.setMaxGenerations(100) + self.sc.setMaxGenerations(150) + self.assertEqual(len(self.sc.methods), 1) + self.assertEqual( + self.sc.methods, + [{ + "method": "maxGenerations", + "parameters": {"n": 150} + }] + ) + + def test_all_settings(self): + self.sc.setBestFitnessStop(1.0) + self.sc.setMaxFitnessEvals(6000) + self.sc.setMaxGenerations(102) + self.sc.setSteadyStateStop(40, 15) + + +class TestBaseSetting(unittest.TestCase): + def test_to_json(self): + base = knnga.GABaseSetting() + self.assertEqual( + json.loads(knnga_util.base_to_json(base)), + { + "opMode": knnga.GA_SELECTION, + "popSize": 75, + "crossRate": 0.95, + "mutRate": 0.05 + } + ) + + def test_from_json(self): + default = knnga.GABaseSetting() + default.popSize = 80 + default.mutRate = 0.06 + loaded = knnga_util.json_to_base( + json.dumps({ + "opMode": knnga.GA_SELECTION, + "popSize": 80, + "crossRate": 0.95, + "mutRate": 0.06 + }) + ) + self.assertEqual(default.opMode, loaded.opMode) + self.assertEqual(default.popSize, loaded.popSize) + self.assertEqual(default.crossRate, loaded.crossRate) + self.assertEqual(default.mutRate, loaded.mutRate) diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/static/index.js b/rodan-main/code/rodan/jobs/biollante_rodan/static/index.js new file mode 100644 index 000000000..bf50c35f5 --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/static/index.js @@ -0,0 +1,257 @@ +/* + * Copyright (C) 2020 Juliette Regimbal + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +// Adjust option visibility based on selected tab +function handleTab (evt) { + console.log(evt); + let tabLabel = evt.target.parentElement; + document.querySelector("#settings-tabs li.is-active").classList.remove("is-active"); + tabLabel.classList.add("is-active"); + document.querySelectorAll(".tab-contents").forEach(el => { el.classList.add("is-sr-only"); }); + switch (tabLabel.id) { + case "tab-selection": + document.getElementById("selection-contents").classList.remove("is-sr-only"); + break; + case "tab-replacement": + document.getElementById("replacement-contents").classList.remove("is-sr-only"); + break; + case "tab-crossover": + document.getElementById("crossover-contents").classList.remove("is-sr-only"); + break; + case "tab-mutation": + document.getElementById("mutation-contents").classList.remove("is-sr-only"); + break; + case "tab-stop-criteria": + document.getElementById("stop-criteria-contents").classList.remove("is-sr-only"); + break; + } +} + +document.querySelectorAll("#settings-tabs li").forEach(tab => { + tab.addEventListener("click", handleTab); +}); + +function sectionTab (evt) { + let tabLabel = evt.target.parentElement; + document.querySelector("#opts-tabs li.is-active").classList.remove("is-active"); + tabLabel.classList.add("is-active"); + document.querySelectorAll(".sec-tab").forEach(tab => { tab.classList.add("is-sr-only"); }); + if (tabLabel.id === "setting-tab") { + document.getElementById("settings").classList.remove("is-sr-only"); + } else if (tabLabel.id === "weight-tab") { + document.getElementById("weights").classList.remove("is-sr-only"); + } +} + +document.querySelectorAll("#opts-tabs li").forEach(tab => { + tab.addEventListener("click", sectionTab); +}); + +// Enable/disable additional parameters based on if an option is selected +function updateHelperDisabled (input) { + let level = input.closest(".level"); + if (level) { + level.querySelectorAll(".level-right input").forEach(el => { el.disabled = !input.checked; }); + } +} + +document.querySelectorAll("#selection-contents input[type='radio']").forEach(input => { + input.addEventListener("input", () => { + document.querySelectorAll("#selection-contents input[type='radio']").forEach(input => { + updateHelperDisabled(input); + }); + }); +}); + +document.querySelectorAll("#replacement-contents input[type='radio']").forEach(input => { + input.addEventListener("input", () => { + document.querySelectorAll("#replacement-contents input[type='radio']").forEach(input => { + updateHelperDisabled(input); + }); + }); +}); + +document.querySelectorAll("#crossover-contents input[type='checkbox']").forEach(input => { + input.addEventListener("input", () => { + document.querySelectorAll("#crossover-contents input[type='checkbox']").forEach(input => { + updateHelperDisabled(input); + }); + }); +}); + +document.querySelectorAll("#mutation-contents input[type='checkbox']").forEach(input => { + input.addEventListener("input", () => { + document.querySelectorAll("#mutation-contents input[type='checkbox']").forEach(input => { + updateHelperDisabled(input); + }); + }); +}); + +document.querySelectorAll("#stop-criteria-contents input[type='checkbox']").forEach(input => { + input.addEventListener("input", () => { + document.querySelectorAll("#stop-criteria-contents input[type='checkbox']").forEach(input => { + updateHelperDisabled(input); + }); + }); +}); + +// Following functions create JSON with options chosen +function generateBase () { + let base = {}; + $('#base-settings input').serializeArray().map(entry => { + if (Number.isNaN(Number(entry.value))) { + base[entry.name] = entry.value; + } else { + base[entry.name] = Number(entry.value); + } + }); + return base; +} + +function generateSelection () { + let vals = {}; + $('#selection-contents input').serializeArray().map(entry => { + if (!Number.isNaN(Number(entry.value))) { + vals[entry.name] = Number(entry.value); + } else { + vals[entry.name] = entry.value; + } + }); + let selection = { + "method": vals["method"], + }; + delete vals.method; + selection.parameters = vals; + return selection; +} + +function generateReplacement () { + let vals = {}; + $("#replacement-contents input").serializeArray().map(entry => { + if (!Number.isNaN(Number(entry.value))) { + vals[entry.name] = Number(entry.value); + } else { + vals[entry.name] = entry.value; + } + }); + let replacement = { + "method": vals["method"], + }; + delete vals.method; + replacement.parameters = vals; + return replacement; +} + +function generateCrossover () { + let crossover = []; + document.querySelectorAll("#crossover-contents input[type='checkbox']:checked").forEach(input => { + let method = { "method": input.value }; + let level = input.closest(".level"); + let vals = {}; + if (level) { + $(level).find(".level-right input").serializeArray().map(entry => { + if (!Number.isNaN(Number(entry.value))) { + vals[entry.name] = Number(entry.value); + } else { + vals[entry.name] = entry.value; + } + }); + } + method.parameters = vals; + crossover.push(method); + }); + return crossover; +} + +function generateMutation () { + let mutation = []; + document.querySelectorAll("#mutation-contents input[type='checkbox']:checked").forEach(input => { + let method = { "method": input.value }; + let level = input.closest(".level"); + let vals = {}; + if (level) { + $(level).find(".level-right input").serializeArray().map(entry => { + if (!Number.isNaN(Number(entry.value))) { + vals[entry.name] = Number(entry.value); + } else { + vals[entry.name] = entry.value; + } + }); + } + method.parameters = vals; + mutation.push(method); + }); + return mutation; +} + +function generateStopCriteria () { + let stopCriteria = []; + document.querySelectorAll("#stop-criteria-contents input[type='checkbox']:checked").forEach(input => { + let method = { "method": input.value }; + let level = input.closest(".level"); + let vals = {}; + if (level) { + $(level).find(".level-right input").serializeArray().map(entry => { + if (!Number.isNaN(Number(entry.value))) { + vals[entry.name] = Number(entry.value); + } else { + vals[entry.name] = entry.value; + } + }); + } + method.parameters = vals; + stopCriteria.push(method); + }); + return stopCriteria; +} + +function generateFullParams () { + return { + "base": generateBase(), + "selection": generateSelection(), + "replacement": generateReplacement(), + "mutation": generateMutation(), + "crossover": generateCrossover(), + "stop_criteria": generateStopCriteria() + }; +} + +$("#start-button").on("click", () => { + let startObj = generateFullParams(); + startObj.method = "start"; + $.ajax({ + contentType: "application/json", + data: JSON.stringify(startObj), + error: (jqXHR, textStatus, error) => { + console.debug(textStatus); + console.debug(error); + }, + method: "POST", + success: (data, textStatus, jqXHR) => { + console.debug("success"); + console.debug(textStatus); + window.close(); + } + }); +}); + +$("#finish-button").on("click", () => { + let obj = generateFullParams(); + obj.method = "finish"; + $.ajax({ + contentType: "application/json", + data: JSON.stringify(obj), + error: (jqXHR, textStatus, error) => { + console.debug(textStatus); + console.debug(error); + }, + method: "POST", + success: (data, textStatus, jqXHR) => { + console.debug("success"); + console.debug(textStatus); + window.close(); + } + }); +}); diff --git a/rodan-main/code/rodan/jobs/biollante_rodan/test_resources/Dalhousie_TD_421_422_NC-based_classifier.xml b/rodan-main/code/rodan/jobs/biollante_rodan/test_resources/Dalhousie_TD_421_422_NC-based_classifier.xml new file mode 100644 index 000000000..e591e4bcb --- /dev/null +++ b/rodan-main/code/rodan/jobs/biollante_rodan/test_resources/Dalhousie_TD_421_422_NC-based_classifier.xml @@ -0,0 +1,58494 @@ + + + + + + + + + 5 14 1 5 8 20 8 20 9 19 9 17 11 16 11 14 14 15 12 15 13 15 15 13 15 + 14 14 13 13 16 12 15 13 15 13 16 12 16 12 16 12 16 12 16 12 16 13 15 + 13 15 12 16 13 15 14 14 14 14 15 13 15 14 14 14 14 14 14 14 15 15 13 + 15 13 13 15 12 14 14 14 14 14 14 13 15 14 14 14 14 13 15 13 15 13 15 + 13 16 12 16 12 16 12 16 12 15 13 15 13 16 12 15 13 15 14 14 14 15 12 + 16 12 16 12 16 12 16 12 16 12 16 12 16 12 16 12 16 14 14 14 14 13 17 + 11 22 5 16 12 16 12 16 12 16 13 15 13 1 1 14 12 16 9 1 1 16 11 17 7 + 22 6 21 7 21 7 21 7 21 8 2 2 16 9 1 2 16 9 1 2 15 8 19 9 20 8 20 8 20 + 8 4 1 15 8 1 2 1 1 14 9 4 1 14 9 2 5 12 9 2 7 10 9 1 9 9 19 10 14 1 2 + 8 1 1 14 12 1 1 14 2 1 11 14 2 2 11 17 11 18 10 18 11 17 10 18 9 19 9 + 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 10 18 9 19 9 19 + 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 20 8 19 9 19 10 18 10 19 9 + 18 10 19 9 19 9 19 9 19 9 19 9 19 9 19 8 20 9 19 9 19 9 19 9 19 9 19 + 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 9 19 + 9 19 9 19 9 19 9 19 8 20 8 20 8 20 8 20 8 20 8 20 9 18 10 18 9 19 8 + 21 7 21 8 20 9 19 9 19 9 19 9 19 9 18 10 19 9 18 10 19 9 21 2 1 1 11 + 0 + + + + 5264.0 + + + 0.148936170213 + + + 2372.0 + + + 0.236087689713 + + + 1.04889473128 + + + 0.479482855537 0.433069410502 0.0085175652335 1.12528426628 + 0.0165491636209 -0.000311497501815 0.0191113715584 + -0.00208968360474 0.381496462993 + + + 28.0 + + + 2.07142857143 0.101063829787 + + + 3.0 1.42857142857 2.71428571429 1.14285714286 0.0212765957447 + 0.191489361702 0.170212765957 0.0212765957447 + + + 188.0 + + + 11.0 32.0 0.146428571429 3.0 25.0 3.0 + + + 0.0 0.994680851064 + + + 0.450607902736 + + + 0.227963525836 0.437689969605 0.0364741641337 0.0 0.987841945289 + 0.996960486322 0.586626139818 0.437689969605 0.87537993921 + 0.951367781155 0.759878419453 0.80547112462 0.0699088145897 + 0.0364741641337 0.0 0.0 + + + 0.0 0.0 0.0 0.527777777778 0.0724637681159 0.0 0.0 0.0 + 0.554347826087 0.25 0.413043478261 0.708333333333 0.0760869565217 + 0.0 0.0 0.0 1.0 0.944444444444 1.0 0.986111111111 0.173913043478 + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.927083333333 0.75 0.78125 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.986111111111 0.728260869565 0.833333333333 + 0.945652173913 0.885416666667 0.554347826087 0.604166666667 + 0.739130434783 0.59375 0.217391304348 0.0555555555556 + 0.0724637681159 0.0416666666667 0.0 0.0 0.0 0.0 0.0434782608696 0.0 + 0.0434782608696 0.0 0.0 0.0 0.0 0.0 + + + 0.507311972834 0.22054296033 0.13637099861 0.0469114734112 + 0.430623160721 0.388433459022 0.175811173606 0.0848783460168 + 0.0905619797016 0.0752306950903 0.441408660588 0.374180457915 + 0.326298753193 0.147950505462 + + + + + + + + + 1 1 4 17 1 5 1 5 2 3 2 0 + + + + 42.0 + + + 0.857142857143 + + + 31.0 + + + 0.967741935484 + + + 0.935483870968 + + + 0.432258064516 0.516129032258 0.0730421939512 0.0943909234333 + -0.00674700412876 0.00353329174672 -0.00138721763702 + -0.00537870155433 0.00348311620342 + + + 6.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 7.0 + + + 1.0 1.0 0.0666666666667 0.0 3.0 1.0 + + + 0.0 0.857142857143 + + + 0.738095238095 + + + 0.0 1.0 1.0 0.5 0.5 1.0 1.0 1.0 0.0 1.0 1.0 1.0 0.0 1.0 0.5 0.25 + + + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 + + + 0.174691460968 0.0588460538589 0.0416855257567 0.102268036693 + 0.0860446016155 0.0320542232874 0.114398584386 0.0910222497252 + 0.0172581264767 0.0956872554465 0.0335007416099 0.0792621635146 + 0.0382987363535 0.064492138479 + + + + + + + + + 38 1 73 3 72 3 72 3 72 3 72 3 71 4 45 7 1 8 7 7 39 36 38 37 37 38 37 + 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 38 37 38 37 + 38 36 39 36 39 37 38 37 37 40 33 41 35 40 35 40 36 39 36 40 35 39 37 + 37 38 37 38 35 1 1 38 31 1 1 3 1 38 31 1 1 2 2 38 36 39 37 38 37 38 + 37 39 35 40 35 40 35 40 35 40 36 39 7 1 3 6 18 40 3 25 2 2 3 40 2 32 + 1 40 2 32 1 41 1 32 1 41 1 32 1 41 1 74 1 74 1 74 1 815 1 41 1 32 1 + 41 1 31 2 41 2 28 5 40 2 10 23 40 4 4 27 40 35 40 35 40 34 41 34 41 + 34 41 35 40 35 40 35 40 35 40 35 40 35 40 36 39 37 36 38 37 38 38 37 + 38 38 37 5 3 30 36 6 1 31 38 37 39 36 39 36 39 36 39 36 39 36 40 35 + 39 36 39 36 39 36 39 36 39 35 40 35 40 35 40 36 39 36 39 36 39 36 39 + 35 40 33 42 33 43 5 70 4 71 3 72 3 72 2 73 2 73 2 73 2 74 1 74 1 74 1 + 74 1 74 1 74 1 34 0 + + + + 9525.0 + + + 0.590551181102 + + + 3104.0 + + + 0.149484536082 + + + 1.78830409357 + + + 0.509020618557 0.468885513828 0.130448042453 0.385314399885 + 0.174590580779 -0.000540502641894 0.00333770839999 + 0.000705377629645 0.0087237376139 + + + 75.0 + + + 0.306666666667 0.173228346457 + + + 0.0533333333333 0.0533333333333 0.8 0.106666666667 0.0629921259843 + 0.409448818898 0.220472440945 0.0 + + + 127.0 + + + 3.0 27.0 0.200716845878 4.0 12.0 0.0 + + + 0.0 0.992125984252 + + + 0.325879265092 + + + 0.663082437276 0.479166666667 0.0 0.0 0.764006791171 0.555921052632 + 0.00493421052632 0.0 0.159592529711 0.0888157894737 0.699013157895 + 0.578947368421 0.0 0.0 0.703947368421 0.516447368421 + + + 0.340740740741 0.763888888889 0.659722222222 0.159722222222 0.0 0.0 + 0.0 0.0 0.518518518519 1.0 1.0 0.0972222222222 0.0 0.0 0.0 0.0 0.52 + 1.0 1.0 0.10625 0.0 0.0 0.0 0.0 0.503703703704 1.0 0.972222222222 + 0.145833333333 0.0 0.0208333333333 0.0 0.0 0.318518518519 + 0.354166666667 0.298611111111 0.0763888888889 0.402777777778 + 0.909722222222 0.881944444444 0.3125 0.0 0.0 0.0 0.0 0.475 1.0 1.0 + 0.125 0.0 0.0 0.0 0.0 0.5 1.0 1.0 0.125 0.0 0.0 0.0 0.0 0.4375 + 0.8875 0.875 0.075 + + + 0.286454308206 0.280150981285 0.0210024135302 0.00886304100258 + 0.226134979342 0.525334626197 0.138626063814 0.0230718851285 + 0.00808638098545 0.00935639326316 0.224108355705 0.280889456841 + 0.301163638821 0.0549160088407 + + + + + + + + + 29 2 8 1 5 17 33 14 1 20 32 35 32 34 34 34 33 34 33 31 1 1 34 3 2 14 + 1 11 36 3 1 15 1 6 1 4 37 2 2 21 1 6 34 4 2 28 33 34 33 34 33 34 33 + 34 33 34 33 34 33 34 34 33 1 2 31 33 1 2 31 35 32 35 32 17 1 17 32 18 + 1 17 31 18 1 17 3 2 26 34 1 1 3 1 27 33 1 3 2 2 26 37 1 4 25 37 1 4 + 24 38 1 3 25 38 1 3 25 38 1 4 25 7 1 29 1 4 25 43 24 23 2 12 1 3 27 + 17 7 12 1 3 27 19 4 13 1 3 27 36 2 2 27 36 1 3 27 17 1 11 1 1 1 4 1 4 + 25 18 1 9 3 1 2 3 1 62 2 2 1 57 3 1 4 1 1 35 2 10 20 33 34 33 34 32 + 34 33 34 33 34 34 33 34 33 34 33 34 33 35 32 34 33 34 33 34 33 34 33 + 35 32 35 32 35 32 35 34 2 1 23 39 30 37 35 34 2 4 27 32 4 1 30 32 35 + 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 35 33 34 33 34 33 34 33 + 34 33 35 32 35 31 36 31 36 31 13 1 5 3 14 31 4 25 1 1 5 31 4 28 4 31 + 4 28 4 31 4 28 4 31 5 26 5 32 3 27 6 62 5 62 5 62 5 62 4 63 4 63 4 63 + 4 63 3 65 2 32 0 + + + + 6700.0 + + + 0.67 + + + 3083.0 + + + 0.164450210834 + + + 0.701338733266 + + + 0.469343123089 0.439890307552 0.106457247267 0.201294860489 + -0.093598827076 0.00160164104292 0.00355675978926 -0.0036080331859 + 0.00623460960981 + + + 67.0 + + + 0.940298507463 0.61 + + + 1.01492537313 0.597014925373 0.955223880597 1.01492537313 0.68 1.28 + 0.12 0.36 + + + 100.0 + + + 20.0 76.0 0.166666666667 3.0 12.0 7.0 + + + 0.0 0.99 + + + 0.460149253731 + + + 0.0 0.4725 0.975 0.4425 0.211764705882 0.468235294118 + 0.981176470588 0.435294117647 0.950588235294 0.745882352941 + 0.0917647058824 0.169411764706 0.771764705882 0.649411764706 0.0 + 0.0 + + + 0.0 0.0 0.40625 0.75 1.0 0.903846153846 0.854166666667 + 0.153846153846 0.0 0.0 0.0 0.692307692308 1.0 1.0 0.822916666667 + 0.0 0.0 0.0 0.0 0.692307692308 1.0 1.0 0.805555555556 0.0 0.46875 + 0.432692307692 0.385416666667 0.778846153846 1.0 0.923076923077 + 0.875 0.134615384615 0.885416666667 1.0 0.989583333333 + 0.548076923077 0.177083333333 0.211538461538 0.322916666667 + 0.394230769231 0.935185185185 0.974358974359 0.981481481481 + 0.504273504274 0.0 0.0 0.0 0.0 0.979166666667 1.0 0.885416666667 + 0.461538461538 0.0 0.0 0.0 0.0 0.453703703704 0.692307692308 + 0.972222222222 0.324786324786 0.0 0.0 0.0 0.0 + + + 0.3789230276 0.196383943943 0.0214507879236 0.0238639138781 + 0.0108280623001 0.356605798415 0.0757794873393 0.057159713426 + 0.0403394422686 0.0164375787713 0.0922288777976 0.24084192599 + 0.131656890099 0.0355654856398 + + + + + + + + + 2 1 37 4 2 2 5 14 5 2 5 35 4 35 4 35 4 35 4 35 4 35 4 35 4 19 1 15 4 + 19 1 14 5 34 5 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 + 35 4 35 4 36 3 37 1 37 3 36 3 36 3 37 2 37 2 37 3 35 4 35 4 35 4 35 4 + 35 4 35 4 35 4 35 4 34 5 34 5 35 4 4 10 1 12 8 4 3 25 7 4 3 26 6 4 3 + 26 6 5 2 26 5 6 2 26 5 6 2 27 4 6 2 27 5 5 2 27 5 5 2 27 5 4 3 27 5 + 34 5 34 5 34 5 34 5 34 5 34 5 34 5 4 1 29 5 4 1 29 5 4 1 29 5 4 1 29 + 5 4 1 29 5 4 1 29 4 5 2 28 4 5 3 27 4 5 25 4 5 5 33 6 33 6 34 5 34 5 + 34 5 34 5 17 1 16 5 17 1 16 5 34 5 34 5 35 4 35 4 35 4 35 4 35 4 35 4 + 35 3 76 2 37 2 36 3 37 2 38 1 37 3 36 3 36 3 36 3 36 3 36 4 34 5 34 4 + 35 4 35 4 36 3 36 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 9 12 14 4 3 19 + 2 4 7 4 3 26 6 4 3 27 5 4 3 28 5 3 3 28 5 3 3 29 3 5 2 30 2 5 2 30 3 + 4 2 31 2 4 2 31 2 4 2 31 2 4 2 31 2 4 2 31 2 4 2 32 1 4 2 32 1 4 2 37 + 2 37 3 36 3 37 2 37 2 37 2 37 2 32 0 + + + + 5343.0 + + + 0.284671532847 + + + 3307.0 + + + 0.161778046568 + + + 1.06125789105 + + + 0.504384638645 0.434953040787 0.0347935745095 0.414898743099 + 0.00538213412438 -0.000130935958468 -0.00352579467929 + 0.00143610262581 0.000728845612508 + + + 39.0 + + + 1.25641025641 0.328467153285 + + + 1.23076923077 0.923076923077 1.12820512821 1.23076923077 + 0.14598540146 0.525547445255 0.14598540146 0.496350364964 + + + 137.0 + + + 15.0 23.0 0.117478510029 3.0 5.0 2.0 + + + 0.0 0.992700729927 + + + 0.618940670036 + + + 0.859477124183 0.339869281046 0.767973856209 0.412698412698 + 0.955882352941 0.297058823529 0.941176470588 0.322857142857 + 0.961764705882 0.294117647059 0.929411764706 0.334285714286 + 0.697058823529 0.597058823529 0.770588235294 0.44 + + + 0.720588235294 0.75 0.455882352941 0.161764705882 0.5 + 0.588235294118 0.308823529412 0.0138888888889 0.917647058824 1.0 + 0.682352941176 0.0470588235294 0.894117647059 1.0 0.823529411765 + 0.422222222222 0.882352941176 1.0 0.588235294118 0.0 0.882352941176 + 1.0 0.682352941176 0.0 0.941176470588 1.0 0.6 0.0 0.882352941176 + 1.0 0.647058823529 0.0 0.917647058824 1.0 0.588235294118 0.0 + 0.858823529412 1.0 0.647058823529 0.0 0.929411764706 1.0 + 0.588235294118 0.0 0.858823529412 1.0 0.729411764706 0.0 + 0.894117647059 1.0 0.858823529412 0.4 0.905882352941 1.0 + 0.776470588235 0.0 0.341176470588 0.552941176471 0.541176470588 + 0.588235294118 0.423529411765 0.752941176471 0.8 0.222222222222 + + + 0.498948164985 0.19278782558 0.00627942573759 0.00543914008111 + 0.113265735402 0.489914833704 0.0806487577081 0.0478334563782 + 0.0282870595337 0.0072265449883 0.1840285671 0.487848864844 + 0.253369209565 0.0236243447382 + + + + + + + + + 65 3 68 3 68 4 67 3 68 4 32 2 33 4 32 3 32 4 31 11 25 4 31 19 17 4 32 + 30 5 3 33 32 3 3 33 39 32 38 33 39 32 39 32 19 1 19 32 19 1 3 1 15 32 + 39 33 38 32 39 32 40 32 38 33 38 33 37 34 37 34 38 33 38 33 38 33 39 + 4 2 26 39 3 3 26 39 2 4 25 40 2 5 25 39 2 4 26 38 3 4 26 38 3 6 24 39 + 2 6 24 39 2 6 24 39 2 7 23 39 3 3 27 37 5 2 27 37 5 2 27 38 4 2 28 36 + 5 2 27 37 5 10 20 36 5 14 15 37 5 19 9 39 3 25 3 40 3 67 4 67 4 35 4 + 28 4 35 6 1 4 3 1 18 2 35 19 15 2 36 21 12 2 36 21 2 1 1 1 1 1 5 3 35 + 22 1 4 7 1 36 26 7 2 36 27 6 3 35 28 5 2 36 28 5 2 36 29 4 1 1 1 35 + 29 4 1 1 1 36 28 4 1 1 1 36 27 5 1 38 28 3 2 38 28 3 3 37 28 3 4 35 + 29 3 4 3 3 30 29 2 4 4 2 1 3 26 29 2 4 5 1 30 29 2 3 8 2 27 29 2 4 37 + 27 3 4 36 29 2 3 37 29 2 3 37 29 2 3 38 28 2 5 36 28 2 5 36 28 2 5 36 + 28 3 4 36 28 3 4 36 28 3 4 36 28 3 4 36 28 3 4 36 28 3 4 36 28 3 4 37 + 27 3 5 1 10 25 27 3 5 1 13 22 27 3 24 17 27 3 29 3 2 7 27 3 35 6 27 3 + 36 5 27 3 37 5 26 4 36 4 27 3 37 4 27 3 37 4 27 3 37 5 27 2 37 4 28 3 + 36 4 28 3 + + + + 7100.0 + + + 0.71 + + + 3489.0 + + + 0.171109200344 + + + 0.794466403162 + + + 0.519895180772 0.492222309075 0.111023627561 0.159119560883 + -0.0596641659752 -0.000766577008542 0.00620032846319 + 0.00411880293833 0.00237711993991 + + + 71.0 + + + 0.732394366197 0.95 + + + 1.07042253521 0.394366197183 0.507042253521 0.845070422535 0.36 + 0.76 1.56 1.12 + + + 100.0 + + + 8.0 50.0 0.176136363636 4.0 3.0 3.0 + + + 0.0 0.99 + + + 0.491408450704 + + + 0.0 0.331764705882 0.896470588235 0.414117647059 0.204444444444 + 0.302222222222 1.0 0.597777777778 0.675555555556 1.0 0.175555555556 + 0.24 0.613333333333 0.915555555556 0.32 0.157777777778 + + + 0.0 0.0 0.354166666667 0.548076923077 0.833333333333 0.778846153846 + 0.666666666667 0.0192307692308 0.0 0.0 0.0 0.42735042735 1.0 + 0.957264957265 1.0 0.017094017094 0.0 0.0 0.0 0.273504273504 1.0 + 1.0 1.0 0.17094017094 0.296296296296 0.512820512821 0.453703703704 + 0.470085470085 1.0 1.0 1.0 0.282051282051 0.37962962963 1.0 1.0 1.0 + 0.25 0.333333333333 0.444444444444 0.512820512821 0.287037037037 + 0.982905982906 1.0 1.0 0.12037037037 0.0 0.0 0.0 0.231481481481 + 0.991452991453 1.0 1.0 0.305555555556 0.0 0.0 0.0 0.425925925926 + 0.760683760684 0.842592592593 0.820512820513 0.694444444444 + 0.307692307692 0.296296296296 0.333333333333 + + + 0.472332172719 0.114919158586 0.0292647001212 0.0250956841597 + 0.0702606038806 0.298808709819 0.0411179425253 0.0455320611951 + 0.0366667660732 0.00285370275368 0.180654792151 0.289855379878 + 0.0979360874935 0.0212093766244 + + + + + + + + + 71 1 72 2 73 3 71 1 73 1 73 1 110 5 8 12 3 7 1 2 36 38 36 38 36 38 36 + 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 + 36 38 36 38 36 38 36 38 37 37 37 32 42 33 41 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 38 36 38 36 38 37 37 37 37 36 38 37 + 3 6 28 37 3 20 14 37 2 72 2 72 2 41 3 2 11 1 5 9 2 38 29 5 2 37 31 4 + 2 38 30 4 3 37 31 3 3 37 31 3 3 37 31 3 3 37 31 3 2 39 30 44 30 3 1 + 40 30 42 32 44 31 2 1 40 30 3 2 38 31 3 3 37 37 37 37 37 37 37 37 4 4 + 29 37 2 6 29 37 2 6 29 37 3 5 8 1 11 3 6 37 6 3 7 1 21 36 38 36 2 3 + 32 37 2 1 35 36 38 36 38 36 38 36 38 36 8 1 29 36 7 3 19 1 8 36 38 36 + 38 37 5 3 29 37 2 6 29 38 1 2 33 43 9 1 21 49 26 56 5 3 10 58 1 9 6 + 69 5 70 4 70 4 71 3 71 3 71 3 72 2 72 2 73 1 33 0 + + + + 7474.0 + + + 0.732673267327 + + + 3246.0 + + + 0.148182378312 + + + 0.725766103815 + + + 0.514534221254 0.482258163894 0.120342950399 0.173157756946 + -0.0924570523734 -0.00114055759477 0.00197372138953 + 0.000681611484347 0.000887282868476 + + + 74.0 + + + 0.608108108108 0.405940594059 + + + 0.972972972973 0.432432432432 0.378378378378 0.540540540541 + 0.118811881188 0.0792079207921 0.990099009901 0.435643564356 + + + 101.0 + + + 10.0 44.0 0.15770609319 4.0 3.0 5.0 + + + 0.0 0.990099009901 + + + 0.434305592721 + + + 0.0 0.124444444444 0.871111111111 0.42094017094 0.113684210526 + 0.172631578947 0.989473684211 0.603238866397 0.702222222222 1.0 + 0.133333333333 0.168803418803 0.654736842105 0.890526315789 + 0.122105263158 0.0 + + + 0.0 0.0 0.0 0.247863247863 0.888888888889 0.638888888889 + 0.649572649573 0.0 0.0 0.0 0.0 0.230769230769 1.0 0.944444444444 + 0.931623931624 0.102564102564 0.0 0.0 0.0 0.188034188034 1.0 + 0.981481481481 1.0 0.188034188034 0.125 0.3 0.216666666667 + 0.261538461538 1.0 0.975 0.992307692308 0.230769230769 + 0.351851851852 1.0 1.0 1.0 0.273504273504 0.25 0.324786324786 + 0.350427350427 0.407407407407 1.0 1.0 1.0 0.00854700854701 0.0 0.0 + 0.0 0.388888888889 1.0 1.0 1.0 0.00854700854701 0.0 0.0 0.0 0.4 0.8 + 0.725 0.853846153846 0.392307692308 0.05 0.0 0.0 + + + 0.43700541162 0.169678177639 0.00602636351573 0.00809211259404 + 0.00539677423462 0.371731505952 0.0530674794206 0.028064295298 + 0.0199214590234 0.0199690049957 0.159463202337 0.287535279497 + 0.104548695615 0.02934167746 + + + + + + + + + 37 4 37 6 36 6 35 7 35 6 35 7 35 6 36 5 38 4 38 3 38 4 38 3 38 3 39 3 + 39 2 39 3 39 2 40 2 39 3 39 2 40 2 39 3 39 2 40 2 39 3 38 3 39 3 39 2 + 40 2 40 2 40 2 40 1 40 2 40 1 41 1 41 1 41 1 237 1 2 3 2 3 28 14 27 + 15 27 9 1 5 28 4 5 5 29 12 30 10 32 11 30 12 30 11 30 12 30 12 29 12 + 30 12 29 4 4 5 29 2 40 3 42 1 40 2 34 3 1 12 25 16 27 14 28 13 31 10 + 30 3 3 5 30 4 2 6 31 4 1 5 34 1 3 1 34 4 2 2 32 2 3 1 2 2 32 1 130 1 + 2 2 36 7 33 9 33 9 34 6 1 2 33 6 36 6 36 5 37 5 37 5 37 4 38 4 38 3 + 36 0 + + + + 3696.0 + + + 0.477272727273 + + + 477.0 + + + 0.714884696017 + + + 0.571428571429 + + + 0.407015390909 0.563266584737 0.255406814178 1.16182988373 + -0.514718454624 0.0929101375505 0.397587888303 -0.199801048551 + -0.736344554504 + + + 42.0 + + + 0.97619047619 0.170454545455 + + + 2.09523809524 1.61904761905 0.0952380952381 0.0952380952381 0.0 + 0.0909090909091 0.181818181818 0.409090909091 + + + 88.0 + + + 2.0 8.0 0.495575221239 4.0 2.0 2.0 + + + 0.0 0.988636363636 + + + 0.129058441558 + + + 0.0 0.0 0.227272727273 0.45 0.0 0.0619834710744 0.677685950413 + 0.0661157024793 0.00454545454545 0.140909090909 0.0590909090909 0.0 + 0.351239669421 0.0123966942149 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.163636363636 0.254545454545 0.436363636364 + 0.0 0.0 0.0 0.0 0.109090909091 0.636363636364 0.454545454545 + 0.654545454545 0.0 0.0 0.0 0.109090909091 0.927272727273 0.6 + 0.218181818182 0.0727272727273 0.0 0.0 0.0 0.136363636364 + 0.909090909091 0.30303030303 0.0 0.0 0.0 0.0 0.0 0.109090909091 + 0.236363636364 0.0 0.0 0.0 0.0 0.0181818181818 0.381818181818 + 0.0727272727273 0.0 0.0 0.0 0.0 0.218181818182 0.472727272727 + 0.0545454545455 0.0 0.0 0.0 0.0 0.0 0.69696969697 0.0151515151515 + 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.525143752384 0.20797627273 0.255424284553 0.0892890204951 + 0.594044086893 0.278738897767 0.185873671016 0.262423423066 + 0.116713742111 0.130727853801 0.623913555073 0.307874186109 + 0.227705127163 0.175062210608 + + + + + + + + + 67 1 109 1 108 2 108 2 107 3 75 11 1 2 3 3 11 5 71 38 72 38 72 38 72 + 39 71 39 72 2 2 34 71 3 2 34 71 4 1 34 71 3 2 34 72 2 2 34 71 39 71 + 39 72 38 72 38 72 38 72 38 72 38 72 38 72 38 72 38 72 4 3 31 72 38 72 + 38 72 38 72 38 71 40 71 40 70 40 70 41 32 1 36 41 31 3 35 41 30 4 36 + 38 72 38 34 1 37 8 1 29 34 1 37 38 34 1 38 37 34 1 38 37 33 2 38 37 + 32 3 38 38 14 1 2 9 3 5 38 39 1 32 38 16 2 55 37 16 2 15 1 39 37 16 3 + 13 3 38 38 2 21 8 4 37 38 1 34 37 38 1 34 37 38 1 34 37 73 37 73 37 + 73 37 73 37 73 37 73 37 73 37 73 37 73 38 72 38 72 38 72 38 72 34 1 1 + 76 1 3 20 91 19 84 31 1 1 2 3 72 34 1 1 75 2 3 30 1 1 73 37 72 39 72 + 38 72 38 72 38 72 38 72 38 39 1 32 38 39 1 32 38 3 2 34 1 32 38 3 2 + 20 2 12 1 32 38 3 3 11 17 5 1 32 38 3 35 1 2 31 38 3 38 31 34 2 2 3 + 38 31 34 3 1 3 38 32 32 4 1 3 38 32 32 8 5 1 32 32 20 7 5 9 37 32 6 5 + 1 29 37 32 4 37 38 31 3 38 39 30 2 33 4 1 41 28 5 31 4 1 41 29 2 37 + 41 69 42 68 42 68 41 69 42 70 17 1 21 72 16 1 21 72 38 72 38 72 4 5 + 29 72 4 1 34 71 4 2 1 2 30 71 4 2 33 72 38 71 39 71 39 72 38 72 39 71 + 39 71 39 71 39 71 39 71 39 71 39 72 38 72 38 72 38 72 38 72 38 72 38 + 72 20 2 16 73 3 26 8 73 2 29 6 73 2 30 5 73 2 30 5 73 1 32 4 73 1 33 + 3 107 3 108 2 108 2 108 2 108 2 109 1 67 0 + + + + 15180.0 + + + 0.797101449275 + + + 5039.0 + + + 0.152411192697 + + + 0.798097251586 + + + 0.482078321205 0.483805876209 0.167742012661 0.236257803054 + -0.0709457692386 0.00990048050527 -0.0443829770021 0.0324913022992 + -0.00292421572271 + + + 110.0 + + + 0.681818181818 0.615942028986 + + + 0.436363636364 0.945454545455 0.618181818182 0.727272727273 + 0.260869565217 0.753623188406 1.04347826087 0.347826086957 + + + 138.0 + + + 11.0 55.0 0.222222222222 11.0 2.0 3.0 + + + 0.0 0.992753623188 + + + 0.331949934124 + + + 0.0 0.0 0.581699346405 0.556613756614 0.721638655462 0.34387755102 + 0.290966386555 0.408163265306 0.444444444444 0.561904761905 + 0.281045751634 0.0 0.0 0.59693877551 0.521008403361 0.0 + + + 0.0 0.0 0.0 0.0 0.194570135747 0.900452488688 0.665158371041 + 0.252136752137 0.0 0.0 0.0 0.0 0.235294117647 0.991596638655 1.0 + 0.325396825397 0.495798319328 0.710084033613 0.554621848739 + 0.00793650793651 0.189075630252 0.953781512605 1.0 0.412698412698 + 0.680672268908 1.0 0.852941176471 0.0 0.0 0.0210084033613 + 0.0966386554622 0.138888888889 0.705882352941 1.0 0.900452488688 + 0.0 0.0 0.0 0.0 0.0 0.0378151260504 0.0924369747899 0.46218487395 + 0.880952380952 0.852941176471 0.231092436975 0.0 0.0 0.0 0.0 + 0.390756302521 0.992063492063 1.0 0.159663865546 0.0 0.0 0.0 0.0 + 0.344537815126 0.634920634921 0.806722689076 0.117647058824 0.0 0.0 + + + 0.355189178368 0.116955261591 0.118899238245 0.152488328268 + 0.179386808351 0.183742610898 0.0273933564313 0.22226307561 + 0.367318818014 0.0655513189364 0.346088011813 0.0656679981156 + 0.0457824935477 0.0301803840129 + + + + + + + + + 45 1 69 2 68 3 61 2 2 6 60 2 2 10 56 11 59 3 1 6 60 2 3 6 60 1 3 6 46 + 1 18 4 47 1 18 3 47 2 18 4 46 2 16 7 45 2 16 14 1 1 14 1 21 2 17 16 + 12 11 12 2 17 12 3 1 12 25 13 16 2 3 11 25 13 22 10 25 13 23 9 25 13 + 24 7 12 1 13 13 24 7 10 4 1 1 1 2 7 13 25 7 8 15 1 14 26 5 9 15 1 14 + 27 4 9 6 2 1 8 15 26 3 9 6 11 21 20 3 10 3 13 17 25 2 10 1 1 1 4 1 8 + 13 3 1 25 2 17 1 7 14 2 2 25 2 24 15 2 2 24 3 23 16 26 5 23 16 23 1 3 + 4 25 14 23 2 3 3 26 13 7 3 8 1 4 3 2 3 26 14 6 3 8 1 5 2 3 2 16 2 8 + 14 6 3 15 1 3 2 5 16 4 15 1 1 4 3 18 42 8 2 19 1 3 18 4 15 2 2 1 5 18 + 2 4 17 6 23 18 2 3 10 6 2 6 23 13 3 2 15 5 2 7 24 12 4 1 2 4 9 4 3 7 + 24 6 2 4 4 1 2 6 3 8 3 7 24 6 2 4 7 17 3 7 24 6 2 4 7 18 1 8 19 2 3 6 + 2 4 9 25 18 3 3 6 3 3 9 1 5 2 5 12 19 4 1 6 2 5 7 12 2 3 1 8 20 1 3 2 + 1 3 2 6 1 2 3 17 2 7 23 6 2 10 3 8 2 6 3 7 24 5 2 10 3 8 2 6 2 8 24 6 + 1 10 3 8 4 1 1 2 2 8 24 17 3 8 6 2 2 8 13 2 10 16 3 10 2 14 12 3 11 + 15 3 9 1 16 12 3 12 14 3 8 3 15 12 3 13 13 3 9 2 15 13 2 14 12 3 9 2 + 15 13 3 14 11 3 2 11 13 13 3 15 10 3 2 19 5 13 3 16 9 3 1 21 4 14 1 + 17 9 3 1 20 5 14 1 18 8 24 5 13 2 19 2 28 6 13 3 2 1 49 1 14 7 63 8 + 18 2 27 2 12 10 12 8 26 1 13 13 9 8 40 11 59 9 61 10 61 10 60 16 54 + 17 53 19 51 20 50 21 49 22 48 23 47 24 46 25 45 27 43 28 42 29 42 28 + 42 28 42 28 42 28 42 28 42 5 1 22 42 4 2 22 42 2 3 23 42 27 43 28 42 + 17 2 9 43 6 2 8 2 9 45 3 4 7 3 8 52 8 2 8 47 1 4 9 1 8 47 2 3 18 53 6 + 3 8 53 2 7 8 53 2 7 8 53 2 2 2 2 9 53 6 2 9 53 6 3 8 53 6 3 8 53 6 3 + 8 53 6 3 8 52 7 2 10 51 19 51 19 50 20 52 18 53 17 54 16 56 14 57 13 + 58 2 1 9 59 11 60 10 62 8 63 7 64 6 65 5 69 1 67 3 68 2 67 3 69 1 + + + + 9170.0 + + + 0.534351145038 + + + 3065.0 + + + 0.344861337684 + + + 1.16871212507 + + + 0.612204175237 0.430262266282 0.138054003458 0.326604556215 + 0.0951501482873 -0.0332538272238 0.043560404607 -0.0128434499854 + 0.0811701534407 + + + 70.0 + + + 2.82857142857 1.48091603053 + + + 2.62857142857 1.82857142857 3.25714285714 3.6 1.5572519084 + 3.3893129771 0.36641221374 0.488549618321 + + + 131.0 + + + 19.0 94.0 0.233151183971 20.0 5.0 5.0 + + + 0.0 0.992366412214 + + + 0.334242093784 + + + 0.415441176471 0.572192513369 0.0 0.0 0.243055555556 0.420875420875 + 0.00673400673401 0.0 0.507352941176 0.206773618538 0.622103386809 + 0.0196078431373 0.418402777778 0.658249158249 0.602693602694 + 0.643097643098 + + + 0.0546875 0.8359375 0.610294117647 0.59375 0.0 0.0 0.0 0.0 + 0.0347222222222 0.743055555556 0.614379084967 0.472222222222 0.0 + 0.0 0.0 0.0 0.0347222222222 0.819444444444 0.738562091503 0.75 + 0.0208333333333 0.0 0.0 0.0 0.0486111111111 0.0694444444444 + 0.0849673202614 0.111111111111 0.00694444444444 0.0 0.0 0.0 + 0.109375 0.296875 0.117647058824 0.2265625 0.4140625 0.257352941176 + 0.0 0.0 0.618055555556 0.9375 0.424836601307 0.0416666666667 + 0.840277777778 0.915032679739 0.0763888888889 0.0 0.138888888889 + 0.986111111111 0.882352941176 0.541666666667 0.416666666667 + 0.954248366013 0.722222222222 0.248366013072 0.0 0.548611111111 + 0.509803921569 0.694444444444 0.166666666667 0.83660130719 + 0.916666666667 0.705882352941 + + + 0.524988321805 0.12393762346 0.0890057676832 0.0871535091404 + 0.196145046102 0.245841736607 0.0581013995035 0.124844316109 + 0.197550531015 0.0722904421796 0.153830401614 0.166955175676 + 0.0886265557696 0.0450006326803 + + + + + + + + + 3 1 36 2 36 2 36 2 36 3 29 1 5 3 28 2 5 6 25 2 6 33 5 33 5 32 6 32 6 + 32 6 33 5 33 5 33 5 33 5 33 5 33 5 33 5 33 5 33 4 34 4 34 4 34 4 34 2 + 37 2 37 2 36 2 35 2 36 2 37 3 34 4 34 4 33 5 33 5 33 6 32 6 32 6 32 6 + 32 6 32 6 32 6 32 7 31 7 32 6 32 6 32 6 32 6 3 2 27 6 2 25 5 6 2 26 4 + 6 2 27 3 7 1 27 2 8 1 27 2 8 1 28 1 8 1 28 2 7 1 28 2 7 1 28 2 7 1 28 + 2 36 2 36 2 36 2 37 1 1 0 + + + + 2394.0 + + + 0.603174603175 + + + 1462.0 + + + 0.168262653899 + + + 1.02229054573 + + + 0.520889562613 0.448159834076 0.0680308384159 0.114025906522 + 0.0106334584787 -0.000136767090225 0.0019032866379 + 0.000586923714708 0.00372540467858 + + + 38.0 + + + 0.157894736842 0.222222222222 + + + 0.210526315789 0.0 0.0 0.315789473684 0.190476190476 0.0 0.0 + 0.698412698413 + + + 63.0 + + + 1.0 11.0 0.176100628931 2.0 4.0 9.0 + + + 0.0 0.984126984127 + + + 0.610693400167 + + + 0.496296296296 0.770833333333 0.5625 0.138888888889 0.533333333333 + 1.0 1.0 0.11875 0.533333333333 1.0 1.0 0.125 0.44 0.85625 0.83125 + 0.3125 + + + 0.464285714286 0.25 0.3125 0.65625 0.15625 0.0 0.0 0.0 + 0.171428571429 1.0 1.0 1.0 1.0 0.9 0.4 0.1 0.0 1.0 1.0 1.0 1.0 1.0 + 0.225 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.25 0.0 0.0 1.0 1.0 1.0 1.0 1.0 + 0.25 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.25 0.0 0.0 1.0 1.0 1.0 1.0 1.0 + 0.275 0.0 0.142857142857 0.525 0.6 0.825 0.65 0.675 0.6 0.375 + + + 0.611351799641 0.047815793668 0.0174845512606 0.00771386557335 + 0.368464246237 0.104436026223 0.0324633413811 0.00664473477016 + 0.0027280126971 0.00912646836236 0.0470653233825 0.0954081071727 + 0.0877359819792 0.0314705668419 + + + + + + + + + 5 1 36 1 36 1 35 2 35 2 35 2 35 2 35 2 35 2 35 2 34 3 34 3 34 3 34 3 + 34 3 34 3 34 3 34 3 33 5 32 6 31 5 32 5 32 5 31 7 26 2 3 4 26 5 3 2 + 29 2 4 2 29 2 4 2 29 2 4 2 28 3 4 2 28 3 4 2 28 3 4 2 28 3 4 2 28 3 4 + 3 27 3 4 4 4 18 1 6 4 33 4 33 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 + 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 33 4 33 9 24 8 34 3 4 1 29 + 3 33 4 34 3 34 3 33 4 33 4 33 4 33 4 33 4 33 3 34 3 34 3 34 3 35 2 35 + 3 34 3 34 2 34 3 34 3 13 8 4 3 6 3 3 20 1 6 4 3 3 28 3 2 6 25 5 2 5 + 25 5 2 4 26 5 2 4 27 4 1 5 27 11 25 12 24 7 1 3 28 4 3 1 30 2 35 2 34 + 3 34 3 35 2 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 2 35 2 35 1 4 0 + + + + 3774.0 + + + 0.362745098039 + + + 1686.0 + + + 0.230130486358 + + + 1.08024161074 + + + 0.502174772637 0.541635836181 0.0680735727062 0.17792345239 + 0.0184074384936 0.000422803421821 -0.00548034571445 + 0.000706303841981 -0.0146539799651 + + + 37.0 + + + 0.891891891892 0.274509803922 + + + 1.83783783784 0.0 0.0 1.62162162162 0.078431372549 0.43137254902 + 0.0392156862745 0.549019607843 + + + 102.0 + + + 5.0 19.0 0.190217391304 1.0 2.0 1.0 + + + 0.0 0.990196078431 + + + 0.446740858506 + + + 0.346666666667 0.568376068376 0.782222222222 0.230769230769 0.0 + 0.645299145299 1.0 0.0213675213675 0.0 0.653846153846 1.0 + 0.0213675213675 0.028 0.676923076923 0.824 0.353846153846 + + + 0.0416666666667 0.403846153846 0.269230769231 0.5 0.458333333333 + 0.634615384615 0.730769230769 0.0 0.35 0.523076923077 + 0.430769230769 1.0 0.933333333333 1.0 0.246153846154 0.0 0.0 0.0 + 0.269230769231 1.0 1.0 1.0 0.0769230769231 0.0 0.0 0.0 + 0.307692307692 1.0 1.0 1.0 0.0153846153846 0.0 0.0 0.0 + 0.307692307692 1.0 1.0 1.0 0.0153846153846 0.0 0.0 0.0 + 0.307692307692 1.0 1.0 1.0 0.0769230769231 0.0 0.0 0.0 + 0.292307692308 1.0 0.983333333333 1.0 0.153846153846 0.0 0.0 + 0.107692307692 0.615384615385 0.8 0.65 0.661538461538 + 0.738461538462 0.523076923077 + + + 0.709486809681 0.0577968951103 0.0213986464241 0.0114350805885 + 0.723389586533 0.122454838484 0.0327627637092 0.0186044172795 + 0.00357829340324 0.0139812119413 0.512410349989 0.144161445021 + 0.0692617145885 0.0328698493717 + + + + + + + + + 8 1 8 3 8 1 9 2 7 3 7 3 7 3 7 3 7 3 8 2 32 2 8 2 6 4 8 2 8 2 8 2 7 3 + 6 5 5 5 5 5 5 5 5 4 6 4 7 4 6 4 6 4 5 5 5 6 4 6 4 5 5 5 5 4 6 4 7 2 + 30 1 7 1 1 1 7 3 7 5 5 5 6 4 6 3 5 0 + + + + 460.0 + + + 0.217391304348 + + + 141.0 + + + 0.943262411348 + + + 0.819202477739 + + + 0.357762017336 0.552245862884 0.0457816205001 1.0391767185 + -0.128986619321 0.00942572700288 0.170388298103 -0.0438965472825 + -0.279012447692 + + + 10.0 + + + 1.1 0.0217391304348 + + + 1.6 0.8 0.4 0.4 0.0 0.0 0.0 0.0869565217391 + + + 46.0 + + + 1.0 6.0 0.138888888889 3.0 4.0 1.0 + + + 0.0 0.978260869565 + + + 0.30652173913 + + + 0.0 0.375 0.863636363636 0.375 0.0 0.638888888889 0.939393939394 + 0.583333333333 0.0 0.0 0.0909090909091 0.125 0.727272727273 0.0 0.0 + 0.0 + + + 0.0 0.0 0.166666666667 0.5 0.6 0.833333333333 0.333333333333 0.0 + 0.0 0.0 0.166666666667 0.666666666667 1.0 1.0 0.5 0.666666666667 + 0.0 0.0 0.666666666667 1.0 1.0 1.0 0.5 0.833333333333 0.0 0.0 + 0.333333333333 0.75 0.8 1.0 0.25 0.833333333333 0.0 0.0 0.0 0.0 0.0 + 0.333333333333 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 + 0.666666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.8 0.833333333333 0.0 0.0 + 0.0 0.0 0.0 0.0 + + + 0.507708399274 0.211530377129 0.141554595644 0.0667587300089 + 0.520270132623 0.30764854653 0.172202549295 0.156265933166 + 0.108670973661 0.105522981488 0.651868529294 0.237940463283 + 0.263582944912 0.141107627793 + + + + + + + + + 2 1 24 3 4 3 21 6 3 4 22 4 4 3 22 3 5 2 23 3 5 2 22 4 4 3 18 1 2 5 4 + 3 12 14 4 29 3 30 3 30 3 30 3 30 3 30 3 30 3 30 3 30 4 29 4 29 4 29 4 + 29 4 29 4 29 4 29 3 30 4 29 4 29 4 29 4 9 1 5 1 1 2 10 4 9 4 1 2 1 4 + 8 4 4 3 1 5 4 3 9 4 8 5 5 2 10 3 9 4 5 1 11 3 9 1 8 1 11 3 9 1 8 2 10 + 3 18 2 10 3 30 3 9 2 6 3 10 3 9 2 4 1 1 3 10 4 5 1 2 3 5 3 10 4 8 2 7 + 2 10 4 8 2 7 1 11 4 8 2 7 2 10 3 17 3 10 4 29 4 29 4 29 4 29 4 29 4 + 18 5 6 4 12 2 1 11 3 4 2 7 1 17 2 4 2 25 2 4 2 26 1 4 2 26 1 4 2 26 1 + 4 2 26 1 4 2 25 3 3 3 24 3 4 1 25 3 30 4 29 3 30 3 31 3 29 3 32 1 32 + 1 32 1 32 1 32 1 32 1 1 0 + + + + 2343.0 + + + 0.464788732394 + + + 1293.0 + + + 0.269141531323 + + + 1.02160216022 + + + 0.488254060325 0.405977240084 0.0655521683754 0.163695789463 + 0.00816900671511 -0.000187348168579 0.00687152510472 + 0.00224242819932 0.0135423947241 + + + 33.0 + + + 1.09090909091 0.774647887324 + + + 1.09090909091 1.09090909091 1.45454545455 0.606060606061 + 0.507042253521 0.845070422535 1.18309859155 0.394366197183 + + + 71.0 + + + 13.0 48.0 0.153846153846 2.0 8.0 4.0 + + + 0.0 0.985915492958 + + + 0.55185659411 + + + 0.676470588235 0.861111111111 0.722222222222 0.0972222222222 + 0.529411764706 0.847222222222 0.791666666667 0.0 0.595588235294 + 0.881944444444 0.673611111111 0.0 0.575163398693 0.691358024691 + 0.685185185185 0.216049382716 + + + 0.59375 0.972222222222 0.777777777778 0.75 0.638888888889 0.5 + 0.361111111111 0.0 0.0625 1.0 1.0 0.916666666667 0.972222222222 + 0.777777777778 0.0277777777778 0.0 0.0 1.0 1.0 0.638888888889 + 0.666666666667 0.805555555556 0.0 0.0 0.0 1.0 1.0 0.75 + 0.972222222222 0.722222222222 0.0 0.0 0.125 1.0 1.0 0.666666666667 + 0.638888888889 0.694444444444 0.0 0.0 0.15625 1.0 1.0 + 0.861111111111 0.805555555556 0.555555555556 0.0 0.0 0.5 1.0 1.0 + 1.0 1.0 0.638888888889 0.0 0.0 0.45 0.4 0.4 0.488888888889 0.6 + 0.555555555556 0.444444444444 0.333333333333 + + + 0.672570776253 0.0612722546453 0.0339100075761 0.0144342725743 + 0.552938967854 0.165464791275 0.0160998032265 0.0496056682147 + 0.00601745802807 0.016629135405 0.181925949177 0.217083354769 + 0.0487040297508 0.025953524946 + + + + + + + + + 4 1 32 1 32 1 32 1 29 5 28 7 26 7 26 8 25 8 25 9 24 9 24 9 24 9 24 10 + 22 10 23 11 22 11 22 11 22 10 23 10 23 12 21 14 19 14 20 13 21 1 2 9 + 19 3 3 8 19 3 2 9 19 3 2 5 1 3 19 3 2 2 1 2 1 4 19 3 4 2 3 2 20 2 4 3 + 3 1 26 2 4 1 18 1 1 8 4 1 18 12 1 3 5 5 7 26 7 26 7 11 2 13 7 11 2 13 + 7 11 2 14 6 27 6 11 2 14 6 12 1 14 7 5 1 20 7 26 6 27 7 26 7 5 1 20 7 + 17 3 6 7 26 7 26 7 26 7 26 7 26 7 5 6 15 7 2 2 1 7 14 7 4 8 4 1 9 7 5 + 6 6 1 8 7 5 7 14 7 5 8 13 8 4 8 13 8 4 9 12 8 4 10 11 7 6 8 12 7 6 9 + 11 7 6 9 10 8 6 9 10 9 5 9 11 7 8 8 7 11 6 9 1 3 3 11 7 12 3 11 6 13 + 2 12 7 12 1 14 7 12 1 13 8 11 1 13 9 10 1 13 10 23 12 21 12 21 14 19 + 15 18 16 17 17 16 19 14 21 12 22 11 23 10 25 8 26 7 27 6 17 4 6 6 3 2 + 11 5 7 5 4 1 11 5 7 5 4 2 10 5 7 5 4 2 10 8 4 5 9 2 6 9 2 5 10 1 7 3 + 2 10 18 2 5 8 26 7 28 5 28 5 28 5 18 1 9 5 28 7 16 2 8 10 2 1 1 1 8 2 + 8 10 2 4 7 2 8 6 2 2 2 5 5 3 8 6 2 2 1 6 1 2 2 3 8 6 7 3 17 6 27 6 27 + 6 27 6 7 3 7 2 8 6 8 1 19 5 27 6 2 2 23 6 2 4 22 5 2 5 21 5 2 11 15 5 + 2 11 15 5 2 10 16 5 2 11 15 5 2 11 15 5 2 12 14 5 2 13 1 1 11 5 2 14 + 13 4 2 16 11 4 3 15 11 4 4 15 10 4 3 16 10 3 4 18 8 4 3 19 7 4 3 22 3 + 5 3 30 2 31 2 31 2 32 1 32 1 32 1 27 0 + + + + 4620.0 + + + 0.235714285714 + + + 2263.0 + + + 0.295183384887 + + + 1.23324078471 + + + 0.441352739726 0.52604456426 0.0325649481085 0.526862774323 + 0.0552365027894 0.00111386360923 -0.00824955000268 0.00281578814319 + -0.0461107591273 + + + 33.0 + + + 3.24242424242 0.728571428571 + + + 3.75757575758 4.24242424242 3.51515151515 1.45454545455 + 0.485714285714 0.828571428571 0.685714285714 0.914285714286 + + + 140.0 + + + 18.0 84.0 0.213114754098 5.0 9.0 2.0 + + + 0.0 0.992857142857 + + + 0.489826839827 + + + 0.732142857143 0.782142857143 0.589285714286 0.314285714286 + 0.385714285714 0.571428571429 0.85 0.275 0.0392857142857 + 0.946428571429 0.571428571429 0.528571428571 0.0126984126984 + 0.288888888889 0.352380952381 0.67619047619 + + + 0.617647058824 0.777777777778 0.867647058824 0.652777777778 + 0.279411764706 0.222222222222 0.0 0.0138888888889 0.794117647059 + 0.736111111111 0.970588235294 0.652777777778 1.0 0.861111111111 + 0.676470588235 0.569444444444 0.308823529412 0.805555555556 + 0.941176470588 0.0833333333333 0.852941176471 0.958333333333 + 0.558823529412 0.0 0.0 0.402777777778 0.926470588235 0.375 + 0.632352941176 0.944444444444 0.573529411765 0.0 0.0 + 0.0555555555556 0.970588235294 0.861111111111 0.441176470588 + 0.944444444444 0.926470588235 0.0833333333333 0.0 0.0972222222222 + 0.985294117647 0.972222222222 0.352941176471 0.527777777778 + 0.852941176471 0.291666666667 0.0 0.0555555555556 0.705882352941 + 0.597222222222 0.102941176471 0.875 1.0 0.513888888889 0.0 0.0 0.0 + 0.0 0.0 0.455555555556 0.682352941176 0.555555555556 + + + 0.519952080986 0.196909145231 0.0435382553552 0.0199695582665 + 0.295792962305 0.429194760741 0.119923389268 0.0148646796878 + 0.0307305519788 0.0377381047521 0.140423476247 0.424901370746 + 0.279832748081 0.0797054837934 + + + + + + + + + 3 4 3 3 4 3 4 3 4 3 4 3 4 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 + 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 4 3 4 3 4 3 4 3 4 3 4 3 5 2 5 2 5 2 4 2 + 5 2 5 3 5 2 4 3 4 3 4 3 4 3 4 3 4 3 4 2 5 2 5 2 5 3 4 3 4 3 4 3 4 2 5 + 2 5 3 4 3 3 4 4 2 5 2 25 3 3 5 3 4 4 3 3 3 4 3 4 3 4 3 4 3 4 3 4 4 3 + 4 3 3 4 3 5 2 5 2 5 2 5 2 5 2 5 2 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 + 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 + 3 4 3 4 4 3 3 4 3 4 3 4 3 4 3 4 3 4 4 4 2 5 2 26 2 4 4 3 4 3 5 2 5 1 + 6 2 4 3 3 4 3 4 4 3 4 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 4 3 4 + 3 3 4 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 3 4 3 4 4 3 4 4 3 4 + 3 4 3 4 3 4 3 5 2 4 3 4 3 5 2 5 2 5 2 2 0 + + + + 1204.0 + + + 0.0406976744186 + + + 489.0 + + + 0.822085889571 + + + 0.976318359375 + + + 0.430470347648 0.533000873007 0.00231220054082 4.95525687644 + -0.0295532284743 4.81701879536e-06 0.0967153413674 + -0.00026051705336 -1.95506092225 + + + 7.0 + + + 3.57142857143 0.0 + + + 0.571428571429 2.28571428571 1.14285714286 0.571428571429 0.0 0.0 + 0.0 0.0 + + + 172.0 + + + 1.0 2.0 0.124223602484 2.0 51.0 1.0 + + + 0.0 0.994186046512 + + + 0.406146179402 + + + 0.0 0.0232558139535 0.0232558139535 0.0 0.162790697674 + 0.686046511628 0.895348837209 0.825581395349 0.976744186047 + 0.616279069767 0.558139534884 0.825581395349 0.0813953488372 0.0 + 0.0348837209302 0.0 + + + 0.0 0.0 0.047619047619 0.0 0.0 0.0454545454545 0.0 0.0 0.0 0.0 + 0.047619047619 0.0 0.0 0.0454545454545 0.0 0.0 0.0 0.0 + 0.190476190476 0.681818181818 1.0 0.727272727273 1.0 0.5 0.0 + 0.636363636364 0.857142857143 1.0 1.0 0.863636363636 1.0 + 0.818181818182 1.0 1.0 0.857142857143 1.0 1.0 0.863636363636 1.0 + 1.0 1.0 0.909090909091 0.47619047619 0.136363636364 0.0 + 0.363636363636 0.380952380952 0.909090909091 0.285714285714 0.0 0.0 + 0.0 0.0 0.136363636364 0.0 0.0 0.047619047619 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 + + + 0.409324898454 0.272567317245 0.103440878333 0.0347971020726 + 0.294151832967 0.409561964378 0.237972379949 0.0314770806629 + 0.118009299752 0.0655904064853 0.314630744902 0.358685039441 + 0.381178118206 0.213674409178 + + + + + + + + + 34 3 37 3 36 6 34 7 32 5 1 2 31 5 2 1 31 6 1 3 30 5 3 2 7 3 19 2 7 2 + 8 2 19 2 6 3 30 1 6 3 37 2 36 5 36 2 98 4 35 6 34 7 35 4 36 4 36 4 36 + 4 6 1 29 1 1 2 7 1 23 9 30 10 30 11 30 10 18 3 8 11 1 1 17 1 9 16 14 + 2 7 17 13 2 8 17 14 1 7 2 1 15 29 8 34 4 750 1 31 1 6 4 30 1 4 5 35 6 + 29 1 1 9 29 4 2 2 32 10 30 11 29 11 30 10 30 8 32 8 32 7 34 6 34 5 35 + 5 35 4 36 3 30 0 + + + + 2840.0 + + + 0.56338028169 + + + 375.0 + + + 0.770666666667 + + + 0.524087885507 + + + 0.458051282051 0.485485714286 0.254663566222 1.171241984 + -0.416389802667 0.0934239378027 0.0551787366263 -0.14219852625 + 0.301751790311 + + + 40.0 + + + 0.725 0.323943661972 + + + 0.8 1.4 0.1 0.6 0.507042253521 0.56338028169 0.0 0.225352112676 + + + 71.0 + + + 2.0 16.0 0.317073170732 9.0 2.0 3.0 + + + 0.0 0.985915492958 + + + 0.132042253521 + + + 0.0294117647059 0.0555555555556 0.0 0.311111111111 0.0235294117647 + 0.616666666667 0.0 0.366666666667 0.0117647058824 0.294444444444 + 0.0 0.0 0.4 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.2 0.0 0.0 0.0222222222222 0.0 0.0 0.111111111111 0.0 + 0.0222222222222 0.0 0.0 0.533333333333 0.688888888889 0.0 0.0 + 0.155555555556 0.644444444444 0.0 0.0 0.822222222222 0.533333333333 + 0.0 0.0888888888889 0.755555555556 0.911111111111 0.0 0.0 + 0.0888888888889 0.0222222222222 0.0 0.0 0.222222222222 + 0.733333333333 0.0 0.0 0.0 0.0 0.0 0.0444444444444 0.0444444444444 + 0.177777777778 0.0 0.0 0.0 0.0 0.575 0.0666666666667 0.0 0.0 0.0 + 0.0 0.0 0.0 0.625 0.377777777778 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.280250242155 0.292980096037 0.10269964497 0.114914518505 + 0.289104424671 0.207728930978 0.267141654565 0.393124693045 + 0.183531057209 0.187406469162 0.559937637856 0.148504083475 + 0.274692228103 0.207171131816 + + + + + + + + + 3 1 1 2 2 1 3 1 2 2 2 1 3 1 3 0 + + + + 28.0 + + + 0.571428571429 + + + 9.0 + + + 2.66666666667 + + + 0.6 + + + 0.333333333333 0.481481481481 0.0987654320988 0.406035665295 + -0.172839506173 0.0246913580247 0.0201188843164 -0.029263831733 + 0.0163592948229 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 7.0 + + + 1.0 1.0 0.285714285714 0.0 2.0 1.0 + + + 0.0 0.857142857143 + + + 0.321428571429 + + + 0.0 0.0 0.5 1.0 0.0 1.0 1.0 0.0 0.0 0.5 0.0 0.0 1.0 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 + 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 + 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.265949922551 0.315624470529 0.107606062913 0.0846794162252 + 0.400922099367 0.195932354942 0.301784106802 0.129418822798 + 0.248716745586 0.227151571087 0.106316269816 0.524372700967 + 0.155200905624 0.277022293434 + + + + + + + + + 1 10 13 1 10 2 4 10 1 8 3 3 7 4 4 25 1 9 5 36 4 36 4 36 4 36 4 36 4 + 35 5 18 1 1 1 14 5 18 1 17 5 34 6 34 5 36 3 38 3 78 1 38 3 37 3 37 3 + 37 4 35 5 35 5 4 1 2 2 25 6 4 2 1 2 26 15 25 12 28 13 27 6 4 1 29 7 + 33 10 30 9 31 9 31 6 34 6 34 6 34 6 34 8 4 3 25 7 33 6 34 6 34 6 5 1 + 28 6 34 6 34 7 30 1 1 23 5 4 3 3 2 39 1 39 1 4 0 + + + + 1920.0 + + + 0.833333333333 + + + 1504.0 + + + 0.16289893617 + + + 1.05008077544 + + + 0.496914211675 0.471070054323 0.0679041250903 0.110545371152 + 0.00807637653851 -0.000776435733592 -0.00109719752462 + -0.00206182596103 0.00255582868054 + + + 40.0 + + + 0.725 0.395833333333 + + + 1.8 0.5 0.1 0.5 0.75 0.166666666667 0.25 0.416666666667 + + + 48.0 + + + 10.0 33.0 0.20218579235 2.0 4.0 2.0 + + + 0.0 0.979166666667 + + + 0.783333333333 + + + 0.891666666667 0.875 0.416666666667 0.475 0.9 0.991666666667 0.975 + 0.741666666667 0.85 1.0 1.0 0.8 0.6 0.766666666667 0.7 0.55 + + + 0.8 0.766666666667 0.866666666667 0.7 0.2 0.2 0.3 0.166666666667 + 1.0 1.0 1.0 0.933333333333 0.4 0.866666666667 0.933333333333 0.5 + 0.833333333333 1.0 1.0 0.966666666667 0.9 1.0 0.933333333333 0.5 + 0.833333333333 0.933333333333 1.0 1.0 1.0 1.0 1.0 0.533333333333 + 0.766666666667 0.966666666667 1.0 1.0 1.0 1.0 1.0 0.633333333333 + 0.666666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.566666666667 + 0.733333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.533333333333 + 0.366666666667 0.3 0.6 0.466666666667 0.4 0.4 0.4 0.266666666667 + + + 0.372002354291 0.0744759210347 0.0165560335621 0.0259062834248 + 0.0461881255736 0.100640150811 0.0708659928035 0.027025523062 + 0.0472991856702 0.00630716793508 0.110229143012 0.022640451114 + 0.0992005596321 0.0552276906297 + + + + + + + + + 55 2 177 3 29 3 143 5 28 3 143 5 27 3 145 3 30 1 145 2 31 1 145 3 30 + 1 145 5 28 1 145 11 21 3 144 27 4 4 144 35 144 35 144 35 144 35 144 + 35 144 35 144 35 144 35 145 34 145 35 144 35 143 36 144 35 144 35 144 + 35 144 35 144 35 21 1 122 35 19 4 121 35 19 5 120 35 19 5 120 16 1 10 + 28 5 119 5 4 24 22 6 119 4 5 6 1 17 21 8 117 33 21 8 117 35 19 10 115 + 35 19 11 114 4 5 26 19 10 86 1 28 1 2 1 5 25 20 10 86 1 38 24 20 11 + 85 10 30 23 20 11 85 15 22 3 1 1 2 18 21 8 1 2 85 21 8 3 4 26 19 10 1 + 2 85 26 2 7 1 29 15 11 88 34 2 29 17 10 87 17 2 8 1 7 1 3 1 25 17 12 + 6 2 77 18 1 7 3 6 2 3 1 24 17 12 6 4 75 65 14 1 3 12 2 1 2 5 74 65 13 + 24 1 3 74 65 12 27 75 65 12 3 1 23 75 61 1 3 11 28 75 34 6 20 3 2 11 + 30 1 2 70 33 30 2 11 29 1 3 70 33 30 2 11 29 2 3 41 1 27 33 30 2 11 + 30 1 4 40 1 27 33 31 1 11 36 39 1 27 33 31 1 11 36 39 2 26 33 31 2 10 + 36 39 2 26 33 31 2 9 37 13 1 25 2 26 34 30 3 8 39 10 5 22 3 25 36 28 + 2 8 40 10 4 22 4 24 36 29 3 8 38 10 6 22 3 25 35 28 3 9 38 10 6 22 4 + 24 35 29 2 9 6 3 28 11 6 21 6 24 10 1 1 2 20 40 6 5 2 2 8 1 13 10 7 + 21 6 24 5 4 1 4 20 29 3 8 5 16 1 2 12 11 7 21 7 22 6 6 1 1 21 30 2 8 + 9 12 15 11 10 18 5 25 5 6 1 2 3 2 14 31 2 9 12 8 15 11 13 16 4 25 6 1 + 1 3 1 2 2 2 15 31 2 10 14 4 16 11 13 16 4 25 15 3 15 31 2 11 13 4 15 + 11 15 15 4 25 15 4 14 31 2 12 10 7 14 11 16 14 5 24 15 4 14 31 3 12 5 + 2 3 7 13 11 17 13 9 20 12 2 2 3 14 32 2 13 4 3 4 4 14 11 18 12 21 3 1 + 3 18 1 15 32 2 14 2 12 14 11 19 10 48 1 14 32 2 27 3 2 10 10 21 9 34 + 10 4 1 14 32 2 27 2 3 10 10 22 9 24 3 6 10 19 32 2 32 9 11 23 8 33 2 + 4 1 22 33 1 28 3 1 9 11 24 6 64 31 3 27 13 10 26 5 40 1 23 31 3 27 13 + 10 27 4 64 31 3 27 2 2 9 10 28 3 34 3 27 31 3 32 8 10 28 3 34 8 22 31 + 3 32 7 10 30 2 33 13 18 32 1 33 7 10 30 3 32 18 13 33 1 31 8 10 7 1 3 + 1 20 1 32 25 6 65 8 10 5 3 3 1 9 9 2 1 32 28 3 65 8 10 4 5 1 2 9 10 1 + 1 32 29 2 66 7 9 5 4 2 2 7 1 2 8 2 1 32 29 2 66 7 9 6 2 4 2 10 7 2 1 + 32 29 2 33 2 32 5 11 23 10 32 29 2 33 2 34 3 12 22 4 1 5 32 30 1 33 2 + 34 3 12 22 4 2 4 32 30 1 33 2 34 3 12 22 3 4 3 32 30 1 33 2 34 2 13 + 23 2 5 3 27 2 3 64 1 34 2 13 23 2 4 4 5 4 3 1 19 64 1 34 2 12 4 2 25 + 3 3 6 1 4 18 100 1 12 4 4 22 4 4 5 2 3 18 114 1 7 1 1 7 3 9 4 12 1 19 + 113 1 13 3 5 1 4 3 4 32 112 2 13 3 11 2 4 32 113 1 14 2 5 1 5 1 5 32 + 113 2 12 3 4 3 3 2 5 33 111 2 4 2 4 6 3 5 1 3 5 33 117 2 2 8 2 10 5 + 33 117 2 2 8 2 10 5 33 116 13 3 9 5 33 115 25 6 33 116 24 6 33 117 23 + 6 33 118 21 7 33 119 20 7 33 120 19 7 33 122 17 7 34 121 17 7 6 1 27 + 122 15 8 3 10 21 122 15 8 3 21 1 2 7 124 1 5 7 8 3 25 6 124 3 1 8 9 3 + 26 5 125 11 10 2 26 6 125 10 10 2 26 6 126 10 8 3 26 7 126 9 7 5 25 8 + 125 9 8 4 25 8 126 8 9 2 27 7 127 6 10 2 27 7 127 7 9 3 26 6 129 5 10 + 3 26 6 131 1 12 3 27 4 176 3 177 2 177 2 178 1 142 0 + + + + 23807.0 + + + 1.34586466165 + + + 6733.0 + + + 0.244913114511 + + + 0.946431749422 + + + 0.443609122935 0.507465491091 0.400618836486 0.123080294783 + 0.00178948669576 0.0852913401111 -0.00580648358177 0.0898518307352 + -0.00367059226469 + + + 179.0 + + + 1.22346368715 2.87969924812 + + + 1.27374301676 1.1843575419 1.05027932961 1.34078212291 + 0.601503759398 3.42857142857 5.56390977444 1.92481203008 + + + 133.0 + + + 30.0 165.0 0.218844984802 22.0 2.0 9.0 + + + 0.0 0.992481203008 + + + 0.282815978494 + + + 0.0 0.297520661157 0.684573002755 0.454545454545 0.560269360269 + 0.63164983165 0.241750841751 0.0 0.047138047138 0.519865319865 + 0.201346801347 0.0 0.0 0.0929292929293 0.556228956229 + 0.256862745098 + + + 0.0 0.0 0.0 0.0935828877005 0.681818181818 0.875 0.879679144385 + 0.101604278075 0.0 0.0 0.4375 0.649732620321 0.673796791444 + 0.508522727273 0.590909090909 0.245989304813 0.334239130435 + 0.460358056266 0.535326086957 0.846547314578 0.787723785166 + 0.138586956522 0.0 0.0 0.463068181818 0.978609625668 0.982954545455 + 0.171122994652 0.0 0.0 0.0 0.0 0.0284090909091 0.0775401069519 + 0.1875 0.385026737968 0.179144385027 0.0397727272727 0.0 0.0 0.0 + 0.079283887468 0.538043478261 0.93094629156 0.46547314578 + 0.0978260869565 0.0 0.0 0.0 0.0 0.0 0.33422459893 0.51871657754 + 0.380681818182 0.104278074866 0.0 0.0 0.0 0.0 0.0332480818414 + 0.60358056266 0.711956521739 0.662404092072 0.242966751918 + + + 0.405788539833 0.145522961298 0.182182059648 0.151194541463 + 0.0758302654407 0.238160875874 0.0499258503844 0.300464431574 + 0.225030736043 0.0952967091722 0.0870783497563 0.0950510285926 + 0.123703681546 0.0751175002741 + + + + + + + + + 40 1 174 5 96 1 76 6 95 2 75 7 94 1 76 9 92 1 76 10 91 2 75 10 91 4 + 31 1 41 12 89 12 7 2 14 1 41 14 87 37 40 15 86 37 40 15 86 37 40 16 + 85 37 40 16 85 37 40 18 83 37 40 19 82 38 39 20 81 38 39 17 84 38 39 + 17 84 39 38 16 85 39 38 16 4 1 80 38 39 17 2 4 78 37 40 26 74 38 40 + 27 9 1 63 39 39 22 3 8 1 8 58 39 39 20 1 3 1 19 55 40 39 20 1 26 52 + 40 38 20 3 26 51 40 37 20 8 4 1 4 1 17 47 39 36 21 10 3 1 24 43 40 37 + 19 11 26 46 38 40 17 5 2 5 11 2 6 53 37 40 18 6 1 8 1 5 3 3 2 54 36 + 40 20 15 20 47 37 40 17 3 4 10 1 3 18 2 3 4 4 31 39 38 26 9 4 3 30 29 + 38 39 20 4 3 19 30 25 38 39 19 1 1 5 2 6 2 11 34 21 5 3 26 1 2 39 16 + 4 5 3 3 3 5 15 29 19 1 1 3 4 25 1 2 4 2 34 8 1 6 4 6 4 12 11 33 16 6 + 4 24 1 2 3 10 27 8 3 2 6 8 3 6 10 42 12 38 3 17 4 2 14 4 3 1 3 3 5 12 + 1 6 11 41 10 39 2 33 3 9 3 2 8 14 16 2 1 41 4 39 3 42 1 1 16 13 17 43 + 3 6 5 28 3 41 20 17 10 46 1 10 1 29 3 40 12 3 8 17 1 1 1 92 3 40 13 3 + 9 110 3 39 10 1 5 5 6 36 8 65 4 38 10 2 5 7 6 34 8 64 3 39 19 9 4 37 + 2 31 1 33 3 37 22 9 6 32 11 28 5 6 8 1 5 5 3 36 26 8 7 2 2 27 12 21 + 31 3 3 37 29 8 11 28 7 21 31 3 4 36 30 12 9 29 2 21 33 2 4 38 30 16 4 + 51 33 2 4 39 30 17 5 49 32 2 4 39 31 19 5 46 32 3 2 40 33 10 2 8 6 42 + 32 3 2 40 35 11 2 6 9 38 32 3 3 39 37 13 17 34 32 3 3 39 45 7 18 31 + 32 3 3 39 72 29 32 3 4 38 77 24 33 2 4 3 4 28 82 22 33 3 2 39 79 22 + 32 5 1 39 80 21 32 5 1 38 81 21 31 6 1 37 83 20 30 1 1 5 1 39 80 21 + 30 1 2 4 1 40 77 23 33 4 1 39 54 5 8 34 33 3 2 39 53 49 31 4 3 38 55 + 46 33 2 4 39 57 43 34 1 4 39 65 36 37 40 65 36 37 40 68 34 36 40 73 + 28 37 40 77 1 2 21 37 17 1 22 81 20 37 18 1 21 82 20 37 39 84 17 38 6 + 1 7 1 2 3 20 87 13 37 4 24 12 91 9 69 10 92 8 68 10 94 6 69 9 95 4 71 + 8 94 5 71 7 95 5 71 1 2 2 1 1 95 3 39 0 + + + + 15842.0 + + + 2.0 + + + 6388.0 + + + 0.215873512837 + + + 0.691185318893 + + + 0.507958071101 0.515321696932 0.471735332693 0.061104807399 + -0.0518211879779 -0.0250110916876 -0.000155009908044 + 0.00288675212379 -0.000331928425862 + + + 178.0 + + + 1.50561797753 2.66292134831 + + + 0.719101123596 3.01123595506 1.41573033708 0.786516853933 + 1.16853932584 4.31460674157 3.2808988764 1.75280898876 + + + 89.0 + + + 25.0 133.0 0.271393643032 18.0 6.0 8.0 + + + 0.0 0.988764044944 + + + 0.403231915162 + + + 0.14979338843 0.308884297521 0.867768595041 0.677865612648 + 0.163636363636 0.59898989899 0.30202020202 0.0 0.0 0.36673553719 + 0.709710743802 0.324110671937 0.559595959596 0.834343434343 + 0.414141414141 0.197101449275 + + + 0.0 0.0 0.0 0.396694214876 0.98347107438 0.938016528926 + 0.942148760331 0.378787878788 0.280991735537 0.318181818182 + 0.355371900826 0.48347107438 0.747933884298 0.801652892562 + 0.834710743802 0.590909090909 0.148760330579 0.520661157025 + 0.710743801653 0.561983471074 0.181818181818 0.0 0.0 0.0 0.0 0.0 + 0.679841897233 0.446640316206 0.770750988142 0.237154150198 0.0 0.0 + 0.0 0.0 0.0371900826446 0.929752066116 0.880165289256 + 0.227272727273 0.280991735537 0.0 0.0 0.0 0.0 0.5 0.900826446281 + 0.830578512397 0.880165289256 0.17803030303 0.305785123967 + 0.776859504132 0.822314049587 0.752066115702 0.677685950413 + 0.363636363636 0.388429752066 0.32196969697 0.252964426877 + 0.901185770751 0.893280632411 0.865612648221 0.470355731225 + 0.154150197628 0.098814229249 0.0 + + + 0.265850983301 0.273844279982 0.0538368364561 0.0185457054976 + 0.0114644215368 0.335985613991 0.188290788097 0.0642417142428 + 0.0299286867378 0.0306093965052 0.152645733777 0.245726216478 + 0.227378278991 0.131545513632 + + + + + + + + + 2 1 30 2 30 1 31 1 1 1 29 1 1 1 29 3 30 3 29 3 29 3 29 3 29 3 30 2 30 + 2 30 2 30 2 30 2 30 2 30 2 30 2 30 2 30 2 30 2 30 2 1 1 1 1 26 3 2 1 + 26 3 2 1 26 3 2 1 26 6 26 6 25 7 25 7 26 6 25 7 25 7 25 7 25 7 25 7 1 + 1 8 1 15 18 14 18 14 6 1 11 14 6 1 9 16 6 1 6 19 10 22 7 5 2 18 6 6 4 + 16 6 6 4 16 6 6 4 17 5 6 5 16 5 6 5 16 6 5 5 16 6 5 6 15 6 3 8 14 8 1 + 9 13 9 1 9 14 8 4 5 15 8 4 4 17 7 4 4 17 7 4 5 2 2 12 7 4 5 2 3 11 7 + 3 6 2 3 11 7 2 13 10 7 1 16 8 7 3 14 4 2 1 8 3 15 3 2 1 9 1 16 3 11 3 + 15 7 7 3 15 8 5 4 12 11 5 3 12 12 5 2 14 11 5 2 16 9 9 4 8 12 9 4 5 + 14 9 3 7 13 21 11 24 8 26 5 25 8 16 7 1 9 14 7 2 8 19 1 4 9 7 2 7 4 1 + 11 7 2 6 17 8 1 6 17 7 2 8 5 1 9 6 3 7 4 3 9 7 2 7 3 4 9 7 1 10 1 4 8 + 6 3 8 3 4 9 5 1 10 3 4 9 15 2 6 9 23 9 24 7 8 4 12 8 8 5 10 9 23 9 22 + 10 8 2 11 12 7 3 8 14 7 3 7 15 7 5 5 15 7 5 4 16 7 5 3 17 7 5 2 18 8 + 4 2 18 7 5 1 19 9 1 5 17 9 1 4 18 14 18 15 18 14 18 13 19 3 1 2 2 1 + 23 3 30 2 30 2 30 2 30 1 22 0 + + + + 3744.0 + + + 0.273504273504 + + + 1380.0 + + + 0.413768115942 + + + 1.08542992332 + + + 0.439270687237 0.594952523738 0.0366267499521 0.445717134082 + 0.0511356081569 0.00188389053392 -0.0417918561637 -0.00468655631975 + -0.112370562054 + + + 32.0 + + + 2.78125 0.709401709402 + + + 1.625 3.625 3.375 2.5 0.239316239316 0.786324786325 1.12820512821 + 0.683760683761 + + + 117.0 + + + 13.0 61.0 0.232786885246 11.0 6.0 3.0 + + + 0.0 0.991452991453 + + + 0.36858974359 + + + 0.327586206897 0.620689655172 0.353448275862 0.116666666667 + 0.0301724137931 0.465517241379 0.797413793103 0.758333333333 0.0 + 0.35775862069 0.909482758621 0.558333333333 0.0 0.00431034482759 + 0.379310344828 0.2125 + + + 0.428571428571 0.266666666667 0.357142857143 0.133333333333 + 0.166666666667 0.0 0.0 0.0 0.142857142857 0.466666666667 1.0 1.0 + 0.85 0.375 0.35 0.116666666667 0.0 0.116666666667 0.553571428571 + 0.533333333333 0.75 1.0 1.0 0.816666666667 0.0 0.0 0.392857142857 + 0.383333333333 0.683333333333 0.767857142857 0.666666666667 0.55 + 0.0 0.0 0.303571428571 0.916666666667 0.883333333333 1.0 + 0.733333333333 0.433333333333 0.0 0.0 0.0535714285714 + 0.133333333333 0.966666666667 0.785714285714 0.883333333333 + 0.183333333333 0.0 0.0 0.0 0.0166666666667 0.65 0.446428571429 0.6 + 0.0 0.0 0.0 0.0 0.0 0.0666666666667 0.357142857143 0.25 0.0 + + + 0.7004934562 0.111218114716 0.0685705209347 0.0297204594431 + 0.716298955485 0.303280948089 0.0564073063901 0.112734683727 + 0.0406134163108 0.0358130810497 0.531953243747 0.457259512942 + 0.141819750228 0.0393987255385 + + + + + + + + + 4 1 174 4 173 4 87 1 85 5 86 3 15 2 4 1 12 1 48 6 85 33 3 2 48 7 84 + 39 47 9 82 39 47 10 81 39 47 11 80 39 47 12 79 39 47 13 78 39 47 15 + 76 39 47 16 75 39 47 16 75 39 47 17 74 39 47 17 74 39 47 18 73 39 47 + 18 73 39 47 18 3 1 69 39 47 18 3 2 68 39 47 16 5 2 68 39 47 17 4 2 68 + 39 47 19 2 3 68 38 47 20 1 6 9 2 53 39 47 31 5 6 49 39 47 33 5 4 49 + 39 47 44 47 40 45 47 45 41 43 22 1 1 1 17 2 7 41 41 45 24 3 28 37 40 + 45 23 6 15 5 6 37 40 45 24 5 15 8 4 36 40 45 21 1 2 15 1 13 2 36 41 + 46 24 17 4 4 16 26 39 47 24 13 29 26 38 48 23 2 4 9 2 3 24 24 38 48 + 24 1 6 16 22 22 38 48 31 18 23 19 38 48 24 2 12 11 26 16 38 48 38 11 + 28 14 38 48 38 11 30 11 39 48 40 9 31 9 40 49 32 2 3 13 78 49 20 1 17 + 8 2 1 79 49 38 2 88 49 20 1 107 49 20 3 32 3 36 1 6 1 26 49 18 8 30 3 + 34 27 4 1 3 49 17 11 14 1 24 2 3 1 20 33 2 49 4 2 13 11 4 11 12 4 5 7 + 19 34 2 49 4 4 12 25 17 11 19 34 2 49 4 8 10 23 19 9 19 34 2 49 4 8 8 + 1 3 22 23 4 19 34 2 49 4 11 2 4 4 21 21 7 18 34 2 49 4 19 2 24 21 4 + 18 34 2 49 4 46 21 2 20 33 2 50 3 48 18 3 20 33 2 50 3 50 39 33 2 50 + 3 54 35 33 2 50 3 57 32 33 2 50 3 40 1 20 28 33 2 50 4 40 2 21 25 33 + 2 50 3 69 20 33 2 50 3 69 20 33 2 50 3 69 8 5 7 33 2 50 3 70 8 5 6 33 + 2 50 3 69 10 5 5 33 2 50 3 69 11 3 6 34 1 50 3 68 21 33 2 40 1 9 4 68 + 21 32 2 39 2 9 4 68 21 32 2 39 2 9 4 69 20 32 2 38 3 10 3 69 20 33 1 + 38 3 10 3 69 20 33 1 37 4 9 4 68 21 46 3 22 4 9 4 58 6 4 21 43 7 8 5 + 7 5 10 3 57 32 39 12 8 16 10 3 59 30 37 13 8 17 10 3 62 6 2 20 32 19 + 5 18 10 3 64 26 31 20 5 19 9 3 66 24 31 20 5 19 9 4 68 21 31 20 5 19 + 9 4 70 19 31 18 1 1 5 19 9 4 72 17 31 20 5 20 8 4 74 15 31 20 5 20 7 + 5 76 13 31 20 5 20 7 5 78 11 31 21 3 21 8 4 81 9 30 21 3 21 8 4 83 8 + 29 21 3 23 6 4 84 6 30 22 2 22 8 3 85 5 30 46 7 4 84 7 29 46 8 3 85 6 + 29 21 3 22 7 5 84 6 29 8 3 10 3 22 7 5 86 4 30 21 2 15 2 5 8 3 88 1 + 32 21 2 15 3 3 9 3 121 20 3 20 10 3 121 20 3 20 11 2 121 7 2 11 3 20 + 11 2 121 4 1 2 2 12 2 21 10 2 121 3 6 11 3 21 10 2 121 3 7 11 2 21 10 + 2 121 21 2 21 10 2 121 21 2 21 10 2 122 20 2 21 11 1 122 20 3 20 11 1 + 122 20 4 19 11 1 122 20 3 20 134 20 4 19 134 20 4 20 133 20 3 21 133 + 20 3 21 133 21 2 21 134 7 1 11 3 21 134 6 2 10 5 20 134 2 1 1 1 2 1 8 + 7 14 4 3 136 13 7 14 5 1 134 15 8 13 6 1 134 10 167 6 172 3 174 2 175 + 1 176 1 42 0 + + + + 21948.0 + + + 1.42741935484 + + + 6510.0 + + + 0.219047619048 + + + 1.57188093122 + + + 0.525579527999 0.442290160229 0.395716420538 0.149930665133 + 0.127051830412 -0.0733428547519 0.041098232523 0.0260445660975 + 0.0202730614378 + + + 177.0 + + + 0.983050847458 2.38709677419 + + + 1.28813559322 1.49152542373 0.406779661017 0.723163841808 + 1.54838709677 3.09677419355 3.0 1.90322580645 + + + 124.0 + + + 26.0 106.0 0.273560209424 15.0 4.0 4.0 + + + 0.0 0.991935483871 + + + 0.296610169492 + + + 0.440615835777 0.520527859238 0.0806451612903 0.0263929618768 + 0.0234604105572 0.641495601173 0.195014662757 0.0 0.774926686217 + 0.591642228739 0.242668621701 0.016862170088 0.00430107526882 + 0.00143369175627 0.49247311828 0.693189964158 + + + 0.442424242424 0.869318181818 0.869696969697 0.386363636364 + 0.151515151515 0.170454545455 0.109090909091 0.0 0.0 0.423295454545 + 0.666666666667 0.190340909091 0.0 0.0 0.0 0.0 0.0 0.0909090909091 + 0.678787878788 0.536931818182 0.0 0.0 0.0 0.0 0.0 0.0 + 0.512121212121 0.832386363636 0.524242424242 0.264204545455 0.0 0.0 + 0.578787878788 0.772727272727 0.821212121212 0.423295454545 + 0.39696969697 0.426136363636 0.0333333333333 0.0 0.733333333333 1.0 + 1.0 0.161931818182 0.0636363636364 0.0823863636364 0.0363636363636 + 0.0 0.0 0.0170454545455 0.00606060606061 0.0 0.0666666666667 + 0.840909090909 0.830303030303 0.565340909091 0.0 0.0 0.0 0.0 + 0.130434782609 0.880434782609 0.884057971014 0.513586956522 + + + 0.352661538811 0.195104415042 0.0947117121744 0.114662934429 + 0.160481690762 0.154461303611 0.149465842058 0.186907437688 + 0.211349444042 0.0867056788391 0.275689539712 0.205890215137 + 0.252466511955 0.0993654584434 + + + + + + + + + 4 2 1 2 3 2 9 2 47 34 36 34 35 35 35 36 34 37 33 16 1 19 34 24 1 11 + 34 22 5 11 32 23 5 8 34 26 2 9 33 37 34 36 33 38 32 38 32 39 31 38 32 + 38 32 39 31 39 31 39 31 38 32 39 30 39 31 40 30 41 30 39 31 39 30 40 + 30 40 30 41 29 41 30 39 31 7 2 29 32 38 32 38 32 7 3 28 32 8 1 30 32 + 37 33 37 33 37 33 37 33 37 33 1 20 1 5 10 33 1 31 5 33 1 33 3 33 1 34 + 2 33 1 34 2 33 1 69 1 69 1 1534 2 68 2 68 2 67 3 42 2 3 23 37 33 37 + 33 37 33 36 34 36 34 36 34 36 34 36 34 36 34 36 34 35 35 34 36 34 36 + 34 37 33 36 34 37 33 36 34 8 1 28 33 36 35 30 40 18 1 16 35 18 1 16 + 35 4 1 13 1 16 35 4 1 3 1 26 35 35 35 35 35 35 34 36 34 36 34 36 34 + 36 34 36 34 36 35 35 35 35 35 35 35 1 1 33 35 35 35 35 36 34 40 30 36 + 34 35 11 5 1 9 1 2 6 35 4 66 1 35 0 + + + + 8470.0 + + + 0.578512396694 + + + 3123.0 + + + 0.14409221902 + + + 2.17711370262 + + + 0.505431882202 0.484160529405 0.116400802937 0.489941354032 + 0.188067420419 -0.00134758471686 0.00494979000287 0.000127745483874 + 0.020434917688 + + + 70.0 + + + 0.685714285714 0.239669421488 + + + 0.4 0.514285714286 1.25714285714 0.342857142857 0.264462809917 + 0.297520661157 0.0330578512397 0.363636363636 + + + 121.0 + + + 15.0 52.0 0.193548387097 4.0 3.0 0.0 + + + 0.0 0.99173553719 + + + 0.368713105077 + + + 0.925490196078 0.405882352941 0.0 0.0 0.944444444444 0.448148148148 + 0.012962962963 0.0698924731183 0.209803921569 0.143137254902 + 0.476470588235 0.912713472486 0.0 0.0 0.490740740741 0.854838709677 + + + 0.816666666667 0.916666666667 0.75 0.05 0.0 0.0 0.0 0.0 + 0.955555555556 1.0 0.822222222222 0.0 0.0 0.0 0.0 0.0 + 0.896296296296 1.0 0.874074074074 0.0 0.0 0.0 0.0 0.0 + 0.881481481481 1.0 0.918518518519 0.0 0.0 0.0518518518519 + 0.162962962963 0.118055555556 0.291666666667 0.6 0.55 + 0.0583333333333 0.0 0.925 0.966666666667 0.859375 0.0 0.0 0.0 0.0 + 0.0 0.977777777778 1.0 0.833333333333 0.0 0.0 0.0 0.0 0.0 1.0 + 0.977777777778 0.819444444444 0.0 0.0 0.0 0.0 0.0666666666667 + 0.896296296296 0.866666666667 0.763888888889 + + + 0.198264343188 0.330763001927 0.0421164265119 0.0173342732695 + 0.272437348653 0.504157627113 0.208035871495 0.0410798246735 + 0.00648597803219 0.0208697247658 0.193859019984 0.207561515652 + 0.343070098714 0.118256435767 + + + + + + + + + 46 1 3 2 44 3 2 2 44 5 1 1 44 8 44 8 44 3 2 1 46 3 50 2 49 4 46 6 45 + 7 45 7 45 5 46 6 45 7 44 8 43 6 668 1 50 3 35 1 49 4 42 1 1 1 2 8 10 + 1 28 14 7 2 29 15 6 2 28 17 5 1 28 19 1 4 28 1 1 1 2 13 1 5 28 1 3 11 + 4 5 27 1 1 1 2 12 1 6 28 1 1 21 30 2 2 18 29 2 3 12 2 4 28 3 3 11 2 5 + 29 1 4 11 2 4 27 1 6 18 27 2 1 22 27 19 1 5 27 19 1 4 28 24 28 25 25 + 27 25 27 25 26 25 7 3 3 4 10 25 7 3 2 5 10 25 2 2 2 4 2 5 10 25 2 2 2 + 4 2 5 8 26 3 1 3 3 15 1 1 26 6 3 15 28 24 28 6 1 13 1 4 27 2 7 9 42 6 + 45 6 46 6 8 2 36 6 7 3 34 7 9 2 35 6 1 4 3 2 35 18 33 7 2 10 35 5 2 + 10 35 5 3 9 36 1 6 7 43 9 42 10 43 9 43 8 45 7 48 4 48 3 50 2 32 0 + + + + 4316.0 + + + 0.626506024096 + + + 904.0 + + + 0.471238938053 + + + 0.67264573991 + + + 0.371920006941 0.592839412907 0.123967310589 0.369653177557 + -0.145472222614 0.0401235927114 0.136638920889 -0.0830097687513 + -0.163705465818 + + + 52.0 + + + 1.15384615385 0.686746987952 + + + 1.92307692308 2.15384615385 0.384615384615 0.153846153846 + 0.192771084337 0.578313253012 1.25301204819 0.578313253012 + + + 83.0 + + + 10.0 53.0 0.235294117647 7.0 6.0 2.0 + + + 0.0 0.987951807229 + + + 0.209453197405 + + + 0.0 0.0879120879121 0.575091575092 0.271062271062 0.0 + 0.355311355311 0.89010989011 0.490842490842 0.0384615384615 + 0.10989010989 0.18315018315 0.0 0.326923076923 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.15 0.681818181818 0.133333333333 0.0 0.0 0.0 0.0 + 0.342857142857 0.657142857143 0.74025974026 0.771428571429 + 0.155844155844 0.0 0.0 0.0 0.833333333333 1.0 0.712121212121 + 0.533333333333 0.712121212121 0.0 0.0 0.0 0.671428571429 + 0.885714285714 0.961038961039 0.357142857143 0.38961038961 0.0 0.0 + 0.0 0.383333333333 0.533333333333 0.272727272727 0.0 0.0 0.0 + 0.142857142857 0.0519480519481 0.0428571428571 0.0 0.0 0.0 0.0 + 0.416666666667 0.566666666667 0.0 0.0 0.0 0.0 0.0 0.0 + 0.342857142857 0.0285714285714 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.708430663338 0.0950804611389 0.154997131706 0.0646045631617 + 0.87326338697 0.161095971027 0.0712336804689 0.2580979201 + 0.0571359106061 0.0741552073876 0.861169872822 0.209700375042 + 0.0773729995579 0.0689048102041 + + + + + + + + + 3 1 242 1 1 2 128 2 111 1 1 3 127 2 111 5 127 2 111 6 91 4 31 2 111 8 + 88 15 3 11 7 2 111 9 87 38 111 9 87 37 112 9 87 37 112 10 87 36 112 2 + 1 12 82 37 111 15 82 36 112 16 81 35 113 16 81 36 112 10 1 6 80 36 + 112 10 2 4 81 34 114 10 1 6 80 34 114 19 78 36 112 20 76 37 112 19 77 + 37 112 23 74 36 112 27 70 37 111 27 70 37 112 18 1 5 72 37 112 18 2 6 + 70 36 113 19 1 8 68 36 112 31 9 1 56 36 37 2 73 32 9 1 55 36 33 1 3 2 + 73 28 1 5 10 2 51 37 31 2 2 4 73 19 3 14 7 4 49 37 32 1 2 4 73 22 1 6 + 3 4 2 2 4 4 48 37 31 8 72 22 5 6 2 4 1 2 3 7 44 38 27 13 70 25 5 30 + 37 39 24 22 64 20 12 7 5 16 36 39 25 20 65 20 12 7 1 8 4 8 37 37 27 + 13 1 5 65 21 12 6 1 9 7 5 35 39 25 14 2 5 64 21 12 6 1 3 5 4 11 2 31 + 39 25 14 3 5 63 5 5 18 1 2 2 5 10 1 7 12 28 39 24 14 4 6 61 6 1 2 2 + 14 2 6 1 5 11 3 2 18 25 37 26 13 4 6 63 22 3 5 4 2 11 26 23 37 27 11 + 5 7 62 30 2 6 12 23 23 37 26 14 2 8 62 25 3 1 4 7 14 22 21 36 25 14 3 + 9 61 26 8 6 13 25 19 36 25 14 2 11 60 28 7 8 9 26 19 36 26 13 2 11 60 + 20 2 23 11 25 16 36 25 29 58 19 5 21 10 27 15 36 24 30 58 16 8 18 13 + 28 14 36 24 32 56 16 10 20 4 35 12 14 1 21 23 33 56 2 3 11 11 63 7 3 + 17 16 23 36 53 2 4 10 13 64 4 2 29 5 22 38 52 2 5 9 14 69 31 3 22 39 + 51 2 7 8 3 2 8 70 31 2 22 40 50 3 8 5 4 2 11 67 55 40 50 2 11 3 8 3 7 + 12 4 50 55 40 50 2 11 3 7 8 5 9 5 15 5 30 55 40 50 2 23 7 7 7 6 15 7 + 26 55 5 4 2 1 28 50 2 39 3 10 15 4 26 57 2 8 29 50 2 50 27 1 18 67 22 + 2 5 51 2 48 29 2 17 67 20 7 1 52 2 52 24 3 18 66 20 7 1 52 2 36 2 8 1 + 8 42 66 20 7 1 52 2 36 6 5 1 8 42 64 21 7 1 52 2 36 8 14 40 68 18 59 + 2 38 2 2 3 15 38 68 18 60 1 39 2 2 4 15 36 65 20 24 5 31 2 63 35 65 + 16 28 6 30 2 64 34 65 16 27 8 29 2 69 29 66 5 1 9 26 10 29 1 55 3 12 + 28 65 5 4 7 26 10 28 2 56 3 15 24 66 4 4 8 26 9 28 2 57 3 18 11 1 8 + 67 3 4 9 25 9 28 2 77 11 4 7 66 4 3 9 25 9 28 2 78 11 2 8 66 3 5 8 25 + 8 30 1 68 3 6 13 1 8 75 1 1 1 1 3 22 1 1 8 31 1 66 4 5 24 71 5 4 3 4 + 1 15 12 30 2 64 7 5 22 64 4 3 5 4 6 1 1 14 13 29 3 62 9 6 21 64 3 5 4 + 2 10 13 15 29 2 78 20 64 4 4 16 13 15 29 1 79 20 65 2 5 5 4 4 16 15 5 + 7 17 2 74 24 66 12 1 7 15 29 14 3 64 34 67 19 15 30 13 3 65 33 68 18 + 15 31 12 3 66 32 69 17 14 13 3 16 12 3 70 28 70 15 15 12 3 18 11 3 70 + 28 71 14 15 8 1 1 4 18 12 3 73 26 72 11 16 7 2 1 4 21 9 3 76 22 74 10 + 16 8 1 1 4 22 8 3 78 20 75 9 15 37 8 3 79 19 76 8 15 38 6 4 81 18 97 + 41 4 4 84 15 78 4 15 41 4 4 86 13 79 4 14 15 1 1 1 23 5 4 87 11 78 4 + 15 14 3 24 5 4 88 11 78 2 14 45 3 3 91 9 94 46 3 2 90 10 94 45 4 2 92 + 8 94 46 3 2 93 7 94 7 3 35 99 7 93 8 3 35 5 1 97 3 93 2 1 5 2 2 2 2 2 + 29 2 4 96 1 98 10 6 27 4 3 97 1 95 14 4 27 4 3 192 45 5 3 192 13 1 5 + 3 23 5 3 195 8 4 4 4 21 6 3 196 7 3 5 5 20 7 2 199 4 4 4 12 2 3 8 210 + 1 18 5 3 7 211 1 18 5 4 6 211 2 16 6 3 7 212 2 15 6 2 8 229 15 230 15 + 230 15 230 4 1 1 5 4 231 2 9 2 232 2 2208 3 242 4 240 5 241 4 241 4 + 242 4 242 2 244 1 239 2 2 2 240 1 490 3 242 3 11 0 + + + + 33810.0 + + + 1.77536231884 + + + 7528.0 + + + 0.266604675877 + + + 1.51010334675 + + + 0.477455205484 0.395201951643 0.655438682364 0.0988355618168 + 0.139865084603 0.0493129575553 0.0287743762397 0.072426669038 + 0.00908683015409 + + + 245.0 + + + 1.35510204082 2.97826086957 + + + 2.44897959184 1.01224489796 0.832653061224 1.09387755102 + 2.11594202899 4.92753623188 4.0 0.724637681159 + + + 138.0 + + + 29.0 165.0 0.280802292264 43.0 1.0 9.0 + + + 0.0 0.992753623188 + + + 0.222656018929 + + + 0.334619093539 0.443091334895 0.0424300867888 0.00515222482436 + 0.340405014465 0.612646370023 0.297010607522 0.0 0.210703953713 + 0.418735362998 0.0858244937319 0.0 0.0 0.114746543779 + 0.532732447818 0.128110599078 + + + 0.335294117647 0.81568627451 0.717647058824 0.127777777778 + 0.0745098039216 0.0960784313725 0.021568627451 0.0 0.0 + 0.203036053131 0.631878557875 0.318996415771 0.00189753320683 0.0 + 0.0 0.0 0.0 0.0 0.570588235294 0.874074074074 0.482352941176 + 0.0627450980392 0.0 0.0 0.555977229602 0.783681214421 + 0.671726755218 0.34229390681 0.370018975332 0.271347248577 0.0 0.0 + 0.271347248577 0.407969639469 0.390891840607 0.00358422939068 0.0 + 0.0 0.0 0.0 0.0 0.154901960784 0.711764705882 0.598148148148 + 0.31568627451 0.0333333333333 0.0 0.0 0.0 0.0 0.153700189753 + 0.267025089606 0.409867172676 0.464895635674 0.0834914611006 0.0 + 0.0 0.0 0.0 0.0340501792115 0.356736242884 0.899430740038 + 0.371916508539 0.0681003584229 + + + 0.434774051798 0.214793538317 0.0935525258288 0.0584166379885 + 0.275502917111 0.300230744194 0.163470007186 0.154778557763 + 0.0471455436289 0.0706782867098 0.322550376489 0.142619265062 + 0.308253368077 0.11965573385 + + + + + + + + + 155 11 20 10 21 11 21 7 14 4 7 7 13 5 7 2 1 3 25 6 25 6 25 5 25 5 26 + 14 18 16 14 18 13 20 11 20 11 21 10 21 11 17 1 2 10 23 8 24 7 17 6 2 + 7 3 1 12 7 2 5 18 7 1 5 18 7 2 4 18 7 2 4 18 4 6 4 3 2 13 2 6 5 26 5 + 27 3 5 2 12 1 4 8 18 2 4 7 10 1 7 2 4 7 9 3 6 2 4 7 10 2 6 1 6 6 25 6 + 24 7 18 1 5 8 3 8 6 2 4 7 2 10 6 2 4 7 4 9 4 3 3 8 3 10 4 4 2 8 1 12 + 4 4 2 21 3 4 3 28 6 5 2 18 3 1 2 5 3 10 2 5 7 4 3 5 2 2 4 3 8 4 3 6 + 18 5 2 8 4 3 9 5 2 8 16 4 3 9 15 5 2 10 14 5 2 10 14 5 2 11 13 5 2 13 + 11 5 2 13 11 5 2 13 11 3 4 14 2 1 7 3 5 19 4 3 5 20 2 4 6 19 3 3 7 13 + 8 2 9 11 9 2 14 7 9 1 9 13 8 1 4 4 2 12 7 2 4 18 1 3 2 3 11 12 2 6 12 + 19 14 17 15 16 11 3 1 16 7 1 3 3 2 15 18 13 18 13 19 12 20 11 22 9 23 + 9 23 8 23 8 24 7 25 6 25 6 4 1 20 7 3 1 20 7 2 3 12 2 5 7 1 4 12 13 3 + 3 5 2 5 13 3 3 5 2 5 3 1 9 4 2 13 1 5 6 25 6 4 1 20 6 25 7 2 2 7 1 5 + 1 6 11 7 2 4 1 6 11 7 2 4 1 7 11 5 4 3 1 7 11 5 8 7 11 5 9 5 12 3 12 + 4 12 3 1 1 10 4 11 4 1 1 12 2 8 1 2 7 2 1 8 2 7 24 7 24 8 23 8 23 9 + 22 9 22 9 3 2 17 9 3 3 16 9 3 4 15 9 3 5 14 9 3 6 13 9 3 7 12 9 4 7 + 11 9 4 8 10 8 5 8 10 8 5 10 2 4 2 8 5 26 6 11 1 13 7 10 6 8 7 9 7 9 6 + 12 4 9 5 14 2 10 6 25 5 26 5 26 7 25 6 25 4 27 4 26 5 26 5 27 4 27 4 + 28 3 28 3 28 3 28 3 28 3 28 3 28 3 28 3 28 3 29 3 28 3 28 3 28 3 28 3 + 28 3 28 4 27 4 27 4 27 3 29 2 29 2 29 2 29 3 28 3 29 2 29 2 29 2 29 2 + 29 2 29 2 29 2 30 1 19 0 + + + + 5394.0 + + + 0.17816091954 + + + 2177.0 + + + 0.406982085439 + + + 1.04244543051 + + + 0.45813811055 0.422597252941 0.0272432000031 0.711010352037 + 0.00107945531755 0.00102669339104 -0.0252871076443 + -0.00245868092849 0.106744272169 + + + 31.0 + + + 5.41935483871 0.672413793103 + + + 4.12903225806 6.06451612903 4.38709677419 5.03225806452 + 0.574712643678 1.01149425287 1.08045977011 0.0229885057471 + + + 174.0 + + + 29.0 87.0 0.189130434783 16.0 14.0 2.0 + + + 0.0287356321839 0.994252873563 + + + 0.403596588802 + + + 0.581395348837 0.574675324675 0.335548172757 0.0616883116883 + 0.662790697674 0.380681818182 0.686046511628 0.363636363636 + 0.511627906977 0.448863636364 0.683139534884 0.0 0.241279069767 + 0.497159090909 0.436046511628 0.00568181818182 + + + 0.285714285714 0.136363636364 0.0454545454545 0.590909090909 + 0.142857142857 0.0 0.0 0.0 0.75 0.965909090909 0.579545454545 + 0.954545454545 0.440476190476 0.625 0.215909090909 0.0 + 0.535714285714 0.920454545455 0.0 0.840909090909 0.880952380952 + 0.681818181818 0.784090909091 0.5 0.285714285714 0.886363636364 + 0.0795454545455 0.602272727273 0.72619047619 0.465909090909 + 0.0227272727273 0.147727272727 0.25 1.0 0.511363636364 + 0.454545454545 0.714285714286 0.636363636364 0.0 0.0 0.154761904762 + 0.613636363636 0.522727272727 0.306818181818 0.607142857143 + 0.772727272727 0.0 0.0 0.0833333333333 0.659090909091 + 0.840909090909 0.352272727273 0.845238095238 0.863636363636 + 0.0227272727273 0.0 0.0 0.204545454545 0.545454545455 0.25 + 0.0357142857143 0.0 0.0 0.0 + + + 0.653597781962 0.139546816615 0.040407099918 0.0173102145178 + 0.565732567684 0.387425875539 0.0707174411447 0.0256343287936 + 0.037758608858 0.0287269648059 0.325209396697 0.554510541389 + 0.202643775926 0.0449811131032 + + + + + + + + + 8 14 9 15 8 15 8 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 13 10 14 9 + 13 10 13 10 13 10 13 10 13 10 13 10 13 10 14 9 14 9 14 9 14 9 14 9 14 + 9 13 9 14 10 13 10 14 9 13 10 13 10 13 10 13 10 13 10 14 8 14 9 15 9 + 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 13 10 13 10 13 10 + 13 10 13 10 13 10 13 9 14 9 13 10 14 9 13 10 13 10 13 10 14 9 14 9 14 + 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 13 10 14 9 14 9 13 10 13 10 13 + 10 13 10 13 10 14 9 14 9 14 10 12 10 13 10 14 9 14 9 13 10 13 10 13 + 10 13 10 14 9 13 9 14 10 13 10 13 10 14 8 15 8 14 9 14 8 15 9 14 10 + 14 9 14 9 14 8 16 6 17 6 16 6 17 6 17 6 16 8 15 8 15 8 14 11 12 11 11 + 11 12 6 1 1 15 5 18 6 17 11 12 11 11 12 11 13 10 13 10 14 9 13 10 12 + 11 12 11 12 11 13 11 12 11 12 11 12 10 13 9 14 9 14 9 14 9 14 9 14 9 + 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 8 15 8 15 8 15 8 15 8 15 9 + 14 9 14 9 14 9 14 9 14 9 14 9 14 9 13 9 15 8 14 9 14 9 14 9 14 9 14 9 + 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 14 9 + 14 9 14 9 14 9 13 10 13 10 13 10 13 10 13 10 13 9 14 9 14 9 14 9 14 9 + 14 9 14 9 14 9 14 8 14 9 15 8 15 8 14 10 12 11 12 11 13 10 13 10 13 + 10 14 10 13 9 14 4 3 2 14 3 4 2 15 1 21 2 1 1 19 3 20 5 19 5 17 10 13 + 4 20 2 15 0 + + + + 5037.0 + + + 0.10502283105 + + + 2530.0 + + + 0.226877470356 + + + 0.953543311808 + + + 0.558102766798 0.442994161802 0.00669345003794 1.42588997144 + -0.0440204033808 0.000105000697738 -0.0195662661363 + -0.000706666240135 0.403038315679 + + + 23.0 + + + 2.0 0.0182648401826 + + + 0.695652173913 3.30434782609 1.21739130435 2.60869565217 0.0 0.0 + 0.0182648401826 0.0547945205479 + + + 219.0 + + + 3.0 11.0 0.0876494023904 3.0 11.0 1.0 + + + 0.0 0.995433789954 + + + 0.502283105023 + + + 0.0 0.00727272727273 0.0472727272727 0.0327272727273 0.509259259259 + 0.709090909091 0.736363636364 0.866666666667 1.0 1.0 0.878787878788 + 0.5 0.768518518519 0.6 0.0666666666667 0.0 + + + 0.0 0.0 0.0 0.0 0.0740740740741 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0246913580247 0.111111111111 0.0 0.0 0.107142857143 0.0 + 0.037037037037 0.321428571429 0.518518518519 0.58024691358 + 0.369047619048 0.753086419753 0.940476190476 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 0.77380952381 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.678571428571 + 1.0 1.0 1.0 1.0 0.962962962963 0.559523809524 0.308641975309 + 0.0238095238095 1.0 1.0 1.0 1.0 0.271604938272 0.0 0.0 0.0 + 0.58024691358 0.493827160494 0.214285714286 0.185185185185 0.0 0.0 + 0.0 0.0 + + + 0.495935515054 0.227789570839 0.105718701736 0.0358170930638 + 0.37810855427 0.42024942036 0.177955807361 0.0621614528163 + 0.0724215053842 0.0578483431611 0.423057867546 0.365235879469 + 0.369288868351 0.144310661726 + + + + + + + + + 15 2 16 4 15 5 14 5 13 6 13 5 14 5 14 5 14 5 14 5 13 6 13 6 13 6 12 7 + 12 7 12 7 12 7 12 7 13 5 13 7 12 6 15 4 14 5 14 4 15 4 15 4 15 3 36 2 + 17 2 17 2 17 1 17 3 15 4 15 4 15 4 15 3 15 5 13 6 14 5 14 4 14 6 13 6 + 12 7 12 6 13 6 13 6 13 5 14 6 13 6 13 6 12 7 12 6 13 6 13 6 13 6 13 5 + 15 3 17 2 36 1 18 1 17 4 14 5 14 4 14 5 14 6 13 5 15 3 16 3 16 4 15 3 + 15 4 15 4 14 5 14 5 15 4 15 4 15 4 15 4 15 3 16 3 15 4 16 3 16 3 16 3 + 16 3 15 5 14 4 15 4 15 3 16 3 16 3 16 3 16 2 17 2 17 2 17 2 16 3 17 2 + 17 2 17 3 15 3 16 3 16 3 16 3 16 3 16 3 16 3 16 3 14 5 15 4 15 3 15 5 + 14 5 14 5 15 4 15 3 74 2 16 4 15 4 15 4 15 5 14 4 15 3 16 3 16 2 17 3 + 16 3 15 3 17 3 16 2 17 2 17 2 16 3 16 4 15 4 15 3 16 4 15 4 15 4 15 3 + 16 3 16 3 16 3 16 3 16 3 16 3 16 4 14 5 14 5 14 5 14 5 14 5 14 5 14 5 + 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 14 5 + 14 5 13 6 14 5 14 5 14 5 15 4 15 4 15 4 15 4 15 4 14 6 13 5 14 6 13 5 + 14 5 15 3 16 3 14 0 + + + + 3610.0 + + + 0.1 + + + 773.0 + + + 0.632600258732 + + + 0.825885225885 + + + 0.421230415409 0.485465136177 0.0267937349236 4.40724685488 + -0.314635456742 0.00200859829073 0.0825136428244 -0.0164591617767 + 0.906119839253 + + + 19.0 + + + 2.21052631579 0.0 + + + 1.05263157895 3.78947368421 2.31578947368 1.05263157895 0.0 0.0 0.0 + 0.0 + + + 190.0 + + + 1.0 6.0 0.124293785311 6.0 8.0 1.0 + + + 0.0 0.994736842105 + + + 0.214127423823 + + + 0.0 0.0 0.202127659574 0.666666666667 0.0170212765957 + 0.470833333333 0.43829787234 0.370833333333 0.472340425532 0.325 + 0.0 0.0 0.463829787234 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.291666666667 0.375 0.0 0.0 0.0 0.0 + 0.260869565217 0.541666666667 1.0 1.0 0.0 0.0 0.0416666666667 + 0.472222222222 0.884057971014 0.555555555556 0.569444444444 + 0.666666666667 0.0 0.0833333333333 0.708333333333 0.875 + 0.0217391304348 0.0208333333333 0.0 0.0 0.0 0.354166666667 0.875 + 0.208333333333 0.0 0.0 0.0 0.0 0.550724637681 0.777777777778 + 0.361111111111 0.0 0.0 0.0 0.0 0.0 0.978260869565 0.416666666667 + 0.0 0.0 0.0 0.0 0.0 0.0 0.63768115942 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.278603884901 0.337505515663 0.0770440814479 0.0283502688349 + 0.177580988431 0.377613905763 0.326135218575 0.0416528089466 + 0.0587243219937 0.0491785427234 0.315085527297 0.212702338762 + 0.427669966462 0.307211783824 + + + + + + + + + 38 1 45 1 45 1 45 1 45 1 45 2 31 3 9 3 8 4 6 23 2 3 8 34 1 3 9 37 9 + 37 9 37 9 37 9 37 9 37 9 37 9 37 8 38 8 38 9 37 9 37 9 37 9 38 7 39 5 + 41 6 40 7 39 7 40 6 39 7 38 9 37 10 36 10 37 9 36 9 37 9 38 8 38 8 38 + 8 38 9 37 9 37 9 37 9 37 10 36 10 36 10 36 10 36 10 36 9 37 9 37 10 8 + 20 8 10 4 27 5 10 3 29 4 11 2 30 4 9 3 30 4 9 2 31 4 9 2 32 3 10 2 31 + 3 10 2 31 3 10 2 31 3 43 3 43 3 43 4 42 4 42 4 42 4 41 5 42 4 42 4 42 + 4 43 4 42 4 42 4 42 4 42 4 42 4 42 5 41 5 41 5 42 4 42 1 45 4 42 5 41 + 5 42 4 42 3 43 3 43 3 1 0 + + + + 4048.0 + + + 0.522727272727 + + + 1795.0 + + + 0.178830083565 + + + 1.10751206065 + + + 0.507595171773 0.36357698588 0.0777955063338 0.156763480397 + 0.0324706543764 -0.000362299397643 0.0263929989374 0.00918080431046 + 0.0491129070717 + + + 46.0 + + + 0.282608695652 0.159090909091 + + + 0.521739130435 0.0 0.0 0.608695652174 0.181818181818 0.0 + 0.454545454545 0.0 + + + 88.0 + + + 1.0 7.0 0.164285714286 1.0 2.0 2.0 + + + 0.0 0.988636363636 + + + 0.443428853755 + + + 0.49173553719 0.731404958678 0.272727272727 0.0 0.67803030303 1.0 + 0.280303030303 0.0 0.694214876033 1.0 0.276859504132 0.0 + 0.367424242424 0.568181818182 0.393939393939 0.333333333333 + + + 0.181818181818 0.436363636364 0.545454545455 0.272727272727 + 0.0363636363636 0.0 0.0 0.0 0.287878787879 1.0 1.0 1.0 + 0.818181818182 0.151515151515 0.0 0.0 0.348484848485 1.0 1.0 1.0 + 0.575757575758 0.0 0.0 0.0 0.363636363636 1.0 1.0 1.0 + 0.545454545455 0.0 0.0 0.0 0.418181818182 1.0 1.0 1.0 + 0.545454545455 0.0 0.0 0.0 0.363636363636 1.0 1.0 1.0 + 0.560606060606 0.0 0.0 0.0 0.469696969697 1.0 1.0 1.0 0.80303030303 + 0.181818181818 0.0757575757576 0.0 0.0 0.0 0.136363636364 + 0.136363636364 0.19696969697 0.393939393939 0.621212121212 + 0.636363636364 + + + 0.730566923719 0.048898513988 0.0864333342298 0.0371927412497 + 0.804089434644 0.073623157748 0.0385469069871 0.147270956193 + 0.035433499319 0.0392426790089 0.565773075508 0.0903363819666 + 0.0548587990219 0.0388157616157 + + + + + + + + + 12 1 13 2 13 2 13 3 12 2 13 2 13 2 12 3 12 4 12 3 13 2 13 2 13 2 14 1 + 14 1 14 1 14 1 13 3 12 2 9 6 9 6 10 6 9 6 8 7 8 6 9 6 9 7 8 7 8 7 8 7 + 8 7 8 5 10 5 9 6 9 6 9 6 9 6 9 6 10 5 10 4 11 4 11 4 11 5 10 5 9 6 10 + 4 11 4 11 4 11 5 10 4 11 4 10 5 11 4 11 4 11 4 11 4 11 4 11 4 11 4 11 + 4 11 4 11 4 11 4 10 5 10 5 10 4 11 4 12 3 11 4 11 4 11 4 12 3 12 3 12 + 4 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 9 6 10 + 5 9 6 9 6 10 5 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 5 11 4 11 4 11 4 + 11 4 10 5 10 6 9 6 8 7 8 7 8 7 8 7 8 6 9 6 9 7 7 8 7 8 7 8 7 8 7 8 7 + 9 6 9 6 8 7 1 1 6 10 2 238 2 10 6 8 8 7 9 6 9 6 7 8 7 8 6 9 6 9 7 8 7 + 9 5 9 8 8 5 10 5 10 5 10 5 10 4 11 5 10 4 11 4 12 3 72 2 13 3 11 5 10 + 5 11 4 11 4 11 4 11 4 12 3 12 3 12 3 13 2 36 3 13 2 12 0 + + + + 2730.0 + + + 0.0824175824176 + + + 783.0 + + + 0.563218390805 + + + 0.860393844549 + + + 0.608648056924 0.489525341688 0.00743024634083 2.92222379935 + -0.100951847828 -0.000152945780493 -0.00975634319772 + 0.00161957451401 0.307534510121 + + + 15.0 + + + 2.6 0.00549450549451 + + + 0.0 1.33333333333 3.73333333333 2.66666666667 0.0 0.0 + 0.021978021978 0.0 + + + 182.0 + + + 4.0 11.0 0.174193548387 6.0 30.0 1.0 + + + 0.0 0.994505494505 + + + 0.286813186813 + + + 0.0 0.0 0.0 0.036231884058 0.0 0.0163043478261 0.294444444444 + 0.505434782609 0.466666666667 0.885869565217 0.744444444444 + 0.402173913043 0.588888888889 0.211956521739 0.15 0.0108695652174 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0434782608696 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0869565217391 0.0 0.0 0.0 0.0 0.0 0.195652173913 + 0.608695652174 0.0869565217391 0.0 0.0 0.0 0.0652173913043 + 0.522727272727 0.45652173913 0.782608695652 0.54347826087 + 0.0454545454545 0.608695652174 0.608695652174 0.934782608696 1.0 + 0.521739130435 0.804347826087 0.521739130435 0.181818181818 1.0 1.0 + 1.0 1.0 0.478260869565 0.282608695652 0.0 0.681818181818 + 0.934782608696 0.45652173913 0.391304347826 0.340909090909 + 0.260869565217 0.0434782608696 0.0 0.386363636364 0.347826086957 + 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.455167871158 0.249209115208 0.0315389577247 0.010334892075 + 0.347544146685 0.410747814818 0.207911561005 0.0294628161897 + 0.0467024256106 0.0214843125947 0.434086835234 0.324354842891 + 0.386271335225 0.177111774098 + + + + + + + + + 0 3 1 3 1 3 1 3 1 3 1 3 1 4 2 2 + + + + 32.0 + + + 0.5 + + + 24.0 + + + 1.16666666667 + + + 0.745098039216 + + + 0.402777777778 0.494047619048 0.0381221064815 0.20826099537 + 0.027271412037 0.0010840649833 0.00905766440642 0.00528497060529 + -0.00434241240188 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 8.0 + + + 1.0 1.0 0.0 0.0 3.0 1.0 + + + 0.0 0.875 + + + 0.75 + + + 1.0 1.0 1.0 0.5 1.0 1.0 1.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 + + + 0.252173761142 0.254806045403 0.0710066901154 0.0766699928535 + 0.162632992695 0.178102380789 0.152229669813 0.0652892723923 + 0.0814409715008 0.124239560377 0.0496925908111 0.0638804770628 + 0.0918725751656 0.116918524618 + + + + + + + + + 130 1 105 12 22 1 104 24 10 1 104 29 5 1 104 35 104 35 104 36 103 35 + 104 18 1 16 104 18 3 15 13 1 89 36 12 2 89 36 12 2 89 36 12 3 88 36 + 12 3 88 37 10 4 89 36 11 2 89 37 6 1 4 3 60 1 27 37 6 2 3 3 60 1 27 + 37 5 9 60 2 27 36 5 10 58 5 24 38 5 8 59 5 24 38 5 8 59 5 24 41 2 9 + 58 5 25 39 3 9 58 5 25 38 4 10 57 6 24 37 5 11 55 7 24 37 6 11 55 7 + 22 38 6 12 55 2 26 39 5 14 53 2 27 37 6 16 51 2 27 37 6 18 49 3 26 37 + 6 20 47 4 26 20 2 14 6 25 2 1 39 6 24 7 2 17 3 1 2 3 7 32 35 7 1 2 20 + 8 1 26 7 34 33 12 18 7 3 26 6 34 33 15 1 2 12 7 3 26 6 35 32 21 9 36 + 6 35 32 25 4 37 6 35 32 66 6 36 31 66 6 36 31 66 6 37 30 35 1 30 6 37 + 30 34 3 30 5 37 30 33 11 24 4 37 30 33 12 1 1 20 5 38 29 17 1 16 12 1 + 1 1 5 4 4 4 6 38 29 34 22 1 6 3 5 39 29 34 29 3 5 39 29 34 29 4 4 39 + 29 34 29 3 6 38 29 34 29 3 7 38 28 34 29 3 5 40 28 35 28 3 6 39 28 34 + 29 3 8 17 2 18 28 34 30 2 7 38 28 34 30 2 6 40 27 34 30 3 6 39 27 34 + 30 3 6 36 31 2 2 29 30 3 7 37 32 13 1 16 30 3 7 36 31 15 2 2 2 2 1 8 + 30 3 7 35 33 3 3 8 3 1 2 1 3 8 28 4 6 36 34 2 4 3 1 2 4 15 29 3 6 7 1 + 32 26 7 1 27 29 3 6 40 26 35 30 2 6 40 26 35 30 2 6 19 1 20 26 35 30 + 2 6 40 26 35 30 2 7 40 25 34 32 1 7 40 25 34 32 1 7 46 3 1 15 34 32 1 + 7 46 4 6 9 35 31 2 6 46 5 10 3 36 31 1 7 6 12 28 5 4 1 12 1 31 31 1 8 + 5 20 20 4 5 1 11 4 29 31 1 8 5 21 20 3 17 6 27 31 1 8 5 22 20 1 18 7 + 26 31 2 7 5 23 19 1 18 8 3 1 21 32 1 7 5 23 18 2 18 9 2 6 16 32 1 7 5 + 23 18 2 18 8 2 11 12 32 1 8 4 22 16 1 22 24 9 32 1 7 5 22 40 25 7 31 + 2 7 5 22 41 25 7 30 3 7 3 23 41 26 7 29 4 6 2 24 41 27 5 30 3 32 42 + 28 3 31 3 32 42 27 4 31 3 33 5 1 36 26 4 31 4 32 42 26 4 33 2 33 40 + 64 2 33 39 64 2 34 39 100 39 100 39 100 39 100 40 99 39 100 39 100 39 + 100 39 100 39 100 39 100 40 99 40 99 40 99 40 99 40 100 39 100 39 100 + 39 100 39 100 39 100 3 7 3 1 2 2 21 100 3 8 2 11 15 100 3 8 2 16 10 + 100 3 30 6 100 3 31 5 101 1 33 4 101 2 32 4 101 2 33 3 101 2 33 3 136 + 3 137 2 137 2 137 2 137 2 66 0 + + + + 17653.0 + + + 1.09448818898 + + + 6635.0 + + + 0.166691785983 + + + 0.831434316354 + + + 0.487004576084 0.45312496262 0.226479902556 0.123355380948 + -0.0612143141442 0.00202312283927 0.0122088903194 -0.0362114063236 + 0.00604574968931 + + + 139.0 + + + 0.748201438849 1.83464566929 + + + 0.460431654676 0.374100719424 1.12230215827 0.892086330935 + 1.32283464567 2.55118110236 2.86614173228 0.409448818898 + + + 127.0 + + + 21.0 112.0 0.231481481481 11.0 3.0 8.0 + + + 0.0 0.992125984252 + + + 0.375856794879 + + + 0.145161290323 0.902573529412 0.402573529412 0.0119485294118 + 0.00829493087558 0.134821428571 0.758035714286 0.623214285714 + 0.228571428571 0.829464285714 0.579464285714 0.0982142857143 + 0.790783410138 0.434821428571 0.0544642857143 0.0 + + + 0.043137254902 0.518382352941 0.882352941176 0.852941176471 + 0.639705882353 0.106617647059 0.0 0.0 0.0 0.00367647058824 + 0.882352941176 0.992647058824 0.764705882353 0.0992647058824 + 0.0477941176471 0.0 0.0 0.0 0.163194444444 0.361111111111 + 0.704861111111 0.986111111111 1.0 0.232638888889 0.0 + 0.0330882352941 0.0 0.0 0.338235294118 0.992647058824 1.0 + 0.261029411765 0.0 0.169117647059 0.808823529412 0.944852941176 + 0.860294117647 0.216911764706 0.209558823529 0.194852941176 + 0.362962962963 0.361111111111 0.666666666667 0.902777777778 + 0.979166666667 0.256944444444 0.0 0.0 0.870588235294 1.0 + 0.819852941176 0.0 0.0 0.0147058823529 0.0 0.0 0.511111111111 + 0.784722222222 0.746527777778 0.170138888889 0.0902777777778 + 0.107638888889 0.0 0.0 + + + 0.352702279943 0.137779807564 0.109025471122 0.13051568216 + 0.0484732806204 0.22494810108 0.0315093040323 0.153829784434 + 0.21861987922 0.0688463652724 0.0666890953653 0.0840736642659 + 0.0356467032932 0.0566259096166 + + + + + + + + + 67 6 2 5 5 4 1 2 1 1 73 21 3 10 3 6 63 22 4 19 63 21 4 20 63 19 5 20 + 63 20 3 21 63 20 3 21 63 20 3 21 63 21 1 22 63 20 3 22 68 14 3 21 70 + 3 2 2 10 19 71 10 6 21 64 19 3 21 64 20 2 21 63 21 2 21 64 43 63 20 1 + 23 63 22 1 21 63 44 63 43 64 43 64 40 67 22 1 1 4 1 1 8 70 21 1 15 70 + 8 1 11 2 20 66 19 2 20 65 21 1 20 65 20 2 21 64 21 1 21 65 41 67 40 + 66 6 2 1 4 7 1 20 65 17 5 21 58 3 2 13 1 1 1 2 5 21 31 3 23 5 1 7 2 + 12 1 22 31 9 1 6 8 1 2 12 2 12 1 21 31 17 7 2 1 14 1 12 1 22 30 17 6 + 54 30 17 6 19 1 4 2 3 4 21 32 16 6 17 2 5 1 4 3 21 32 4 1 11 7 52 32 + 3 3 7 12 49 42 1 1 3 11 13 1 14 1 21 41 7 10 9 1 2 3 11 2 21 33 1 8 6 + 11 11 18 19 33 2 9 2 14 10 22 1 5 10 32 2 9 3 13 11 27 1 1 8 30 5 2 4 + 4 1 13 4 3 4 27 1 2 6 30 18 6 18 26 3 1 5 31 18 2 22 28 6 31 42 28 6 + 31 41 30 5 31 6 7 27 31 6 30 9 6 3 1 21 31 5 31 9 4 27 30 7 28 10 3 + 30 29 7 30 41 29 6 1 1 27 43 30 6 28 11 2 30 34 2 27 21 1 22 33 3 1 4 + 5 5 16 8 1 8 1 23 32 3 1 22 1 5 1 18 1 23 32 3 1 20 2 25 1 23 37 46 1 + 23 43 9 8 6 3 5 2 3 6 1 1 20 44 15 1 21 7 19 38 41 1 2 6 19 38 28 2 5 + 5 4 5 21 37 35 14 20 40 2 5 6 2 19 15 18 50 3 3 2 3 13 22 12 49 4 2 2 + 4 5 2 4 23 12 43 11 7 4 4 2 21 15 43 11 7 4 27 15 44 3 1 5 9 2 27 16 + 44 9 39 15 45 8 6 7 27 14 43 11 5 7 5 1 21 14 39 16 1 10 3 3 24 11 38 + 3 4 10 1 7 1 2 4 3 27 7 40 15 1 18 26 7 41 21 2 10 28 5 49 6 1 2 11 3 + 33 1 49 7 1 5 3 2 2 4 32 2 49 4 4 18 79 5 4 8 1 2 2 6 81 3 4 8 1 3 2 + 5 71 4 4 5 4 20 69 15 3 6 2 12 70 24 2 12 70 23 1 12 70 37 70 6 4 3 4 + 20 91 2 3 1 3 7 74 10 5 4 3 2 2 7 73 11 5 5 2 1 3 8 73 10 3 20 75 9 4 + 19 72 13 2 21 68 16 4 20 70 16 1 20 72 35 71 35 69 6 1 32 67 7 6 4 4 + 18 70 1 21 15 70 1 23 13 94 13 97 10 102 4 104 2 68 0 + + + + 11984.0 + + + 0.955357142857 + + + 4279.0 + + + 0.27856975929 + + + 0.553537319028 + + + 0.541067168753 0.456678225316 0.193105305275 0.19893974966 + -0.147081043939 -0.0107864259645 -0.0127323144691 0.0135976643801 + 0.0128949839473 + + + 107.0 + + + 2.84112149533 1.92857142857 + + + 3.70093457944 3.81308411215 2.1308411215 1.60747663551 + 1.10714285714 2.67857142857 2.60714285714 1.32142857143 + + + 112.0 + + + 57.0 201.0 0.221794871795 15.0 1.0 7.0 + + + 0.0 0.991071428571 + + + 0.35705941255 + + + 0.0 0.0 0.493131868132 0.490384615385 0.0 0.391534391534 + 0.531746031746 0.449735449735 0.648148148148 0.681216931217 + 0.542328042328 0.0026455026455 0.784391534392 0.640211640212 + 0.0410052910053 0.0 + + + 0.0 0.0 0.0 0.0 0.494505494505 0.324175824176 0.401098901099 + 0.346153846154 0.0 0.0 0.0 0.0 0.510989010989 0.642857142857 + 0.736263736264 0.478021978022 0.0 0.0 0.34693877551 0.469387755102 + 0.84693877551 0.5 0.80612244898 0.841836734694 0.0 0.0 + 0.208791208791 0.538461538462 0.758241758242 0.0 0.010989010989 + 0.0824175824176 0.291208791209 0.346153846154 0.620879120879 + 0.835164835165 1.0 0.467032967033 0.0 0.0 0.913265306122 + 0.994897959184 0.892857142857 0.382653061224 0.336734693878 + 0.392857142857 0.0102040816327 0.0 0.71978021978 0.901098901099 + 0.879120879121 0.241758241758 0.0 0.0 0.0 0.0 0.770408163265 0.75 + 0.836734693878 0.591836734694 0.158163265306 0.0 0.0 0.0 + + + 0.432965718786 0.195860397317 0.0787601420921 0.0289840315017 + 0.10003517077 0.362988897403 0.0969820640962 0.07609895637 + 0.0233766564645 0.0248684935639 0.0651700268851 0.183417341513 + 0.18150713441 0.0548616864872 + + + + + + + + + 4 1 45 1 46 3 44 4 34 2 7 17 19 4 7 26 1 3 1 9 7 40 7 20 3 17 7 20 2 + 18 8 19 2 19 7 40 7 40 7 40 7 40 7 40 7 40 7 40 7 40 7 40 7 40 6 41 3 + 45 4 45 3 43 4 43 4 43 5 5 2 35 5 41 6 41 7 40 7 41 6 41 7 40 7 40 7 + 40 7 39 8 39 8 39 8 39 8 39 8 39 9 38 9 38 9 38 9 38 9 38 9 39 8 39 9 + 1 14 19 1 3 9 1 36 1 9 1 46 1 46 1 38 0 + + + + 2491.0 + + + 0.88679245283 + + + 1777.0 + + + 0.129994372538 + + + 1.06497948016 + + + 0.524895402608 0.497142980823 0.0786288314678 0.091157530884 + 0.00976883379456 -0.000249363484151 -0.000510032479193 + -0.00137405516951 0.000418123857693 + + + 47.0 + + + 0.191489361702 0.207547169811 + + + 0.340425531915 0.0 0.255319148936 0.170212765957 0.528301886792 0.0 + 0.0754716981132 0.22641509434 + + + 53.0 + + + 2.0 17.0 0.229813664596 1.0 3.0 8.0 + + + 0.0 0.981132075472 + + + 0.713368125251 + + + 0.538461538462 0.706293706294 0.503496503497 0.279220779221 + 0.673076923077 1.0 1.0 0.642857142857 0.557692307692 1.0 1.0 + 0.714285714286 0.474358974359 0.814102564103 0.871794871795 + 0.613095238095 + + + 0.333333333333 0.285714285714 0.2 0.485714285714 0.0857142857143 + 0.0 0.0 0.0 0.416666666667 1.0 1.0 1.0 0.928571428571 + 0.833333333333 0.714285714286 0.309523809524 0.333333333333 1.0 1.0 + 1.0 1.0 1.0 1.0 0.285714285714 0.25 1.0 1.0 1.0 1.0 1.0 1.0 + 0.285714285714 0.166666666667 0.833333333333 1.0 1.0 1.0 1.0 1.0 + 0.428571428571 0.111111111111 1.0 1.0 1.0 1.0 1.0 1.0 + 0.428571428571 0.222222222222 1.0 1.0 1.0 1.0 1.0 1.0 + 0.428571428571 0.166666666667 0.428571428571 0.5 0.738095238095 + 0.761904761905 0.722222222222 0.666666666667 0.357142857143 + + + 0.429040871863 0.0359443032615 0.00963119218687 0.0124051980232 + 0.00286414961716 0.0342325965167 0.0719924283572 0.00188228211418 + 0.0200203564551 0.00639563062518 0.191013013551 0.0238255139974 + 0.124480920767 0.0329492375383 + + + + + + + + + 68 1 32 1 35 2 32 3 1 13 1 20 32 38 32 38 32 38 32 38 32 38 33 36 33 + 37 33 37 33 37 33 37 33 37 33 38 32 37 33 37 33 38 32 38 32 38 32 38 + 33 37 33 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 37 33 + 38 31 39 31 39 31 39 31 39 32 37 33 21 1 15 34 35 35 35 3 1 31 35 4 3 + 28 10 1 24 3 11 20 36 3 67 2 38 2 28 2 37 28 3 2 37 30 1 2 36 31 1 2 + 36 34 36 35 35 35 35 34 36 34 36 35 35 35 35 35 35 35 35 35 36 33 37 + 34 36 34 36 34 36 33 37 35 1 3 2 1 19 2 2 39 6 2 21 41 3 6 27 34 2 7 + 27 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 + 35 35 35 36 34 36 34 36 34 36 34 36 34 2 8 26 34 2 28 6 34 2 32 2 35 + 1 33 1 35 1 69 1 69 1 69 1 68 2 66 0 + + + + 6650.0 + + + 0.736842105263 + + + 3159.0 + + + 0.133586578031 + + + 0.651049658994 + + + 0.499529753958 0.463225636985 0.113525656226 0.189264121519 + -0.101334988061 -0.000441706249335 -0.00161432679182 + 0.000743214847722 0.00365839465387 + + + 70.0 + + + 0.514285714286 0.231578947368 + + + 0.914285714286 0.571428571429 0.285714285714 0.228571428571 + 0.126315789474 0.252631578947 0.336842105263 0.168421052632 + + + 95.0 + + + 10.0 40.0 0.169064748201 3.0 4.0 2.0 + + + 0.0 0.989473684211 + + + 0.475037593985 + + + 0.0 0.15931372549 0.911764705882 0.617647058824 0.195652173913 + 0.270833333333 0.976851851852 0.673611111111 0.910485933504 + 0.955882352941 0.0808823529412 0.107843137255 0.847826086957 + 0.886574074074 0.00462962962963 0.0 + + + 0.0 0.0 0.0 0.354166666667 0.9375 0.75 0.84375 0.322916666667 0.0 + 0.0 0.0 0.287037037037 1.0 0.944444444444 1.0 0.296296296296 0.0 + 0.0 0.0 0.25 1.0 1.0 1.0 0.333333333333 0.353535353535 + 0.425925925926 0.351851851852 0.481481481481 1.0 0.907407407407 1.0 + 0.361111111111 0.818181818182 1.0 1.0 0.916666666667 0.135416666667 + 0.208333333333 0.270833333333 0.1875 0.808080808081 1.0 1.0 + 0.907407407407 0.0 0.0 0.0 0.0 0.818181818182 1.0 1.0 + 0.907407407407 0.0 0.0 0.0 0.0 0.727272727273 0.833333333333 + 0.842592592593 0.796296296296 0.0185185185185 0.0 0.0 0.0 + + + 0.457486588196 0.177724849322 0.0148047747447 0.00470051473164 + 0.0455628571105 0.397573422131 0.0652260876689 0.0259053885731 + 0.00229672471688 0.00418382786132 0.143998203891 0.315137478103 + 0.135684270036 0.0354558948852 + + + + + + + + + 7 3 35 3 35 4 34 5 33 5 33 6 32 6 32 7 30 8 31 8 30 9 29 9 29 10 28 + 13 25 10 2 2 24 15 23 16 22 17 21 18 19 20 19 20 18 21 17 22 16 23 15 + 24 14 24 14 25 13 26 12 25 13 25 13 26 12 26 12 26 12 26 12 26 12 26 + 12 26 12 26 12 19 1 6 13 4 1 12 1 7 13 3 3 10 3 7 12 3 3 6 2 1 4 7 18 + 6 7 7 18 3 1 2 7 7 22 5 4 7 11 1 6 1 3 2 2 1 4 7 11 4 3 1 4 1 2 1 4 7 + 11 4 3 1 3 5 4 7 11 6 1 3 1 5 4 7 11 16 4 7 11 27 11 27 11 6 1 20 11 + 6 3 18 11 4 6 17 11 3 7 17 11 3 9 15 10 4 10 14 11 3 10 14 11 4 10 13 + 11 5 10 12 10 4 1 2 10 11 11 3 1 2 12 9 11 3 16 8 11 3 17 7 11 3 19 2 + 1 2 11 3 19 4 12 3 19 5 10 5 18 5 10 5 19 4 10 5 20 2 11 5 20 3 10 5 + 20 2 10 6 20 3 7 8 30 9 27 14 23 16 23 17 21 18 20 17 22 20 18 21 17 + 23 14 25 13 26 12 27 11 28 10 29 9 30 8 31 8 30 8 32 6 32 6 4 2 22 4 + 1 4 4 3 21 10 5 1 21 11 24 15 23 15 5 2 4 3 10 15 4 2 1 1 2 1 16 13 1 + 6 1 1 19 20 4 1 14 25 14 25 14 24 14 24 15 23 15 23 15 23 15 8 4 9 17 + 3 12 5 18 3 13 1 2 2 17 4 1 1 5 3 24 6 4 4 12 1 11 6 32 7 31 8 30 8 + 30 8 30 9 5 1 23 9 28 10 5 3 21 9 6 5 18 9 5 1 1 5 17 9 4 1 1 7 16 9 + 4 1 1 8 4 2 9 10 4 10 4 2 8 9 5 11 3 2 8 8 7 11 13 8 6 12 11 9 5 15 9 + 9 6 14 10 8 6 16 8 8 6 16 8 8 6 15 3 1 5 8 5 21 3 10 4 34 4 34 4 34 4 + 34 4 34 4 34 4 34 4 35 3 35 3 35 3 35 3 35 3 35 3 35 3 35 3 35 3 36 2 + 36 2 36 2 36 3 35 3 35 3 36 2 36 2 36 2 36 2 36 2 24 0 + + + + 6270.0 + + + 0.230303030303 + + + 2657.0 + + + 0.286413248024 + + + 1.02947020071 + + + 0.504033201436 0.461069241855 0.0312920771158 0.579116737035 + 0.0148474111785 0.000604150159737 -0.00504913415784 + 0.00451469616639 -0.0159187097844 + + + 38.0 + + + 3.15789473684 0.581818181818 + + + 2.10526315789 4.63157894737 3.05263157895 2.21052631579 + 0.145454545455 1.13939393939 0.533333333333 0.509090909091 + + + 165.0 + + + 15.0 65.0 0.304668304668 7.0 10.0 1.0 + + + 0.0 0.993939393939 + + + 0.423763955343 + + + 0.222222222222 0.344173441734 0.471544715447 0.037037037037 + 0.80487804878 0.424390243902 0.729268292683 0.352380952381 + 0.571815718157 0.376693766938 0.883468834688 0.10582010582 0.2 + 0.429268292683 0.531707317073 0.278571428571 + + + 0.0 0.0 0.0 0.238095238095 0.559523809524 0.0625 0.0 0.0 0.42 + 0.380952380952 0.33 0.704761904762 0.819047619048 0.36 + 0.133333333333 0.0 0.83 0.961904761905 0.44 0.552380952381 + 0.885714285714 0.53 0.866666666667 0.533333333333 0.41 1.0 0.51 0.2 + 0.971428571429 0.51 0.00952380952381 0.0 0.275 1.0 0.7625 + 0.0357142857143 0.988095238095 0.725 0.119047619048 0.0 0.06 + 0.942857142857 0.64 0.104761904762 0.819047619048 0.99 + 0.285714285714 0.0 0.0 0.771428571429 1.0 0.438095238095 + 0.371428571429 1.0 0.542857142857 0.0 0.0 0.00952380952381 0.2 + 0.0952380952381 0.0380952380952 0.75 0.571428571429 0.0 + + + 0.56841468599 0.173697748909 0.00892518324601 0.00812065581543 + 0.338822331786 0.440422293351 0.0906172264661 0.0828096073365 + 0.0565113505542 0.0179704249454 0.10863077541 0.491759213023 + 0.264052935694 0.0495471899213 + + + + + + + + + 13 2 20 2 20 1 20 2 20 3 18 3 18 3 16 5 17 5 16 7 15 6 15 4 18 5 16 7 + 14 7 15 1 3 3 18 4 17 4 19 3 18 4 16 6 14 7 15 7 15 7 15 7 16 5 16 6 + 17 5 17 5 17 4 17 5 18 4 19 3 20 1 20 3 17 6 15 6 16 3 65 1 20 2 20 6 + 19 3 17 5 17 6 17 5 16 6 18 4 2 2 16 2 1 3 10 0 + + + + 1100.0 + + + 0.44 + + + 216.0 + + + 0.875 + + + 0.773300773301 + + + 0.275132275132 0.507369614512 0.046282007316 0.862693615684 + -0.11020376086 0.00596167970823 0.0860318821152 -0.0200215678515 + 0.162895265928 + + + 22.0 + + + 1.31818181818 0.06 + + + 2.54545454545 1.81818181818 0.545454545455 0.0 0.0 0.08 0.0 0.08 + + + 50.0 + + + 0.0 1.0 0.452830188679 2.0 4.0 1.0 + + + 0.0 0.98 + + + 0.196363636364 + + + 0.0 0.338461538462 0.616666666667 0.353846153846 0.319444444444 + 0.641025641026 0.222222222222 0.294871794872 0.333333333333 0.0 0.0 + 0.0307692307692 0.0 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.285714285714 0.166666666667 0.25 0.333333333333 0.0 + 0.0 0.0 0.222222222222 0.666666666667 1.0 0.777777777778 + 0.333333333333 0.619047619048 0.0 0.5 0.833333333333 0.952380952381 + 0.555555555556 0.333333333333 0.111111111111 0.857142857143 0.0 + 0.777777777778 0.666666666667 0.142857142857 0.0 0.0 0.0 + 0.142857142857 0.333333333333 0.583333333333 0.0 0.0 0.0 0.0 0.0 + 0.142857142857 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.418832787514 0.249371417177 0.111386405496 0.0735404652998 + 0.349509201134 0.343903211302 0.188410298432 0.192770467476 + 0.0128937696692 0.122742318686 0.438507919681 0.22824336802 + 0.321273424392 0.11345476342 + + + + + + + + + 2 1 129 4 127 3 128 3 128 4 126 6 125 6 125 6 127 1 300 1 91 1 37 2 + 91 1 36 3 91 40 91 40 91 40 91 40 91 40 91 40 91 40 91 40 91 40 92 39 + 91 40 21 1 69 40 20 3 69 40 18 5 68 39 18 6 68 40 17 7 67 40 18 6 67 + 40 18 5 68 40 18 5 2 1 65 40 18 9 64 40 19 8 64 40 20 1 2 4 65 4 2 1 + 2 30 19 10 63 39 18 10 64 39 17 9 66 39 17 9 66 39 17 9 66 39 19 7 66 + 39 19 7 66 36 22 7 66 35 22 9 65 37 1 1 18 9 66 39 18 9 65 39 18 10 + 63 40 17 12 63 39 17 1 2 15 57 39 21 15 56 39 22 15 3 3 49 39 14 1 7 + 22 48 39 12 3 10 20 47 27 5 7 11 4 11 17 49 2 22 1 13 1 11 4 12 19 47 + 1 36 1 11 4 5 1 5 21 83 1 11 13 2 21 95 13 2 21 95 14 3 18 96 14 3 18 + 97 13 4 16 96 15 3 17 96 14 4 17 96 14 4 17 84 4 7 5 4 6 3 18 84 3 8 + 38 9 4 69 3 9 7 3 26 10 6 67 4 8 7 2 26 11 6 67 3 8 16 1 8 1 10 10 8 + 66 3 8 16 1 19 10 8 66 4 7 5 7 4 1 19 10 9 65 4 7 6 6 1 1 2 1 12 3 4 + 11 9 65 1 9 9 9 10 5 1 12 11 64 2 8 10 2 3 3 10 3 2 12 13 63 2 8 4 1 + 11 1 16 12 13 63 3 13 9 2 7 1 3 2 3 12 16 60 3 14 3 1 3 4 4 3 3 2 2 + 12 6 1 11 59 3 19 2 4 5 2 4 1 2 12 18 58 4 19 2 5 1 1 1 2 5 1 2 12 21 + 55 4 32 6 12 23 54 4 32 6 12 25 52 4 32 6 12 26 51 4 32 6 12 27 50 4 + 31 7 11 29 50 3 31 6 12 29 51 2 31 6 12 30 50 2 32 5 11 6 2 24 49 2 + 32 5 11 33 49 1 32 5 11 33 82 5 11 34 82 3 11 7 1 29 81 2 12 5 2 19 1 + 10 79 3 12 4 2 7 3 10 2 1 4 3 80 4 11 13 3 7 1 2 7 3 81 2 12 13 3 7 1 + 2 6 5 94 13 2 11 5 5 94 15 1 11 106 26 111 5 1 5 2 4 116 2 3 10 121 + 10 5 2 114 2 2 5 6 4 112 1 6 1 5 1 1 2 1 1 125 4 129 3 117 4 7 1 1 1 + 117 4 2 7 106 5 7 3 2 9 104 9 6 12 104 2 1 5 5 13 109 2 6 14 108 23 + 106 25 105 25 107 23 109 22 114 17 114 17 115 15 116 5 2 8 118 2 5 6 + 125 5 118 2 1 1 1 8 119 12 120 11 120 12 121 9 123 8 123 8 124 7 126 + 5 125 6 10 0 + + + + 17161.0 + + + 1.0 + + + 3896.0 + + + 0.282084188912 + + + 1.84394153701 + + + 0.4765795293 0.450211262044 0.379370448193 0.225757072313 + 0.252849483039 0.0181256569492 0.0366586718485 0.0313306111736 + 0.0392618007298 + + + 131.0 + + + 1.20610687023 1.45038167939 + + + 0.335877862595 1.09923664122 1.16030534351 2.10687022901 + 0.36641221374 1.5572519084 3.11450381679 0.641221374046 + + + 131.0 + + + 16.0 104.0 0.220149253731 23.0 2.0 5.0 + + + 0.0 0.992366412214 + + + 0.227026397063 + + + 0.583984375 0.551136363636 0.0 0.0 0.223484848485 0.37741046832 + 0.147842056933 0.0 0.0132575757576 0.406795224977 0.348025711662 + 0.0 0.0 0.00367309458219 0.594123048669 0.386593204775 + + + 0.3046875 0.84375 0.727941176471 0.18359375 0.0 0.0 0.0 0.0 0.1875 + 1.0 1.0 0.25390625 0.0 0.0 0.0 0.0 0.132352941176 0.610294117647 + 0.636678200692 0.194852941176 0.1875 0.0622837370242 0.0 0.0 0.0 + 0.1328125 0.202205882353 0.46484375 0.359375 0.0 0.0 0.0 0.0 + 0.0546875 0.389705882353 0.8046875 0.69140625 0.128676470588 0.0 + 0.0 0.0 0.0 0.0 0.481617647059 0.305147058824 0.290657439446 0.0 + 0.0 0.0 0.0 0.0 0.015625 0.7578125 0.908088235294 0.421875 + 0.235294117647 0.0 0.0 0.0 0.0 0.0955882352941 0.622837370242 + 0.466911764706 0.42214532872 + + + 0.434267070584 0.227372065788 0.103209672155 0.0411652536036 + 0.144524189269 0.433617483175 0.140189908905 0.0837870758104 + 0.0341300184181 0.0526536032662 0.0821971108369 0.295531054615 + 0.318401790827 0.0855510452277 + + + + + + + + + 39 4 43 5 42 6 44 3 44 4 44 4 7 1 28 12 7 41 7 20 1 20 6 42 7 20 1 21 + 6 20 2 20 6 42 6 42 6 42 6 42 6 42 6 42 6 42 6 42 6 42 6 42 6 42 6 42 + 6 42 6 42 6 42 6 40 8 2 7 26 13 2 6 27 13 5 1 33 9 43 13 35 6 3 2 37 + 6 42 6 41 7 41 8 41 7 41 7 41 7 40 7 42 6 42 6 42 7 41 7 41 7 41 8 40 + 8 40 8 41 7 41 7 2 16 1 17 5 8 1 35 4 45 3 46 2 46 2 47 1 47 1 45 4 + 44 4 44 5 44 5 43 4 44 4 45 3 45 2 46 2 46 2 47 1 47 1 2 0 + + + + 3360.0 + + + 0.685714285714 + + + 1883.0 + + + 0.160913436006 + + + 1.0550401979 + + + 0.489463395894 0.418065529105 0.081693277945 0.104626391293 + 0.0105447435763 -0.00069221597886 0.00782757123224 0.00195421794555 + 0.0047287186602 + + + 48.0 + + + 0.666666666667 0.157142857143 + + + 1.25 0.25 0.0 1.16666666667 0.228571428571 0.228571428571 + 0.114285714286 0.0571428571429 + + + 70.0 + + + 4.0 21.0 0.227777777778 1.0 8.0 2.0 + + + 0.0 0.985714285714 + + + 0.560416666667 + + + 0.549019607843 0.796296296296 0.720588235294 0.00462962962963 + 0.56862745098 1.0 0.946078431373 0.0 0.617647058824 1.0 + 0.941176470588 0.0 0.485294117647 0.513888888889 0.647058823529 + 0.231481481481 + + + 0.125 0.851851851852 0.833333333333 0.574074074074 0.583333333333 + 0.425925925926 0.0185185185185 0.0 0.125 1.0 1.0 0.777777777778 1.0 + 0.888888888889 0.0 0.0 0.125 1.0 1.0 1.0 1.0 0.888888888889 0.0 0.0 + 0.125 0.925925925926 1.0 1.0 1.0 0.907407407407 0.0 0.0 0.125 1.0 + 1.0 1.0 1.0 0.888888888889 0.0 0.0 0.25 1.0 1.0 1.0 1.0 + 0.888888888889 0.0 0.0 0.729166666667 1.0 1.0 0.722222222222 1.0 + 0.925925925926 0.0185185185185 0.0 0.0625 0.12962962963 + 0.166666666667 0.166666666667 0.270833333333 0.388888888889 + 0.462962962963 0.444444444444 + + + 0.641559666614 0.0262005201767 0.0308602448985 0.025465285475 + 0.448769689645 0.043983628793 0.0374765075116 0.0309411598133 + 0.0330590371968 0.0168081368691 0.023902342702 0.0492460566769 + 0.114206501263 0.0240271271462 + + + + + + + + + 40 4 41 4 34 3 3 6 35 2 1 7 36 9 36 9 34 11 27 2 4 12 29 1 5 10 36 2 + 1 6 40 4 41 4 41 1 1 1 40 3 40 5 38 7 38 8 37 8 35 4 2 3 36 4 2 3 37 + 3 2 4 36 3 1 4 37 8 37 8 37 6 39 6 39 6 39 5 40 5 40 5 40 5 40 5 40 5 + 40 4 41 4 41 4 41 4 40 4 41 4 28 2 12 2 30 2 11 3 27 4 12 1 27 5 11 2 + 27 5 11 1 27 6 11 1 27 6 39 6 10 1 27 4 1 2 10 1 27 3 11 4 27 3 11 5 + 40 4 34 1 5 3 34 3 5 3 32 6 5 1 33 6 39 6 40 5 44 1 34 5 1 2 1 2 33 9 + 35 10 34 11 35 6 38 11 3 2 29 19 25 20 28 3 7 6 40 5 26 1 3 1 9 4 26 + 6 6 5 28 4 8 4 28 3 10 4 28 2 11 3 29 5 40 5 39 6 2 3 34 11 34 8 37 + 11 3 1 31 14 31 11 34 8 2 1 34 3 4 1 37 2 43 2 43 1 453 5 39 7 38 7 + 39 5 41 2 1 1 29 0 + + + + 4500.0 + + + 0.45 + + + 621.0 + + + 0.774557165862 + + + 0.586015714105 + + + 0.569096764749 0.466793539257 0.209334571684 1.18777293397 + -0.447642532847 0.00244130058261 0.0690106588947 -0.0240469823283 + -0.104461743888 + + + 45.0 + + + 1.62222222222 0.39 + + + 0.533333333333 3.55555555556 0.888888888889 1.51111111111 0.4 0.44 + 0.52 0.2 + + + 100.0 + + + 6.0 9.0 0.309210526316 17.0 0.0 2.0 + + + 0.0 0.99 + + + 0.138 + + + 0.0 0.0 0.0909090909091 0.152727272727 0.0 0.174545454545 + 0.396363636364 0.247272727273 0.0181818181818 0.0436363636364 + 0.229090909091 0.0 0.58 0.25 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0138888888889 + 0.307692307692 0.555555555556 0.025641025641 0.0 0.0 0.0 + 0.0461538461538 0.283333333333 0.461538461538 0.516666666667 + 0.353846153846 0.0 0.0 0.0 0.576923076923 0.5 0.333333333333 + 0.166666666667 0.025641025641 0.0138888888889 0.0 0.0 0.0 + 0.180555555556 0.474358974359 0.0 0.0 0.0333333333333 + 0.0307692307692 0.0 0.184615384615 0.183333333333 0.0307692307692 + 0.0 0.0 0.402777777778 0.692307692308 0.805555555556 0.217948717949 + 0.0 0.0 0.0 0.0 0.888888888889 0.346153846154 0.0 0.0 0.0 0.0 0.0 + 0.0 + + + 0.40552409798 0.260765997666 0.0524747931912 0.0246400480607 + 0.203045687935 0.426070248977 0.204692064229 0.222208215978 + 0.0782153986305 0.0321185828197 0.134732810422 0.352234560264 + 0.364262787976 0.164136408715 + + + + + + + + + 40 5 21 1 33 31 3 2 33 37 32 37 32 37 32 37 32 37 32 36 33 36 33 36 + 33 36 33 36 33 36 33 36 33 36 33 36 33 36 33 36 34 35 34 35 34 36 33 + 36 33 29 40 32 37 36 33 35 34 36 33 36 33 36 33 36 33 36 34 35 34 35 + 34 35 3 1 30 5 1 29 3 3 28 35 3 12 1 4 4 5 3 37 3 66 3 21 1 44 3 66 3 + 66 3 66 3 66 3 16 2 27 1 20 3 17 1 16 20 12 3 34 30 2 3 34 35 34 35 + 34 35 34 35 34 34 37 28 2 1 38 28 2 1 38 28 3 1 37 28 3 1 37 28 2 3 + 35 34 35 35 17 2 15 35 34 35 4 1 29 35 34 35 34 35 34 34 35 35 34 35 + 35 34 35 34 35 34 35 34 35 34 35 34 35 35 34 35 34 35 34 35 34 35 34 + 35 35 34 4 2 29 34 3 25 7 34 3 28 4 35 2 29 3 35 2 29 3 35 2 29 3 35 + 2 30 2 35 2 30 2 35 2 30 2 35 2 30 2 35 2 31 1 36 1 31 1 36 1 68 1 62 + 0 + + + + 6417.0 + + + 0.741935483871 + + + 3096.0 + + + 0.136950904393 + + + 0.695538057743 + + + 0.504640712874 0.439648634985 0.108329816417 0.163154124357 + -0.084264702841 0.000303489111829 0.000212533258507 + 0.000222333880349 0.00256636174815 + + + 69.0 + + + 0.36231884058 0.354838709677 + + + 0.115942028986 0.405797101449 0.289855072464 0.63768115942 + 0.0860215053763 0.516129032258 0.301075268817 0.516129032258 + + + 93.0 + + + 2.0 27.0 0.2 3.0 7.0 2.0 + + + 0.0 0.989247311828 + + + 0.482468443198 + + + 0.0 0.391304347826 0.872122762148 0.416666666667 0.156010230179 + 0.460358056266 0.994884910486 0.463235294118 0.969309462916 + 0.918158567775 0.184143222506 0.18137254902 0.847826086957 + 0.884057971014 0.0289855072464 0.0 + + + 0.0 0.0 0.0 0.666666666667 0.822916666667 0.625 0.53125 + 0.229166666667 0.0 0.0 0.0 0.824074074074 1.0 1.0 0.898148148148 + 0.0 0.0 0.0 0.0 0.75 1.0 0.977272727273 0.916666666667 0.0 + 0.30303030303 0.287037037037 0.191919191919 0.824074074074 1.0 1.0 + 0.935185185185 0.0 0.939393939394 1.0 1.0 0.861111111111 + 0.333333333333 0.363636363636 0.472222222222 0.212962962963 + 0.931818181818 1.0 1.0 0.822916666667 0.0 0.0 0.0 0.0 + 0.909090909091 1.0 1.0 0.87037037037 0.0 0.0 0.0 0.0 0.737373737374 + 0.740740740741 0.838383838384 0.833333333333 0.111111111111 0.0 0.0 + 0.0 + + + 0.500045066107 0.148472594121 0.00890177738102 0.00201775470775 + 0.118675419767 0.35230443974 0.0489365740624 0.0153928616302 + 0.0125208260901 0.00136148597081 0.13929383693 0.316516900028 + 0.107470266787 0.0281466081056 + + + + + + + + + 112 1 112 2 80 1 31 2 78 13 2 3 7 1 7 3 78 36 78 36 6 1 71 36 5 5 68 + 36 5 6 67 36 5 7 66 18 1 16 5 10 64 17 4 13 6 10 64 17 5 11 7 11 63 + 17 1 2 1 12 7 12 62 34 6 13 61 34 6 13 61 35 6 11 63 34 6 10 63 35 6 + 9 64 35 5 11 1 1 61 35 5 13 61 35 4 17 58 35 4 18 57 35 4 18 57 35 5 + 17 1 2 1 3 51 34 5 17 1 8 49 34 5 27 47 35 5 27 48 34 5 29 46 34 5 31 + 6 1 37 34 5 33 4 2 36 35 4 32 1 1 1 6 33 36 3 43 31 37 2 51 25 36 1 + 51 26 36 1 49 28 36 2 48 28 36 2 50 25 36 3 54 23 34 3 6 2 46 23 34 2 + 1 1 23 3 29 21 34 5 23 2 30 20 34 5 24 2 31 19 33 4 25 3 29 20 33 3 + 59 1 1 17 33 4 32 2 29 14 33 4 64 15 2 2 27 4 64 37 8 5 68 34 7 6 68 + 33 8 5 22 1 43 35 8 5 21 2 44 1 3 31 7 5 21 3 43 1 4 30 7 5 21 6 10 2 + 28 35 7 5 6 1 11 12 8 1 27 36 6 7 4 4 9 14 32 1 1 36 4 9 5 6 6 15 28 + 41 4 9 4 8 5 16 9 1 16 42 5 8 4 10 3 16 10 2 9 12 9 26 5 8 4 30 17 2 + 4 2 1 3 15 25 3 8 5 30 28 2 15 24 2 8 5 31 27 3 13 35 5 32 27 3 12 34 + 6 34 26 3 11 34 6 31 1 4 14 2 22 35 5 31 2 5 12 4 25 5 2 23 5 39 12 3 + 26 5 3 21 5 40 11 3 26 5 4 20 5 42 10 2 27 2 7 19 6 34 5 3 38 2 7 1 1 + 17 6 36 5 3 17 2 17 2 7 1 2 16 6 36 7 2 35 2 12 1 3 10 6 36 8 4 32 2 + 16 10 6 37 9 3 31 2 17 9 6 39 7 5 29 1 17 10 6 39 9 4 27 2 18 9 7 38 + 12 1 27 2 20 8 5 34 44 3 20 6 7 35 66 5 9 34 66 7 7 35 33 8 25 6 6 41 + 29 10 22 6 7 41 34 4 22 6 7 43 33 3 22 7 6 45 32 2 21 7 6 47 6 1 47 7 + 6 48 5 2 46 7 6 51 16 2 33 6 6 52 14 6 30 7 5 53 15 5 29 7 5 54 10 7 + 32 6 6 54 9 7 32 7 5 58 5 7 31 8 4 59 7 3 10 1 22 9 3 61 17 3 22 8 3 + 66 12 4 21 8 3 73 5 5 6 1 13 7 5 76 2 4 3 2 14 8 5 77 3 1 5 1 14 8 5 + 81 5 1 14 8 6 80 4 4 12 8 5 81 7 2 11 8 5 82 7 1 11 8 5 83 1 1 4 2 10 + 8 5 91 10 8 6 90 10 8 6 89 11 8 6 88 12 8 6 87 13 8 6 87 13 8 6 87 14 + 7 7 87 13 7 7 89 11 8 6 90 10 8 5 93 8 8 5 94 7 8 5 96 6 8 4 96 6 8 4 + 97 4 9 4 98 3 9 4 98 3 9 5 99 1 9 5 109 5 109 5 109 5 109 5 109 4 111 + 4 110 4 110 4 110 4 110 4 110 4 110 4 331 1 113 1 112 3 110 0 + + + + 15960.0 + + + 0.814285714286 + + + 5966.0 + + + 0.208347301374 + + + 0.921506734007 + + + 0.559913254756 0.391318189163 0.210772555296 0.140306341096 + 0.00720526485459 -0.0346111954328 0.00947430428781 + -0.000181007014175 0.016537437853 + + + 114.0 + + + 1.76315789474 1.67142857143 + + + 1.22807017544 1.15789473684 2.38596491228 2.21052631579 + 1.31428571429 2.54285714286 2.34285714286 0.485714285714 + + + 140.0 + + + 12.0 91.0 0.269284712482 16.0 4.0 5.0 + + + 0.0 0.992857142857 + + + 0.37380952381 + + + 0.482653061224 0.602040816327 0.2 0.157142857143 0.102463054187 + 0.747783251232 0.118226600985 0.0 0.25612244898 0.522448979592 + 0.588775510204 0.0 0.832512315271 0.445320197044 0.776354679803 + 0.142857142857 + + + 0.390756302521 0.809523809524 0.861344537815 0.428571428571 + 0.457983193277 0.345238095238 0.386554621849 0.246031746032 + 0.0252100840336 0.674603174603 0.957983193277 0.194444444444 0.0 + 0.0 0.0 0.0 0.0 0.31746031746 0.978991596639 0.269841269841 0.0 0.0 + 0.0 0.0 0.0 0.0888888888889 0.898039215686 0.848148148148 + 0.470588235294 0.0 0.0 0.0 0.0 0.0 0.36974789916 0.75 + 0.932773109244 0.174603174603 0.0 0.0 0.470588235294 0.551587301587 + 0.344537815126 0.607142857143 0.945378151261 0.34126984127 0.0 0.0 + 0.747899159664 1.0 0.705882352941 0.174603174603 0.865546218487 + 0.670634920635 0.0 0.0 0.690196078431 0.885185185185 0.76862745098 + 0.162962962963 0.721568627451 0.848148148148 0.56862745098 0.0 + + + 0.599593418751 0.0363984045468 0.0441933557101 0.0320790736131 + 0.344668786507 0.133928557894 0.0487679784946 0.0870006926941 + 0.170785075727 0.0256924890839 0.00512979502939 0.184524947861 + 0.150473041793 0.0106067738958 + + + + + + + + + 67 2 69 2 69 2 68 3 35 1 32 3 35 18 15 3 35 36 35 36 35 36 35 36 35 + 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 37 34 36 + 35 36 35 36 35 37 34 37 35 36 35 36 35 35 35 37 33 38 33 38 34 37 34 + 37 33 39 32 39 32 39 33 37 35 36 36 35 36 35 36 35 36 35 2 5 29 35 2 + 8 26 35 2 14 19 36 2 70 1 70 1 70 1 38 10 3 5 11 1 2 1 37 31 2 1 37 + 31 2 1 37 31 2 1 37 34 37 34 37 34 37 34 37 34 37 34 37 33 38 33 38 + 34 38 33 38 33 38 33 38 33 38 33 3 4 26 40 1 6 22 4 1 35 3 6 29 34 3 + 2 32 33 38 34 37 34 37 34 37 34 37 34 37 34 38 33 38 33 38 33 38 33 + 38 33 38 33 38 33 38 33 38 33 38 34 2 3 33 33 2 7 29 33 2 15 2 3 3 1 + 12 32 3 29 7 32 4 29 7 31 4 30 6 32 2 32 4 33 2 32 5 32 2 31 6 32 2 + 30 6 66 2 1 3 29 0 + + + + 6958.0 + + + 0.724489795918 + + + 3293.0 + + + 0.13665350744 + + + 0.710672424429 + + + 0.504620190013 0.492337698523 0.110610777117 0.181244884742 + -0.0921611824313 -0.000784342477095 0.00298721170439 + -0.00125057979405 0.00153470112079 + + + 71.0 + + + 0.478873239437 0.295918367347 + + + 0.619718309859 0.338028169014 0.676056338028 0.112676056338 + 0.0816326530612 0.122448979592 0.448979591837 0.489795918367 + + + 98.0 + + + 5.0 18.0 0.148148148148 2.0 2.0 1.0 + + + 0.0 0.989795918367 + + + 0.473268180512 + + + 0.0 0.176470588235 0.892156862745 0.585882352941 0.0902777777778 + 0.191111111111 0.990740740741 0.666666666667 0.787037037037 1.0 + 0.185185185185 0.286666666667 0.703703703704 0.955555555556 + 0.0439814814815 0.0 + + + 0.0 0.0 0.0 0.384615384615 0.885416666667 0.697916666667 0.75 + 0.355769230769 0.0 0.0 0.0 0.299145299145 1.0 0.962962962963 1.0 + 0.273504273504 0.0 0.0 0.0 0.230769230769 1.0 1.0 1.0 + 0.333333333333 0.138888888889 0.222222222222 0.231481481481 + 0.290598290598 1.0 0.962962962963 1.0 0.384615384615 0.583333333333 + 1.0 1.0 1.0 0.342592592593 0.37037037037 0.518518518519 + 0.623931623932 0.564814814815 1.0 1.0 1.0 0.0277777777778 0.0 0.0 + 0.0 0.5 1.0 1.0 1.0 0.0462962962963 0.0 0.0 0.0 0.527777777778 + 0.787037037037 0.898148148148 0.923076923077 0.12962962963 0.0 0.0 + 0.0 + + + 0.421344904054 0.180441557572 0.00794609122851 0.0132218086555 + 0.0103263264037 0.365611435414 0.0624847440327 0.0165659976648 + 0.0247180871037 0.0128814046121 0.132363198976 0.275737101005 + 0.101334400036 0.0405815585925 + + + + + + + + + 37 2 47 1 189 1 47 3 46 3 46 3 46 4 45 5 44 5 26 1 18 5 24 5 15 6 23 + 5 15 5 22 8 16 3 2 2 17 9 15 3 3 3 17 10 12 4 3 3 17 11 10 6 2 3 17 + 13 6 13 5 2 10 14 1 2 2 14 3 3 8 19 1 14 2 6 6 14 3 3 2 13 2 1 1 1 2 + 1 6 13 9 13 15 12 9 8 3 1 4 1 11 1 1 10 9 9 1 7 11 1 1 10 9 13 2 1 11 + 13 9 15 13 12 9 8 1 6 13 12 10 7 1 6 13 13 9 13 14 12 10 7 1 4 15 13 + 9 6 2 3 16 13 9 7 2 2 16 12 10 7 2 1 17 13 9 8 19 13 9 8 20 11 10 8 1 + 1 18 11 9 11 17 12 10 9 19 11 10 9 18 11 11 12 15 11 11 12 15 12 10 + 12 15 12 10 13 14 12 10 14 13 12 10 8 2 2 15 11 11 8 1 2 14 14 10 10 + 12 18 9 10 11 19 7 12 10 20 5 12 1 1 10 19 6 12 14 3 3 10 6 12 21 10 + 6 12 22 6 10 2 2 8 20 5 12 1 4 1 1 1 5 2 17 4 27 1 18 3 37 0 + + + + 2891.0 + + + 0.830508474576 + + + 1061.0 + + + 0.409990574929 + + + 0.915650406504 + + + 0.477163839145 0.590301927264 0.126157541839 0.158501215693 + -0.0257033259558 0.00243165029971 0.00144465531299 + 0.000836431184505 -0.00373628740768 + + + 49.0 + + + 1.0 1.33898305085 + + + 0.571428571429 0.489795918367 0.816326530612 2.12244897959 + 0.135593220339 2.16949152542 1.35593220339 1.49152542373 + + + 59.0 + + + 8.0 40.0 0.210256410256 9.0 1.0 3.0 + + + 0.0 0.983050847458 + + + 0.367001037703 + + + 0.00595238095238 0.338888888889 0.4 0.538888888889 0.0297619047619 + 0.627777777778 0.6 0.45 0.202380952381 0.6 0.583333333333 + 0.605555555556 0.021978021978 0.410256410256 0.246153846154 + 0.179487179487 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.238095238095 0.3125 0.0 0.0238095238095 + 0.520833333333 0.857142857143 0.833333333333 0.770833333333 + 0.904761904762 0.708333333333 0.0 0.119047619048 0.916666666667 1.0 + 1.0 1.0 1.0 0.583333333333 0.0 0.0 0.375 0.214285714286 + 0.261904761905 0.145833333333 0.190476190476 0.0625 0.0 0.0 + 0.229166666667 0.380952380952 0.166666666667 0.1875 0.214285714286 + 0.541666666667 0.0952380952381 0.714285714286 0.8125 1.0 + 0.97619047619 1.0 1.0 0.666666666667 0.0714285714286 + 0.0238095238095 0.5625 0.761904761905 0.52380952381 0.520833333333 + 0.642857142857 0.145833333333 0.0 0.0 0.196428571429 0.204081632653 + 0.0204081632653 0.0 0.0204081632653 0.0 + + + 0.551061750845 0.043084874133 0.0118394944043 0.00532252824503 + 0.168248876907 0.0697351537145 0.0403897529947 0.0272264973817 + 0.0139069924734 0.0144992334378 0.294161332501 0.0369799204475 + 0.160180082942 0.0121310935748 + + + + + + + + + 10 1 24 5 14 1 1 1 3 5 14 12 7 5 1 6 1 6 8 4 2 1 7 2 1 1 8 4 23 4 21 + 4 23 3 1 0 + + + + 234.0 + + + 2.88888888889 + + + 65.0 + + + 1.23076923077 + + + 1.225 + + + 0.520615384615 0.480769230769 0.981534820209 0.0502867546655 + 0.113882567137 0.118415754829 0.0247116832388 0.0778613812854 + 0.00488200298434 + + + 26.0 + + + 0.0384615384615 0.888888888889 + + + 0.0 0.0 0.0 0.153846153846 0.0 1.33333333333 2.22222222222 0.0 + + + 9.0 + + + 1.0 3.0 0.2 1.0 0.0 4.0 + + + 0.0 0.888888888889 + + + 0.277777777778 + + + 0.0 0.583333333333 0.583333333333 0.0 0.357142857143 0.857142857143 + 0.642857142857 0.0 0.0833333333333 0.0 0.0 0.0 0.0 0.357142857143 + 0.571428571429 0.52380952381 + + + 0.0 0.0 0.333333333333 0.666666666667 1.0 0.333333333333 0.0 0.0 + 0.0 0.0 0.333333333333 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + 1.0 0.666666666667 0.0 0.0 0.0 0.25 1.0 1.0 1.0 1.0 0.75 0.0 0.0 + 0.0 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.666666666667 0.333333333333 0.333333333333 + 0.0 0.166666666667 0.0 0.0 0.0 0.75 0.75 0.75 1.0 0.75 + + + 0.213786843037 0.344309230717 0.145649974768 0.0684093879026 + 0.0847208017887 0.326413605517 0.303076418516 0.476111972807 + 0.10030122769 0.106278712011 0.343077608198 0.0465754223495 + 0.391286376052 0.228937984547 + + + + + + + + + 39 1 41 3 40 3 4 1 14 9 1 14 3 40 3 40 3 40 3 40 4 39 3 40 3 40 3 40 + 3 40 3 40 3 40 4 39 4 39 4 39 4 39 3 40 3 40 3 40 2 41 2 41 5 1 3 27 + 17 1 1 24 10 38 5 40 4 39 4 39 4 39 3 41 2 40 4 40 3 40 3 39 4 39 4 + 39 4 39 4 39 4 39 4 39 4 39 4 39 4 39 5 38 5 16 1 3 1 6 2 9 5 2 32 4 + 5 1 34 3 5 1 34 3 5 1 34 4 4 1 35 3 40 3 40 4 38 5 39 4 39 4 39 3 40 + 3 41 1 2 0 + + + + 2580.0 + + + 0.716666666667 + + + 1749.0 + + + 0.150943396226 + + + 1.05660650604 + + + 0.50785482861 0.42765357444 0.0772842657075 0.101906870197 + 0.00592428357014 -0.000466419833684 0.00451753067751 + 0.00174668687165 0.0030779933728 + + + 43.0 + + + 0.488372093023 0.2 + + + 1.02325581395 0.0 0.0 0.93023255814 0.133333333333 0.133333333333 + 0.0 0.533333333333 + + + 60.0 + + + 2.0 11.0 0.236641221374 1.0 2.0 1.0 + + + 0.0 0.983333333333 + + + 0.677906976744 + + + 0.66 0.786666666667 0.813333333333 0.133333333333 0.757575757576 + 1.0 1.0 0.127272727273 0.793939393939 1.0 1.0 0.115151515152 + 0.69696969697 0.721212121212 0.836363636364 0.375757575758 + + + 0.371428571429 0.775 0.685714285714 0.625 0.657142857143 0.6 + 0.285714285714 0.0 0.428571428571 1.0 1.0 0.85 1.0 1.0 + 0.285714285714 0.0 0.428571428571 1.0 1.0 1.0 1.0 1.0 + 0.285714285714 0.0 0.542857142857 1.0 1.0 1.0 1.0 1.0 + 0.257142857143 0.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 0.257142857143 0.0 0.547619047619 1.0 1.0 1.0 1.0 1.0 + 0.238095238095 0.0 0.571428571429 1.0 1.0 0.85 1.0 1.0 + 0.285714285714 0.0 0.547619047619 0.666666666667 0.666666666667 + 0.458333333333 0.738095238095 0.666666666667 0.595238095238 0.5625 + + + 0.560830721683 0.0300483435283 0.0297370379534 0.0223183946467 + 0.247050368554 0.054636105199 0.0515948733174 0.011833143435 + 0.0147184052071 0.0203016995406 0.149380197756 0.0496369703377 + 0.133040556689 0.0302107031071 + + + + + + + + + 5 1 4 2 41 3 1 3 40 8 24 2 14 9 21 5 14 9 22 2 17 2 2 1 25 1 14 6 1 1 + 25 1 13 12 21 2 13 13 19 3 12 2 1 11 20 2 12 14 20 2 11 19 15 3 11 22 + 12 3 10 23 12 3 10 24 11 3 10 24 11 3 10 25 10 3 10 27 8 3 10 28 7 3 + 12 26 7 4 11 17 1 9 6 4 9 18 2 11 4 4 9 18 2 12 3 4 9 19 1 12 3 3 10 + 6 1 12 1 11 4 3 10 5 3 11 1 6 1 5 3 3 10 6 3 9 2 5 4 3 3 2 11 6 2 3 1 + 13 4 2 4 3 10 4 3 3 2 14 3 2 6 1 11 4 3 1 3 14 3 2 17 9 3 14 4 1 17 + 32 4 1 11 32 4 2 12 2 1 27 3 4 11 2 1 27 3 4 9 3 2 28 2 4 9 2 4 26 4 + 3 10 1 4 12 1 13 4 3 10 3 3 1 4 5 3 12 4 3 10 7 4 7 1 11 5 3 10 7 1 + 11 1 10 5 3 10 7 1 22 5 3 10 7 1 22 5 3 10 4 1 2 2 22 4 3 10 3 2 26 5 + 2 10 4 1 13 1 11 6 2 14 26 6 2 11 29 7 1 10 30 6 2 10 30 6 2 11 29 6 + 2 11 30 6 1 12 6 7 16 6 1 12 6 8 1 4 10 6 1 12 1 3 2 8 1 4 9 6 2 11 7 + 9 1 3 9 7 1 11 7 13 9 7 1 11 7 12 11 5 3 10 7 11 12 5 4 9 11 8 11 6 1 + 11 12 8 10 18 14 6 10 7 2 9 6 4 6 4 5 2 4 5 2 23 1 5 6 2 4 4 5 28 4 4 + 2 6 3 31 1 13 2 12 3 2 8 6 1 14 2 12 16 3 2 13 2 12 21 13 2 13 21 12 + 3 12 22 11 2 13 25 9 1 13 28 6 1 13 30 4 1 13 31 2 2 13 33 1 2 12 36 + 12 5 1 30 12 36 12 36 12 36 12 36 12 36 13 35 13 32 16 34 14 32 1 1 + 14 32 16 32 17 32 17 32 19 30 20 28 21 27 19 30 18 30 21 18 2 7 21 18 + 2 7 16 32 14 34 14 34 13 36 12 36 12 35 14 34 14 34 13 35 14 34 14 35 + 14 4 4 26 14 4 6 24 14 4 8 22 14 5 8 21 14 4 10 20 14 4 10 4 1 15 14 + 5 9 3 7 10 14 5 20 9 14 5 21 9 14 4 22 9 11 6 23 8 12 4 26 6 13 3 26 + 7 41 7 14 2 24 9 11 5 22 11 13 2 27 5 14 1 28 5 45 1 46 1 4 0 + + + + 6192.0 + + + 0.372093023256 + + + 3230.0 + + + 0.281424148607 + + + 1.23710021322 + + + 0.44270469666 0.49936629257 0.0388537066609 0.346657664502 + 0.0439033696896 0.00104677252879 0.00297819551479 0.00123464127579 + -0.0104784030346 + + + 48.0 + + + 3.375 1.27906976744 + + + 5.25 3.5 2.25 2.5 1.73643410853 2.17054263566 0.558139534884 + 0.651162790698 + + + 129.0 + + + 11.0 91.0 0.284112149533 14.0 8.0 5.0 + + + 0.0 0.992248062016 + + + 0.521640826873 + + + 0.78125 0.6796875 0.4296875 0.217171717172 0.661458333333 0.7421875 + 0.911458333333 0.497474747475 0.260416666667 0.638020833333 + 0.786458333333 0.583333333333 0.145833333333 0.1875 0.291666666667 + 0.540404040404 + + + 0.520833333333 0.90625 0.604166666667 0.59375 0.177083333333 + 0.03125 0.0 0.0 0.90625 0.791666666667 0.854166666667 + 0.666666666667 0.84375 0.666666666667 0.572916666667 0.303921568627 + 0.5 1.0 0.989583333333 0.4375 0.864583333333 0.96875 0.791666666667 + 0.235294117647 0.25 0.895833333333 0.9375 0.604166666667 0.8125 1.0 + 0.958333333333 0.0490196078431 0.0 0.666666666667 1.0 + 0.958333333333 0.666666666667 1.0 1.0 0.186274509804 + 0.0833333333333 0.291666666667 0.302083333333 0.291666666667 + 0.479166666667 1.0 0.958333333333 0.235294117647 0.28125 + 0.302083333333 0.4375 0.3125 0.46875 0.697916666667 1.0 + 0.637254901961 0.0 0.0 0.0 0.0 0.0 0.0 0.0625 0.460784313725 + + + 0.448005325099 0.210445152331 0.0220007038556 0.0118042550397 + 0.183888808435 0.387897625828 0.116426661737 0.0532031274828 + 0.00330411028975 0.0178862003467 0.0863210977919 0.274899662161 + 0.235961384387 0.0632807037842 + + + + + + + + + 14 5 2 3 6 1 54 28 2 1 38 2 1 35 37 39 37 39 37 39 36 40 36 40 37 39 + 36 40 36 39 37 39 37 39 37 39 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 37 39 38 38 4 1 32 39 4 1 33 38 38 38 38 38 37 39 37 39 + 37 40 36 39 37 39 37 39 37 39 37 40 36 35 1 4 36 35 1 4 36 20 16 4 36 + 7 29 4 37 3 33 3 73 3 73 3 12 3 1 5 1 8 42 4 7 26 39 4 3 31 38 4 3 30 + 39 4 3 30 39 4 3 30 40 3 3 30 41 1 4 29 42 1 5 29 41 2 3 30 41 2 3 30 + 41 2 3 29 42 2 3 28 42 4 2 30 40 4 1 31 40 36 39 37 39 37 39 37 39 37 + 39 37 40 36 40 35 41 35 41 35 41 36 40 36 40 36 40 36 40 36 40 36 40 + 36 40 36 40 36 40 36 40 36 7 1 32 36 40 36 27 9 4 36 18 20 2 36 8 68 + 4 73 1 39 0 + + + + 6460.0 + + + 0.894117647059 + + + 3345.0 + + + 0.122272047833 + + + 1.58461538462 + + + 0.493417040359 0.492088404869 0.13206252271 0.153734364881 + 0.0953838208471 0.000825973629985 -0.00200092442586 + 0.000269804279256 -0.00266687039756 + + + 76.0 + + + 0.223684210526 0.364705882353 + + + 0.263157894737 0.263157894737 0.263157894737 0.105263157895 + 0.188235294118 0.329411764706 0.8 0.141176470588 + + + 85.0 + + + 5.0 25.0 0.169421487603 3.0 2.0 3.0 + + + 0.0 0.988235294118 + + + 0.517801857585 + + + 0.907268170426 0.924812030075 0.190476190476 0.0 0.959899749373 1.0 + 0.215538847118 0.16028708134 0.0701754385965 0.130325814536 1.0 + 0.866028708134 0.0 0.177944862155 0.937343358396 0.758373205742 + + + 0.722222222222 0.929292929293 0.866666666667 0.818181818182 + 0.484848484848 0.133333333333 0.0 0.0 0.95 1.0 1.0 1.0 + 0.145454545455 0.0 0.0 0.0 0.933333333333 1.0 1.0 1.0 0.10101010101 + 0.0 0.0 0.0 0.9 1.0 1.0 1.0 0.390909090909 0.33 0.327272727273 + 0.281818181818 0.188888888889 0.111111111111 0.0555555555556 + 0.171717171717 1.0 1.0 1.0 0.777777777778 0.0 0.0 0.0 + 0.272727272727 1.0 1.0 1.0 0.690909090909 0.0 0.0 0.0 + 0.353535353535 1.0 1.0 1.0 0.59595959596 0.0 0.0 0.0 0.327272727273 + 0.890909090909 0.87 0.9 0.545454545455 + + + 0.346518665976 0.204361360054 0.011999822373 0.0114814526026 + 0.0749444009664 0.345880618 0.0788533528264 0.0186058718757 + 0.0145520382818 0.0137764114131 0.0895862358563 0.183088438404 + 0.0735290697174 0.0555125054528 + + + + + + + + + 39 1 74 1 36 2 12 2 4 8 9 2 36 34 2 3 36 39 36 39 36 39 36 39 36 39 + 36 39 36 39 36 38 37 39 36 39 36 39 36 39 36 39 36 39 36 38 37 38 37 + 38 37 39 36 39 36 39 36 38 37 38 36 39 36 40 36 39 36 39 36 39 36 40 + 31 1 3 38 34 2 1 38 33 2 11 29 33 2 2 38 33 1 4 37 33 1 4 17 1 19 33 + 1 4 38 32 2 3 38 32 2 3 40 8 3 1 3 2 3 5 1 3 3 3 72 3 72 3 16 1 55 3 + 15 3 3 3 48 3 8 23 41 3 7 25 40 3 6 27 40 3 1 3 1 27 39 35 40 36 39 + 36 40 35 39 36 39 36 39 36 39 36 40 35 40 35 40 35 40 34 40 36 34 40 + 37 38 40 37 1 6 31 44 31 35 40 35 41 34 41 34 41 34 41 34 41 34 41 34 + 40 35 40 35 40 35 40 35 41 34 41 34 41 34 40 35 40 35 40 35 4 1 5 1 2 + 4 6 3 14 35 3 24 1 1 1 2 8 34 3 29 3 1 5 34 4 34 3 35 3 32 5 72 3 72 + 3 72 3 71 5 72 3 72 1 2 0 + + + + 7050.0 + + + 0.797872340426 + + + 3390.0 + + + 0.141887905605 + + + 1.5149754135 + + + 0.510691222196 0.469277127541 0.12775316387 0.161920310294 + 0.099762278712 -0.000500457349815 -0.000629227830281 + -0.000856429040837 0.000700185572367 + + + 75.0 + + + 0.613333333333 0.414893617021 + + + 0.48 0.373333333333 0.586666666667 0.586666666667 0.170212765957 + 0.808510638298 0.170212765957 0.468085106383 + + + 94.0 + + + 6.0 31.0 0.140077821012 4.0 2.0 2.0 + + + 0.0 0.989361702128 + + + 0.48085106383 + + + 0.830917874396 0.861111111111 0.0193236714976 0.0 0.883295194508 + 0.916666666667 0.116704805492 0.120614035088 0.137299771167 + 0.366228070175 0.972540045767 0.570175438596 0.0 0.285087719298 + 0.949656750572 0.655701754386 + + + 0.666666666667 0.888888888889 0.833333333333 0.787037037037 + 0.0808080808081 0.0 0.0 0.0 0.747474747475 1.0 0.990740740741 + 0.833333333333 0.0 0.0 0.0 0.0 0.790909090909 1.0 1.0 0.775 0.0 0.0 + 0.0 0.0 0.717171717172 1.0 1.0 0.898148148148 0.232323232323 + 0.259259259259 0.333333333333 0.175925925926 0.282828282828 + 0.296296296296 0.287037037037 0.657407407407 1.0 0.888888888889 1.0 + 0.148148148148 0.0 0.0 0.0 0.541666666667 1.0 1.0 1.0 + 0.133333333333 0.0 0.0 0.0 0.537037037037 1.0 1.0 1.0 + 0.157407407407 0.0 0.0 0.0583333333333 0.541666666667 + 0.936363636364 0.875 0.95 0.5 + + + 0.451158353624 0.176022072249 0.00378519566234 0.0039293335577 + 0.0510257198622 0.374513101079 0.068883133576 0.0373226877055 + 0.0299107960204 0.007842017636 0.136681901398 0.288916205049 + 0.110684086944 0.0478770978695 + + + + + + + + + 39 1 30 1 34 3 28 2 35 1 28 1 36 2 27 2 35 3 26 2 36 2 26 3 35 2 26 3 + 30 10 23 4 28 14 20 4 1 2 13 1 11 11 23 9 3 3 4 3 10 10 23 9 5 3 3 3 + 11 10 22 10 4 3 3 2 12 11 21 17 3 2 12 11 1 4 16 23 11 11 1 4 16 10 8 + 4 12 16 16 9 10 1 13 11 1 4 2 1 14 7 12 1 14 2 1 6 1 4 2 3 13 6 12 2 + 14 20 12 7 11 4 11 22 12 5 12 4 11 23 11 5 9 2 1 4 11 24 13 2 1 1 7 7 + 11 25 9 8 3 1 2 1 1 5 11 26 6 10 2 1 1 1 1 8 10 27 5 24 10 27 5 24 9 + 29 4 24 10 28 3 25 10 28 4 24 10 9 3 16 4 10 2 12 10 5 1 2 4 16 5 2 + 17 4 10 5 1 2 4 15 17 2 2 1 1 5 11 4 3 1 3 16 17 11 11 4 1 22 17 12 + 10 27 17 12 10 25 1 1 4 4 9 5 1 6 10 27 3 8 12 6 10 10 1 15 5 10 5 1 + 4 5 9 11 1 12 2 1 5 10 5 2 3 5 10 3 2 5 1 11 10 2 1 5 7 2 1 6 10 3 4 + 2 2 12 2 2 5 2 2 4 11 4 11 3 8 12 2 1 6 8 5 3 18 3 9 6 1 3 3 2 5 7 6 + 1 20 3 9 6 3 1 10 4 9 3 4 3 11 4 3 1 4 5 4 1 10 7 6 4 2 4 12 3 3 2 3 + 5 15 7 6 4 2 4 11 4 3 2 4 4 15 7 5 5 2 4 11 4 3 2 4 4 15 6 5 13 10 5 + 2 2 4 4 15 6 4 13 11 4 1 1 1 2 4 4 4 1 10 6 4 13 11 4 3 2 3 6 1 7 6 9 + 3 11 12 3 4 1 3 6 1 7 6 4 4 15 12 3 4 1 3 6 1 7 6 4 8 11 11 4 5 17 6 + 3 16 4 12 3 6 8 1 6 7 3 17 3 12 3 7 7 1 6 7 3 17 3 12 3 8 13 7 3 18 2 + 12 3 8 13 7 3 18 2 12 3 10 11 7 3 18 2 12 3 10 11 7 3 18 2 12 3 12 9 + 7 3 18 2 12 3 13 8 7 3 18 2 12 3 13 8 7 3 18 2 12 3 14 7 7 3 18 2 12 + 3 28 3 18 2 12 3 28 3 18 2 12 2 20 1 8 2 19 2 12 3 19 2 7 2 19 2 14 1 + 18 3 7 3 52 4 7 3 54 2 7 3 40 3 11 2 8 1 41 2 63 5 54 4 1 7 2 2 36 2 + 12 3 2 13 34 2 12 4 1 15 32 2 12 3 2 12 1 3 31 2 12 2 3 1 1 1 1 8 2 3 + 29 3 12 3 2 13 1 3 1 1 27 3 12 3 2 20 26 3 12 3 1 22 26 2 12 3 1 22 + 26 2 12 3 1 24 24 2 12 3 1 25 22 3 12 3 1 24 23 3 14 1 1 24 23 3 16 + 24 23 3 14 1 1 24 23 3 14 1 1 24 23 3 14 12 1 13 24 2 13 27 23 3 13 + 27 23 3 14 1 1 24 23 3 14 20 2 4 23 2 14 27 23 3 13 28 22 3 14 27 22 + 3 15 26 22 4 15 18 2 5 22 4 11 1 6 11 2 2 3 3 23 3 12 2 11 4 9 2 23 3 + 12 2 12 3 9 2 23 3 12 3 11 3 9 2 23 3 12 3 12 1 35 3 12 3 11 1 36 3 + 12 3 11 2 10 1 24 3 12 3 11 2 9 3 23 3 26 2 10 2 23 3 11 2 12 4 4 1 4 + 2 23 3 12 6 6 5 3 8 23 4 11 17 2 9 23 4 11 18 1 9 23 4 11 28 23 4 11 + 28 23 4 10 6 4 19 23 4 10 1 1 4 5 18 23 4 10 7 5 17 23 3 10 8 6 16 23 + 4 10 7 6 1 1 14 23 3 12 6 9 13 23 3 12 5 11 12 23 4 11 6 10 12 23 4 + 11 6 10 12 23 4 10 5 13 11 23 4 9 1 1 5 17 6 24 3 10 6 16 1 1 5 24 2 + 11 6 18 6 37 5 63 2 21 2 65 1 419 5 61 5 62 3 62 5 62 4 62 4 62 4 61 + 5 61 5 61 5 62 4 62 4 62 4 62 3 41 0 + + + + 9966.0 + + + 0.437086092715 + + + 3143.0 + + + 0.453706649698 + + + 1.06977739726 + + + 0.591825546391 0.41428359317 0.102021548429 0.439376074376 + 0.0629815510602 -0.0181874427358 -0.00235902957298 -0.0133116560887 + 0.099171654315 + + + 66.0 + + + 3.60606060606 2.22516556291 + + + 2.60606060606 3.21212121212 4.72727272727 3.75757575758 + 2.19867549669 3.52317880795 2.19867549669 0.87417218543 + + + 151.0 + + + 26.0 100.0 0.219219219219 32.0 1.0 3.0 + + + 0.0 0.993377483444 + + + 0.315372265703 + + + 0.420608108108 0.324013157895 0.0 0.0 0.295707472178 0.229102167183 + 0.168730650155 0.176470588235 0.611486486486 0.309210526316 + 0.501644736842 0.190789473684 0.430842607313 0.407120743034 + 0.685758513932 0.297213622291 + + + 0.423611111111 0.473684210526 0.677631578947 0.309210526316 0.0 0.0 + 0.0 0.0 0.298611111111 0.480263157895 0.309210526316 0.0 0.0 0.0 + 0.0 0.0 0.208333333333 0.769736842105 0.651315789474 + 0.0921052631579 0.197368421053 0.25 0.184210526316 0.223684210526 + 0.0617283950617 0.169590643275 0.12865497076 0.0760233918129 + 0.111111111111 0.12865497076 0.152046783626 0.152046783626 + 0.347222222222 0.611842105263 0.460526315789 0.263157894737 + 0.296052631579 0.296052631579 0.493421052632 0.0 0.590277777778 + 0.881578947368 0.388157894737 0.125 0.947368421053 0.467105263158 + 0.269736842105 0.0 0.152777777778 1.0 0.782894736842 0.315789473684 + 0.953947368421 0.618421052632 0.493421052632 0.0 0.0 0.567251461988 + 0.292397660819 0.269005847953 0.654970760234 0.538011695906 + 0.684210526316 0.0 + + + 0.556212973113 0.132600703709 0.0807484702878 0.0425460027779 + 0.261078672069 0.333176447473 0.0332827965773 0.137175686651 + 0.0877982384921 0.0275640183537 0.11258046879 0.359469393028 + 0.0947079296565 0.0190751657108 + + + + + + + + + 34 14 22 3 36 24 8 7 37 39 37 40 37 39 37 39 37 1 1 1 1 13 1 21 43 11 + 1 21 43 33 43 33 37 2 4 32 38 4 2 33 37 5 2 32 37 39 37 39 37 39 37 + 39 37 39 38 38 38 38 38 38 38 38 38 38 39 37 39 37 39 37 39 37 39 37 + 39 38 38 38 3 3 31 39 3 2 32 40 2 2 32 41 1 2 32 8 1 31 2 2 32 40 1 5 + 31 39 38 37 39 37 39 37 39 37 39 37 39 37 4 3 31 38 4 29 2 41 4 37 12 + 23 4 37 31 4 3 38 32 3 3 38 33 2 3 38 33 2 3 38 33 2 3 38 33 3 2 38 + 33 3 2 39 33 2 2 39 33 2 2 39 33 2 2 39 33 1 3 39 33 1 3 39 38 38 38 + 38 38 38 38 38 39 37 39 37 47 22 46 1 7 22 46 3 4 24 45 4 3 31 38 1 1 + 1 6 29 38 4 4 30 38 38 38 38 38 38 38 38 38 38 39 37 39 37 39 37 39 + 37 39 37 39 37 39 37 40 36 40 37 39 37 39 37 40 36 53 1 2 20 73 3 73 + 3 74 2 74 3 73 3 73 3 72 4 72 5 71 4 72 4 33 0 + + + + 7448.0 + + + 0.775510204082 + + + 3351.0 + + + 0.150999701582 + + + 0.689844464776 + + + 0.505071123048 0.451245512187 0.118456781923 0.186483257863 + -0.0956457100832 -0.000135349844644 0.00130615268765 + -0.00107271844485 0.00393615779307 + + + 76.0 + + + 0.618421052632 0.387755102041 + + + 0.894736842105 0.736842105263 0.684210526316 0.157894736842 + 0.367346938776 0.530612244898 0.571428571429 0.0408163265306 + + + 98.0 + + + 4.0 26.0 0.233962264151 6.0 5.0 2.0 + + + 0.0 0.989795918367 + + + 0.449919441461 + + + 0.0 0.261052631579 0.81798245614 0.433684210526 0.166666666667 + 0.313684210526 0.969298245614 0.595789473684 0.949561403509 + 0.821052631579 0.0986842105263 0.176842105263 0.789473684211 + 0.778947368421 0.0350877192982 0.0 + + + 0.0 0.0 0.148148148148 0.410256410256 0.861111111111 0.472222222222 + 0.546296296296 0.0598290598291 0.0 0.0 0.0 0.461538461538 1.0 + 0.908333333333 1.0 0.153846153846 0.0 0.0 0.0 0.461538461538 1.0 + 1.0 1.0 0.213675213675 0.291666666667 0.341666666667 0.241666666667 + 0.507692307692 1.0 0.883333333333 1.0 0.230769230769 0.907407407407 + 0.981481481481 0.990740740741 0.65811965812 0.194444444444 + 0.222222222222 0.351851851852 0.393162393162 0.908333333333 1.0 1.0 + 0.661538461538 0.0 0.0 0.0 0.0 0.842592592593 1.0 1.0 + 0.692307692308 0.0 0.0 0.0 0.0 0.641666666667 0.7 0.816666666667 + 0.638461538462 0.133333333333 0.0 0.0 0.0 + + + 0.333786444861 0.206776574665 0.013015254673 0.0115319757721 + 0.0837412000435 0.35451850014 0.074781543281 0.0174483536621 + 0.00131737147623 0.0145639370337 0.0816799929532 0.208740434003 + 0.103286758612 0.0433849389574 + + + + + + + + + 36 1 76 3 41 2 5 7 3 20 40 38 40 38 40 38 41 37 41 37 41 37 41 37 41 + 37 41 37 41 37 41 36 42 37 42 36 42 36 42 36 42 36 42 36 37 2 3 36 37 + 1 4 36 37 2 3 36 36 3 3 37 35 3 3 37 35 2 2 38 36 3 2 38 35 3 2 38 33 + 6 2 38 32 6 2 23 1 13 33 5 3 22 2 13 34 5 2 37 33 6 3 27 4 2 1 2 22 9 + 1 6 11 10 1 4 1 7 2 4 11 2 5 20 4 1 3 3 1 29 3 1 4 29 4 1 1 72 3 75 4 + 74 4 18 1 3 2 50 4 22 1 52 3 22 3 49 4 21 1 52 4 19 4 51 4 16 6 1 1 + 51 3 20 1 10 1 42 4 12 1 6 13 42 4 7 25 42 4 6 27 41 4 5 27 42 4 5 28 + 41 5 5 27 41 5 5 26 42 5 5 26 43 4 5 26 42 5 4 27 38 9 3 30 38 7 3 29 + 41 5 3 29 42 4 3 29 4 2 36 4 3 30 41 4 3 29 42 4 3 28 43 4 3 29 42 4 + 4 28 42 4 3 28 43 5 2 28 43 5 2 28 43 5 2 29 42 5 2 28 43 5 2 28 42 6 + 3 27 43 5 3 28 42 5 3 28 42 4 4 1 1 25 43 4 6 26 42 4 6 26 42 4 6 25 + 42 6 4 26 42 6 3 27 21 9 13 5 3 27 9 1 4 17 12 5 3 27 8 30 5 4 5 26 7 + 40 5 26 6 42 4 27 4 43 4 74 4 75 2 77 1 77 1 232 4 74 4 73 4 74 5 74 + 4 74 4 74 4 75 3 75 4 74 4 74 4 74 3 75 3 75 4 74 3 76 2 76 2 76 3 75 + 2 76 2 76 3 75 4 74 4 74 3 76 2 77 1 77 1 76 2 76 2 76 2 77 2 76 1 77 + 1 78 2 77 2 76 1 65 0 + + + + 9906.0 + + + 0.614173228346 + + + 3771.0 + + + 0.180588703262 + + + 1.24104584527 + + + 0.495211232681 0.349696724796 0.136583388931 0.147325853224 + 0.0494781009446 0.00199828614333 -0.0231469679451 0.00393787710035 + 0.0167388073418 + + + 78.0 + + + 1.08974358974 0.685039370079 + + + 1.79487179487 1.64102564103 0.153846153846 0.358974358974 + 0.503937007874 1.38582677165 0.818897637795 0.0 + + + 127.0 + + + 19.0 69.0 0.191011235955 7.0 3.0 5.0 + + + 0.0 0.992125984252 + + + 0.380678376741 + + + 0.857385398981 0.493421052632 0.172697368421 0.138157894737 0.9 + 0.4890625 0.1203125 0.0 0.00169779286927 0.896381578947 + 0.527960526316 0.0 0.0661290322581 0.928125 0.5109375 0.0 + + + 0.755555555556 0.805555555556 0.611111111111 0.444444444444 + 0.361111111111 0.319444444444 0.208333333333 0.0277777777778 + 0.846666666667 1.0 0.925 0.0 0.025 0.01875 0.13125 0.18125 + 0.866666666667 0.98125 0.75625 0.0 0.0 0.0 0.0 0.0 0.8 0.94375 + 0.875 0.325 0.3625 0.11875 0.0 0.0 0.0 0.00694444444444 + 0.763888888889 0.986111111111 1.0 0.125 0.0 0.0 0.0 0.0 0.83125 1.0 + 0.9875 0.00625 0.0 0.0 0.0 0.0 0.91875 1.0 0.95625 0.0125 0.0 0.0 + 0.0 0.25625 0.8875 0.90625 0.98125 0.09375 0.0 0.0 + + + 0.683938024477 0.0475043574963 0.0399159291873 0.0322135632146 + 0.566207969049 0.210307703953 0.0202342979415 0.0877398431585 + 0.0805344623625 0.0164215335059 0.161006837785 0.390092883719 + 0.0701974679267 0.0180766765653 + + + + + + + + + 81 2 156 3 155 2 78 2 155 5 153 5 153 6 152 9 71 1 23 1 9 1 42 11 70 + 3 2 8 2 14 4 3 41 12 69 32 1 3 41 13 68 36 40 16 66 36 40 17 65 36 40 + 18 64 36 40 19 63 36 40 20 63 35 40 19 64 35 40 20 5 1 57 35 40 20 6 + 1 56 35 40 17 5 1 60 35 40 25 58 35 40 26 57 35 40 3 2 12 2 8 56 35 + 41 2 4 10 2 1 2 7 54 35 40 4 3 13 2 8 53 35 40 4 3 25 51 36 39 33 50 + 36 39 34 49 36 39 34 50 35 40 3 3 2 1 26 47 33 43 4 2 2 3 26 45 28 48 + 10 1 29 42 34 42 42 40 36 40 45 38 6 1 28 40 47 36 35 40 32 1 16 34 + 35 41 50 32 36 40 52 30 36 40 3 2 50 27 36 40 57 25 2 1 33 40 58 24 + 36 40 61 21 4 2 30 40 39 3 20 5 1 2 1 10 37 40 39 3 20 5 7 6 38 40 59 + 8 8 4 38 42 21 1 15 2 22 5 51 41 38 1 24 3 51 41 36 1 26 3 51 41 35 3 + 14 4 4 6 51 41 35 7 9 2 1 4 3 3 53 41 55 10 52 41 56 1 3 12 45 41 6 2 + 17 5 27 15 13 21 1 2 8 41 5 5 16 6 25 15 12 27 6 41 5 7 13 10 27 5 17 + 29 4 42 4 8 12 11 1 1 25 5 16 31 2 42 4 9 12 15 23 1 19 32 1 42 4 10 + 14 13 19 4 19 32 1 42 4 10 16 13 15 5 20 32 1 41 5 12 11 19 13 3 21 + 74 7 11 3 4 4 1 2 2 3 11 38 28 4 40 6 17 18 9 36 28 5 32 1 7 6 15 19 + 13 8 3 20 29 6 31 2 6 5 24 12 23 20 30 5 31 2 5 7 25 11 22 20 30 6 28 + 5 4 7 58 20 31 2 33 2 6 5 59 20 31 2 33 1 7 5 59 20 31 2 33 1 7 5 60 + 19 31 2 32 2 8 4 59 20 31 3 31 3 7 4 58 21 31 4 9 5 2 3 11 3 7 4 58 + 21 31 37 7 4 59 20 31 37 7 4 60 19 31 37 8 3 60 19 31 37 8 3 61 18 31 + 37 8 3 61 18 31 36 9 3 61 18 31 37 8 3 63 16 31 37 8 3 65 15 30 37 8 + 3 66 1 4 9 30 37 9 2 73 7 30 37 8 3 69 3 2 6 30 37 8 3 68 12 30 37 8 + 3 68 12 30 37 8 3 68 12 30 37 8 3 67 13 30 37 9 2 69 11 30 37 9 2 71 + 9 30 37 9 3 72 7 30 37 9 3 73 7 29 37 9 3 74 6 31 1 2 29 12 3 75 5 37 + 21 17 3 76 4 37 21 17 3 77 3 30 36 9 3 78 2 30 36 10 2 79 1 30 4 1 1 + 1 30 9 2 109 38 9 2 110 37 9 2 110 37 9 2 110 37 9 2 110 37 9 2 110 + 37 9 2 110 37 9 2 110 37 10 2 109 37 10 1 110 37 10 1 110 37 121 37 + 121 37 121 38 120 38 120 38 120 38 121 14 1 22 121 3 25 5 2 1 122 1 + 790 1 156 2 35 0 + + + + 19434.0 + + + 1.28455284553 + + + 6290.0 + + + 0.199046104928 + + + 1.56241361972 + + + 0.513554018612 0.451322682374 0.353992318171 0.129084506212 + 0.114529474937 -0.0417898798653 0.0320736008198 0.0222904325692 + 0.0158959910204 + + + 158.0 + + + 1.05696202532 1.91056910569 + + + 1.3417721519 1.39240506329 0.658227848101 0.810126582278 + 1.36585365854 2.56910569106 2.56910569106 0.845528455285 + + + 123.0 + + + 20.0 114.0 0.25035161744 20.0 4.0 7.0 + + + 0.0 0.991869918699 + + + 0.32365956571 + + + 0.437606837607 0.808105872622 0.127377998346 0.0281224152192 0.0 + 0.570161290323 0.201612903226 0.0 0.662393162393 0.718775847808 + 0.22994210091 0.0124069478908 0.00333333333333 0.0395161290323 + 0.672580645161 0.670967741935 + + + 0.466666666667 0.915789473684 0.884868421053 0.578947368421 + 0.252631578947 0.148026315789 0.115789473684 0.00328947368421 0.0 + 0.393333333333 0.990625 0.753333333333 0.123333333333 0.0 0.0 0.0 + 0.0 0.0 0.659375 0.796666666667 0.103333333333 0.0 0.0 0.0 0.0 0.0 + 0.153125 0.693333333333 0.59 0.13125 0.0 0.0 0.40701754386 + 0.785964912281 0.769736842105 0.663157894737 0.477192982456 + 0.460526315789 0.0526315789474 0.0 0.456666666667 0.993333333333 + 0.975 0.446666666667 0.00666666666667 0.0 0.0 0.0 0.0 + 0.0133333333333 0.071875 0.0866666666667 0.45 0.9375 0.85 0.465625 + 0.0 0.0 0.0 0.0 0.383333333333 0.8875 0.883333333333 0.509375 + + + 0.343647759505 0.203105905902 0.0811705258994 0.101025070931 + 0.0825874643111 0.221481481454 0.148479450538 0.161216036113 + 0.202330381286 0.071372180757 0.183442351867 0.170501081476 + 0.264337591258 0.0979074051812 + + + + + + + + + 1 1 76 3 75 2 76 2 76 3 36 1 38 3 35 3 37 5 32 4 37 3 34 5 37 1 36 3 + 38 1 36 2 39 2 35 2 39 2 2 2 8 5 5 4 9 2 39 20 2 17 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 40 38 49 20 3 3 1 1 40 3 6 30 39 3 6 30 49 + 29 40 38 40 38 40 38 40 38 40 38 34 1 5 38 34 1 5 38 34 1 5 38 33 3 4 + 38 33 3 4 16 1 21 33 3 4 16 2 11 1 8 33 3 4 38 32 4 4 38 10 1 6 6 9 4 + 5 38 6 18 1 10 5 16 1 35 2 19 5 73 5 74 4 74 4 3 23 48 5 2 30 41 5 2 + 31 40 5 2 31 40 5 2 32 39 5 2 32 39 5 2 31 40 4 3 31 41 3 2 32 41 37 + 40 37 41 37 41 37 41 36 42 38 39 40 36 42 38 40 38 40 38 40 3 1 34 40 + 2 4 24 1 2 2 4 39 39 39 39 39 39 39 39 39 38 40 38 40 38 40 38 40 38 + 40 38 40 7 2 29 40 38 40 7 1 31 40 35 2 1 40 34 43 34 45 16 7 10 45 4 + 74 2 37 0 + + + + 7410.0 + + + 0.821052631579 + + + 3357.0 + + + 0.148346738159 + + + 1.50306314969 + + + 0.497881921474 0.543538747235 0.137617372163 0.158697216542 + 0.102530587043 0.000107940251385 -0.00208619710257 -0.0014358625432 + -0.00305177030953 + + + 78.0 + + + 0.641025641026 0.536842105263 + + + 0.974358974359 0.564102564103 0.615384615385 0.358974358974 + 0.505263157895 0.378947368421 0.842105263158 0.336842105263 + + + 95.0 + + + 8.0 54.0 0.194736842105 5.0 6.0 5.0 + + + 0.0 0.989473684211 + + + 0.453036437247 + + + 0.530892448513 0.850877192982 0.328947368421 0.0 0.504347826087 + 0.991666666667 0.416666666667 0.0395833333333 0.0549199084668 + 0.0504385964912 0.868421052632 0.905701754386 0.0 0.025 + 0.852083333333 0.797916666667 + + + 0.262626262626 0.851851851852 0.759259259259 0.675925925926 + 0.555555555556 0.101851851852 0.0 0.0 0.0 0.95 0.975 0.966666666667 + 0.658333333333 0.0 0.0 0.0 0.0 0.941666666667 1.0 1.0 0.65 0.0 0.0 + 0.0 0.0727272727273 0.925 0.966666666667 1.0 0.8 0.216666666667 0.1 + 0.0583333333333 0.121212121212 0.111111111111 0.101851851852 + 0.111111111111 0.722222222222 1.0 0.953703703704 0.861111111111 0.0 + 0.0 0.0 0.0 0.75 1.0 1.0 0.808333333333 0.0 0.0 0.0 0.0 + 0.783333333333 1.0 1.0 0.8 0.0 0.0 0.0 0.1 0.741666666667 + 0.883333333333 0.816666666667 0.575 + + + 0.489863856831 0.161769802779 0.0139556513188 0.00615519341838 + 0.0981199405603 0.38430660921 0.0557796417073 0.0155597607218 + 0.0141301173763 0.0116661683823 0.157784914745 0.350191388359 + 0.110453608735 0.0359242779867 + + + + + + + + + 1 5 76 13 68 15 1 4 3 5 53 21 1 9 50 21 1 11 48 34 47 35 46 19 3 13 + 46 18 4 17 42 16 6 17 42 17 5 4 3 9 43 17 4 5 2 11 42 41 40 41 39 42 + 39 40 42 40 41 40 41 40 41 39 42 39 42 37 43 38 46 36 53 31 51 30 50 + 31 49 32 48 33 48 33 47 34 47 34 49 7 4 20 50 7 5 7 1 11 52 5 5 7 1 + 12 52 4 5 7 1 11 54 4 3 20 55 26 56 4 1 20 56 3 3 9 2 8 22 1 18 2 20 + 7 3 9 1 14 3 10 6 2 4 3 11 2 5 35 3 18 5 1 6 3 2 4 3 9 2 25 2 19 12 9 + 2 8 5 24 2 19 14 4 6 6 6 25 2 18 37 24 2 18 38 21 4 18 39 21 3 18 40 + 25 2 14 41 17 1 2 7 13 41 40 41 40 41 40 41 40 41 40 41 40 40 42 39 + 42 39 42 40 41 40 41 40 41 41 3 2 34 50 31 47 34 40 41 40 41 44 3 1 + 33 41 41 44 37 46 35 49 32 48 5 7 22 47 34 39 3 5 34 40 41 41 39 42 + 17 2 20 48 10 4 20 47 10 3 21 42 15 3 22 40 13 7 21 44 10 14 13 47 2 + 22 10 75 5 76 6 76 5 76 4 77 3 78 3 78 3 79 4 77 4 80 1 + + + + 7614.0 + + + 0.86170212766 + + + 3001.0 + + + 0.202932355881 + + + 1.54681841697 + + + 0.528282239254 0.462426502994 0.160339654375 0.184388931747 + 0.136584987738 -0.00500724868673 -0.00724011960666 + -0.00795372909148 -0.00284430944558 + + + 81.0 + + + 1.24691358025 0.627659574468 + + + 1.13580246914 1.28395061728 2.07407407407 0.395061728395 + 0.468085106383 1.36170212766 0.255319148936 0.382978723404 + + + 94.0 + + + 17.0 56.0 0.255319148936 7.0 3.0 5.0 + + + 0.0 0.989361702128 + + + 0.39414236932 + + + 0.89347826087 0.345833333333 0.0 0.0 0.767391304348 0.85625 + 0.0978260869565 0.00625 0.0195652173913 0.304166666667 0.95 + 0.385416666667 0.0 0.240079365079 0.859213250518 0.593253968254 + + + 0.863636363636 0.925 0.108333333333 0.0666666666667 0.0 0.0 0.0 0.0 + 0.790909090909 0.983333333333 0.875 0.333333333333 0.0 0.0 0.0 0.0 + 0.627272727273 0.966666666667 0.941666666667 0.675 0.0 0.0 0.0 0.0 + 0.472727272727 0.966666666667 0.991666666667 0.816666666667 + 0.245454545455 0.15 0.025 0.0 0.0 0.075 0.166666666667 + 0.616666666667 1.0 0.858333333333 0.658333333333 0.0666666666667 + 0.0 0.0 0.0 0.433333333333 0.945454545455 1.0 0.783333333333 + 0.0333333333333 0.0 0.0 0.0 0.591666666667 0.936363636364 1.0 1.0 + 0.0166666666667 0.0 0.0 0.0 0.378787878788 0.743801652893 + 0.772727272727 0.893939393939 0.44696969697 + + + 0.461275134906 0.19634748122 0.0404924993539 0.0221975796732 + 0.124582024422 0.401601925507 0.102903479746 0.0893008962835 + 0.047727390111 0.0172883647413 0.040512822913 0.314774369804 + 0.193963856774 0.0699998743797 + + + + + + + + + 129 5 153 18 2 5 132 30 2 1 127 33 127 33 127 33 127 33 127 33 127 33 + 127 19 1 13 127 33 127 33 127 33 128 32 128 32 128 33 127 33 127 33 + 127 33 127 33 127 32 128 32 128 33 127 35 124 35 125 35 125 7 1 28 + 125 35 124 36 124 36 125 33 128 32 128 32 2 4 122 32 2 5 121 32 2 6 + 120 32 3 5 120 32 3 4 90 3 28 32 3 5 89 6 2 2 21 32 2 8 87 25 6 32 2 + 12 83 63 2 13 82 38 7 3 2 3 2 8 2 13 82 36 24 3 2 16 79 35 27 1 2 18 + 77 35 30 21 75 33 32 21 74 33 32 25 70 33 32 26 69 33 32 25 70 33 32 + 26 69 33 32 28 67 5 2 26 32 27 68 6 2 25 32 28 67 34 31 32 63 33 33 + 19 1 12 62 33 33 34 60 33 33 37 57 33 33 39 12 4 39 33 33 20 4 9 2 5 + 13 5 37 33 32 19 5 9 6 1 17 2 36 33 32 20 5 12 20 5 33 33 32 21 4 4 3 + 8 17 4 34 33 32 22 4 1 5 7 56 6 2 25 32 28 3 4 3 2 55 2 7 24 32 29 52 + 2 20 25 32 32 49 5 15 27 32 34 47 9 12 26 32 39 42 2 3 5 3 3 6 25 32 + 8 2 31 40 3 3 12 4 25 32 43 37 18 9 21 32 21 3 24 32 20 2 3 1 22 32 + 21 4 23 34 47 31 21 5 23 33 47 32 18 8 22 3 6 23 48 32 18 9 21 6 4 21 + 49 32 17 11 2 2 20 1 9 19 47 32 21 1 9 1 27 2 3 19 45 32 60 2 5 17 44 + 32 38 4 23 21 14 9 19 32 5 1 33 4 25 2 4 2 5 2 2 1 13 25 3 33 4 4 32 + 8 26 4 21 26 2 33 4 6 36 8 45 26 2 33 4 8 27 19 41 27 1 33 4 11 25 22 + 38 61 4 12 22 27 34 61 4 14 7 45 30 60 3 19 7 48 26 57 4 18 12 47 21 + 58 4 20 13 46 4 1 13 59 4 28 11 40 18 58 5 30 3 44 20 59 4 76 21 139 + 21 139 20 140 20 140 20 140 20 140 3 2 15 140 4 2 14 141 2 3 14 141 + 19 141 2 2 16 140 20 142 18 143 17 144 16 149 11 152 8 155 5 156 4 + 157 3 158 2 158 2 158 2 158 2 159 1 159 1 159 1 55 0 + + + + 19040.0 + + + 1.34453781513 + + + 5196.0 + + + 0.206697459584 + + + 0.687590636006 + + + 0.546769164476 0.477409284848 0.464461393378 0.129850296718 + -0.120656906248 -0.135392335425 0.041763917559 -0.0399525984027 + -0.0151176343063 + + + 160.0 + + + 1.00625 1.24369747899 + + + 1.45 1.025 1.275 0.275 0.134453781513 1.24369747899 3.05882352941 + 0.403361344538 + + + 119.0 + + + 20.0 91.0 0.256965944272 14.0 1.0 5.0 + + + 0.0 0.991596638655 + + + 0.272899159664 + + + 0.0 0.423333333333 0.749166666667 0.0291666666667 0.0 + 0.00416666666667 0.29 0.0075 0.0 0.410833333333 0.654166666667 + 0.315833333333 0.797413793103 0.486666666667 0.188333333333 0.0 + + + 0.0 0.0 0.303333333333 0.936666666667 0.893333333333 0.573333333333 + 0.0566666666667 0.0 0.0 0.0 0.0 0.453333333333 0.75 0.78 0.06 0.0 + 0.0 0.0 0.0 0.0166666666667 0.186666666667 0.51 0.03 0.0 0.0 0.0 + 0.0 0.0 0.0266666666667 0.436666666667 0.0 0.0 0.0 0.0 0.11 + 0.203333333333 0.416666666667 0.863333333333 0.73 0.15 0.0 0.0 + 0.343333333333 0.986666666667 0.863333333333 0.473333333333 + 0.223333333333 0.16 0.746428571429 0.76 0.703333333333 + 0.456666666667 0.506666666667 0.246666666667 0.0 0.0 0.753571428571 + 0.923333333333 0.786666666667 0.0 0.0 0.0 0.0 0.0 + + + 0.253885517346 0.24331953177 0.201395030376 0.17362675475 + 0.000900257266297 0.231577858711 0.132358870549 0.304870229443 + 0.170483948343 0.170941734251 0.0955483432703 0.0871486218725 + 0.244425434658 0.0128529685651 + + + + + + + + + 79 1 33 1 58 10 9 1 33 1 17 2 5 2 3 3 12 1 3 30 33 33 12 34 33 33 12 + 34 33 33 12 34 33 33 12 2 3 29 33 33 12 2 3 28 34 33 12 2 2 30 33 33 + 12 3 1 30 33 33 12 3 1 13 1 1 1 14 33 33 11 35 33 33 12 34 33 33 12 + 34 33 33 11 35 33 33 11 35 33 33 12 34 33 33 12 34 33 33 12 34 33 33 + 12 34 33 33 12 34 33 33 12 34 32 34 12 34 32 34 12 34 32 34 12 34 32 + 35 11 34 32 35 9 7 1 29 31 35 9 37 31 36 8 37 31 36 10 35 32 34 10 5 + 1 29 33 33 12 3 2 29 34 17 4 10 13 1 1 1 2 12 1 16 34 32 12 34 34 33 + 12 33 29 1 4 33 12 33 29 2 3 33 12 35 6 6 1 11 1 4 3 33 12 64 3 33 12 + 63 4 33 12 63 4 32 13 63 4 33 12 63 4 28 2 3 12 10 1 1 16 35 4 7 1 2 + 35 1 30 32 4 2 74 32 4 2 74 32 4 2 74 32 4 2 74 32 5 1 74 33 4 1 73 + 34 4 1 74 33 4 1 74 33 79 33 79 33 79 33 79 33 80 32 80 32 80 3 2 27 + 79 33 79 33 79 33 80 32 80 32 80 32 35 2 43 17 3 12 35 2 43 2 2 3 2 7 + 4 11 36 2 43 2 3 2 1 8 2 14 35 2 43 32 35 2 43 32 35 2 43 32 35 2 43 + 32 36 1 43 32 35 3 42 33 34 3 42 33 34 3 42 6 1 26 34 3 42 3 7 23 34 + 3 42 3 9 5 15 1 34 3 42 2 30 1 34 4 73 1 35 2 110 2 111 1 111 1 111 1 + 75 0 + + + + 9520.0 + + + 1.31764705882 + + + 4067.0 + + + 0.154413572658 + + + 1.54766653371 + + + 0.516134034206 0.399598393574 0.267571466089 0.0999287803139 + 0.094034650876 -0.0218289437495 0.017075109591 0.0162030567393 + 0.0128531887378 + + + 112.0 + + + 0.357142857143 1.27058823529 + + + 0.142857142857 0.571428571429 0.428571428571 0.285714285714 + 1.50588235294 1.55294117647 0.752941176471 1.27058823529 + + + 85.0 + + + 15.0 60.0 0.150246305419 6.0 3.0 4.0 + + + 0.0 0.988235294118 + + + 0.427205882353 + + + 0.836734693878 0.954081632653 0.0799319727891 0.0 0.494897959184 + 0.581632653061 0.0255102040816 0.0714285714286 0.790816326531 + 0.899659863946 0.214285714286 0.11038961039 0.0 0.263605442177 + 0.954081632653 0.602272727273 + + + 0.664285714286 0.928571428571 0.985714285714 0.863636363636 + 0.214285714286 0.0 0.0 0.0 0.728571428571 1.0 1.0 0.974025974026 + 0.0909090909091 0.0 0.0 0.0 0.321428571429 0.428571428571 + 0.485714285714 0.467532467532 0.0324675324675 0.0 0.116883116883 + 0.168831168831 0.485714285714 0.727272727273 0.75 0.62987012987 + 0.0649350649351 0.0 0.0 0.0 0.871428571429 0.987012987013 1.0 + 0.993506493506 0.012987012987 0.0 0.0 0.0 0.578571428571 + 0.714285714286 0.742857142857 0.857142857143 0.454545454545 + 0.385714285714 0.324675324675 0.116883116883 0.0 0.0 0.0 + 0.512987012987 1.0 1.0 0.935064935065 0.266233766234 0.0 0.0 0.0 + 0.493506493506 0.88961038961 0.928571428571 0.915584415584 + 0.292207792208 + + + 0.389495191078 0.19381752112 0.0813189648486 0.0748813436352 + 0.0286130040683 0.316267845112 0.105435154663 0.207919444835 + 0.146484943624 0.0610653935469 0.0504836457482 0.0496441997855 + 0.238780969369 0.039904582631 + + + + + + + + + 302 1 75 2 76 2 75 2 74 3 73 4 40 37 39 38 39 38 39 38 39 38 39 38 39 + 38 39 38 39 38 39 39 38 39 38 39 38 38 39 38 39 39 39 38 39 38 39 38 + 39 38 39 38 39 38 39 31 46 38 39 38 39 38 39 38 39 38 39 38 39 38 39 + 38 39 38 39 38 39 38 39 38 38 39 38 39 38 39 37 40 5 8 3 11 8 42 5 72 + 5 20 1 51 5 20 2 50 5 20 2 24 1 10 8 7 5 20 2 15 33 2 5 2 1 1 1 12 2 + 1 1 17 33 1 5 4 3 10 2 19 33 2 4 5 2 30 34 2 5 3 3 30 33 3 5 3 3 31 + 32 3 3 6 2 30 31 5 3 39 30 5 2 41 29 6 1 40 30 47 30 6 1 40 30 5 2 40 + 29 6 4 38 29 6 6 36 30 5 6 36 29 6 6 5 4 9 1 17 29 3 9 2 5 29 50 2 2 + 23 49 28 42 4 3 28 42 36 42 34 44 3 1 29 43 34 43 34 43 34 44 33 44 + 33 44 34 43 33 44 33 44 34 43 34 43 34 44 32 45 32 45 33 45 4 15 13 + 45 3 20 9 45 3 23 6 45 3 25 4 45 3 26 3 45 2 27 3 74 3 76 1 36 0 + + + + 7546.0 + + + 0.785714285714 + + + 3232.0 + + + 0.152846534653 + + + 0.752593524049 + + + 0.518837122199 0.503377947331 0.121876348702 0.165569035733 + -0.0889247786429 -0.000846090347832 -0.000577521886634 + 0.00265859937031 0.00267420674725 + + + 77.0 + + + 0.623376623377 0.479591836735 + + + 1.03896103896 0.311688311688 0.415584415584 0.727272727273 0.0 + 0.0816326530612 1.55102040816 0.285714285714 + + + 98.0 + + + 6.0 46.0 0.221453287197 5.0 2.0 5.0 + + + 0.030612244898 0.989795918367 + + + 0.42830638749 + + + 0.0 0.0652631578947 0.782894736842 0.471578947368 0.0964912280702 + 0.170526315789 0.97149122807 0.722105263158 0.625 1.0 + 0.208333333333 0.130526315789 0.5375 0.836 0.241666666667 0.0 + + + 0.0 0.0 0.0 0.119658119658 0.657407407407 0.592592592593 + 0.277777777778 0.0598290598291 0.0 0.0 0.0 0.130769230769 1.0 0.85 + 0.991666666667 0.523076923077 0.0 0.0 0.0 0.119658119658 + 0.888888888889 0.990740740741 1.0 0.384615384615 0.0666666666667 + 0.3 0.2 0.330769230769 1.0 1.0 1.0 0.538461538462 0.25 1.0 1.0 1.0 + 0.375 0.2 0.225 0.269230769231 0.25 1.0 1.0 1.0 0.240740740741 0.0 + 0.0 0.0 0.25 1.0 1.0 1.0 0.183333333333 0.0 0.0 0.0 0.266666666667 + 0.633333333333 0.641666666667 0.7 0.416666666667 0.366666666667 0.0 + 0.0 + + + 0.393259961864 0.17892624727 0.0218183493848 0.00708256661839 + 0.0281193302942 0.341054117579 0.0699026932563 0.0458240011978 + 0.0347080476611 0.0146624876725 0.110591848383 0.231043066842 + 0.102607368935 0.0432221427548 + + + + + + + + + 1 1 191 1 192 3 12 12 167 27 3 3 159 36 19 4 26 1 108 35 18 21 9 2 + 108 34 19 33 107 35 18 33 107 37 15 34 107 37 15 34 107 36 16 34 107 + 5 1 29 17 34 107 35 18 15 4 14 108 34 18 16 2 15 108 34 18 33 108 32 + 20 33 108 31 21 33 107 36 17 33 106 40 13 34 106 41 11 36 1 1 103 40 + 11 38 105 39 11 37 106 39 12 37 105 38 13 37 106 38 12 37 106 39 12 + 35 107 39 13 34 107 39 12 35 108 38 13 4 1 28 109 38 13 3 4 26 109 38 + 13 3 3 28 108 38 13 4 2 28 108 38 13 4 3 27 108 38 13 34 108 38 13 3 + 2 29 108 38 13 34 108 38 13 34 108 39 12 34 109 38 16 30 109 38 12 34 + 109 38 12 34 109 38 12 34 109 38 13 33 110 16 1 20 13 33 111 36 13 33 + 113 12 2 4 5 11 13 33 118 2 20 7 13 33 143 4 13 33 144 3 13 1 7 3 2 + 20 145 2 13 1 22 5 2 3 22 3 120 3 12 1 31 1 20 6 120 2 65 7 119 2 65 + 7 119 2 64 10 117 2 64 11 115 1 67 11 182 10 182 13 179 15 178 15 113 + 1 63 16 112 2 63 15 113 3 62 15 6 1 106 3 62 15 5 3 105 3 62 15 1 7 + 106 2 61 1 1 14 2 6 106 2 61 2 1 1 1 12 2 6 105 2 61 18 1 10 101 2 61 + 18 2 10 101 1 61 32 161 33 159 35 158 17 2 16 158 17 3 15 158 17 2 15 + 159 16 1 17 159 30 1 3 1 4 153 31 1 9 152 37 156 41 15 2 135 40 15 4 + 133 42 13 6 131 43 12 8 131 41 11 10 131 41 12 8 132 41 12 9 130 6 6 + 29 14 9 129 6 8 23 3 1 14 9 129 13 1 16 23 10 1 1 129 31 21 11 2 1 + 126 16 2 12 1 3 4 1 14 14 3 2 121 16 2 12 2 8 12 20 122 16 1 1 1 10 6 + 3 13 20 122 17 2 3 1 4 10 1 13 19 1 1 121 17 33 19 124 16 34 14 1 4 1 + 6 117 2 3 5 4 1 11 7 3 1 13 15 1 10 118 1 4 5 2 4 7 1 1 2 2 3 2 2 13 + 26 124 9 8 1 6 1 3 2 13 26 125 5 11 1 3 4 3 1 14 28 124 3 11 2 2 9 14 + 29 136 14 14 31 134 15 12 32 134 3 4 7 12 5 4 25 135 1 5 3 15 7 1 27 + 141 2 15 15 1 20 136 5 15 6 1 10 2 18 136 5 15 2 2 1 2 31 139 1 15 4 + 5 27 2 2 133 1 21 2 1 11 1 14 141 2 24 6 1 4 3 14 139 3 24 8 6 13 139 + 3 25 7 5 13 139 4 26 7 1 16 139 4 29 1 4 15 2 1 9 1 127 3 35 15 1 3 6 + 4 162 20 7 4 161 19 174 19 174 20 173 21 174 19 176 17 6 1 171 12 8 2 + 171 12 173 5 5 10 5 5 162 7 5 9 2 8 164 3 10 16 176 17 167 1 8 17 163 + 29 164 29 162 31 163 29 170 23 171 22 171 22 178 14 179 6 1 7 180 3 4 + 3 2 1 180 4 2 7 173 1 4 14 174 19 176 17 176 18 177 16 178 14 179 14 + 179 14 178 15 182 9 186 7 186 6 188 5 189 4 191 1 12 0 + + + + 30108.0 + + + 1.23717948718 + + + 5899.0 + + + 0.230038989659 + + + 2.09083982007 + + + 0.47767983274 0.385436569347 0.552574463978 0.282328485039 + 0.353324720819 0.0333906476563 0.0809988517889 0.0774016515844 + 0.0670217891409 + + + 193.0 + + + 1.05699481865 1.39743589744 + + + 0.373056994819 0.39378238342 1.61658031088 1.84455958549 + 1.25641025641 1.41025641026 2.58974358974 0.333333333333 + + + 156.0 + + + 36.0 126.0 0.267586206897 29.0 8.0 5.0 + + + 0.0 0.99358974359 + + + 0.19592799256 + + + 0.717948717949 0.161324786325 0.0 0.0 0.606837606838 0.178952991453 + 0.0 0.0 0.0 0.320512820513 0.403311965812 0.0 0.0 0.0 + 0.409733124019 0.336996336996 + + + 0.831140350877 0.90625 0.289473684211 0.0 0.0 0.0 0.0 0.0 + 0.425438596491 0.7 0.326754385965 0.04375 0.0 0.0 0.0 0.0 + 0.561403508772 0.74375 0.364035087719 0.0 0.0 0.0 0.0 0.0 + 0.438596491228 0.672916666667 0.370614035088 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.171052631579 0.65625 0.712719298246 0.05625 0.0 0.0 0.0 + 0.0 0.0 0.43125 0.65350877193 0.21875 0.0 0.0 0.0 0.0 0.0 0.0 + 0.436403508772 0.564583333333 0.219298245614 0.0125 0.0 0.0 0.0 0.0 + 0.0694736842105 0.56 0.637894736842 0.47 + + + 0.408288760531 0.247674191631 0.141255110704 0.0682038005651 + 0.135814053145 0.436941807531 0.168771997686 0.117883693325 + 0.0481206155306 0.0953630592532 0.0721839856785 0.326143122526 + 0.344071060955 0.115462525367 + + + + + + + + + 461 6 94 5 96 3 98 2 93 7 87 15 68 33 65 33 66 37 62 38 62 38 63 37 + 63 37 64 35 66 33 66 33 65 35 65 35 65 38 61 39 61 40 60 39 62 38 62 + 38 62 38 62 38 62 38 62 33 1 4 62 38 62 4 1 1 1 12 1 18 63 3 1 33 62 + 38 62 38 62 32 5 1 63 35 64 38 62 35 1 2 26 1 35 37 26 2 35 37 19 9 + 35 30 1 6 12 16 35 38 2 2 1 4 1 17 36 64 36 64 36 64 36 64 35 48 2 15 + 13 1 3 66 1 17 8 73 3 16 8 47 1 1 8 17 1 17 8 33 4 1 19 35 7 33 25 35 + 6 16 2 16 25 36 5 15 3 16 25 38 2 16 3 16 24 39 2 17 1 17 23 39 3 35 + 23 39 3 35 23 39 3 36 23 37 4 37 22 37 3 36 24 37 2 38 24 34 5 38 23 + 36 3 37 24 36 3 37 24 35 5 36 24 35 6 35 24 36 5 35 24 36 5 35 25 35 + 4 7 2 25 26 32 2 2 4 5 1 1 2 10 3 11 27 32 8 8 1 10 3 7 31 33 7 5 1 2 + 1 11 5 4 31 33 8 17 1 2 1 6 32 34 7 20 1 8 31 32 8 31 29 32 8 8 4 18 + 30 31 9 9 4 10 2 5 30 30 9 25 1 5 30 31 9 29 31 32 8 28 31 35 6 28 31 + 36 5 28 31 36 5 11 1 7 1 9 30 36 5 11 1 7 3 1 1 5 31 3 1 6 3 22 5 10 + 3 4 7 3 33 2 32 1 5 10 3 4 5 5 8 2 23 2 38 10 4 2 7 1 11 2 23 1 40 7 + 27 2 63 8 27 1 64 7 19 1 6 3 64 8 13 6 7 2 64 8 14 4 8 2 65 7 15 3 9 + 1 65 8 1 2 11 2 10 2 64 11 11 1 77 11 89 5 95 5 95 5 96 5 95 5 94 5 + 96 4 96 4 96 4 97 2 99 1 92 0 + + + + 11100.0 + + + 0.900900900901 + + + 4479.0 + + + 0.167671355213 + + + 0.938933140237 + + + 0.503280178431 0.499849804136 0.161175731049 0.114819009133 + -0.017552675773 -0.00451700733861 -0.00824970325865 0.0294746323948 + -0.00834978389304 + + + 100.0 + + + 1.01 1.00900900901 + + + 1.12 1.36 1.0 0.56 0.0 0.864864864865 1.72972972973 1.36936936937 + + + 111.0 + + + 22.0 83.0 0.177319587629 12.0 3.0 4.0 + + + 0.036036036036 0.990990990991 + + + 0.403513513514 + + + 0.0 0.134285714286 0.86 0.381428571429 0.459259259259 + 0.755714285714 0.422857142857 0.104285714286 0.512592592593 + 0.782857142857 0.524285714286 0.0942857142857 0.0 0.365714285714 + 0.872857142857 0.162857142857 + + + 0.0 0.0 0.0 0.178571428571 0.857142857143 0.72619047619 + 0.696428571429 0.410714285714 0.0 0.0 0.0 0.351648351648 + 0.950549450549 0.895604395604 0.401098901099 0.043956043956 + 0.0705128205128 0.464285714286 0.47619047619 0.654761904762 1.0 + 0.690476190476 0.321428571429 0.0178571428571 0.230769230769 1.0 + 0.994505494505 0.868131868132 0.0494505494505 0.0164835164835 + 0.0769230769231 0.010989010989 0.333333333333 1.0 0.994047619048 + 0.797619047619 0.0595238095238 0.0 0.0 0.0 0.230769230769 + 0.478021978022 0.489010989011 0.868131868132 1.0 0.961538461538 + 0.362637362637 0.0 0.0 0.0 0.0 0.779761904762 1.0 1.0 0.35119047619 + 0.0 0.0 0.0 0.00549450549451 0.681318681319 0.862637362637 + 0.648351648352 0.302197802198 0.0 + + + 0.478789394818 0.0501588965769 0.0809426765107 0.108070238765 + 0.069811098249 0.10240719863 0.0224042728768 0.146564444577 + 0.280902582764 0.0276264448393 0.236906543273 0.0892994241454 + 0.0311062545918 0.0239305079174 + + + + + + + + + 4 1 75 1 75 2 22 9 43 5 3 25 43 33 43 33 43 33 43 34 42 34 42 33 43 + 33 42 34 43 33 43 33 42 34 42 34 42 34 41 35 40 36 40 36 40 37 39 37 + 39 38 37 39 37 39 37 39 37 38 39 38 38 37 39 37 39 37 40 35 41 6 3 27 + 40 7 2 27 34 2 4 6 3 27 23 6 3 4 4 36 13 23 4 36 3 2 2 29 3 73 4 72 4 + 72 4 72 3 73 3 73 4 22 4 46 4 21 10 41 4 7 26 39 4 6 28 38 4 6 28 38 + 4 5 29 38 5 2 31 39 4 2 31 39 4 2 31 39 4 2 32 37 6 1 31 39 5 1 31 39 + 5 1 31 37 7 1 31 37 7 1 31 39 5 1 31 39 5 1 31 39 5 1 31 39 5 1 30 40 + 37 39 37 39 38 38 37 39 37 39 37 39 38 38 38 38 37 39 38 38 38 38 38 + 38 38 38 38 38 38 38 37 21 2 4 1 3 45 10 1 3 2 4 56 5 1 2 68 7 69 6 + 73 1 264 0 + + + + 6536.0 + + + 0.883720930233 + + + 3177.0 + + + 0.130311614731 + + + 1.44965517241 + + + 0.502461441612 0.483430539355 0.137993319879 0.132641702813 + 0.0872076773715 -0.000866168938142 -0.00248440709654 + -0.00101201881271 -0.00165692840917 + + + 76.0 + + + 0.263157894737 0.406976744186 + + + 0.368421052632 0.368421052632 0.157894736842 0.157894736842 + 0.093023255814 0.418604651163 0.883720930233 0.232558139535 + + + 86.0 + + + 2.0 21.0 0.214285714286 3.0 7.0 6.0 + + + 0.0 0.953488372093 + + + 0.486077111383 + + + 0.71679197995 0.916267942584 0.187969924812 0.0 0.842105263158 + 0.997607655502 0.157894736842 0.0645933014354 0.0 0.332535885167 + 1.0 0.708133971292 0.0 0.354066985646 0.919799498747 0.576555023923 + + + 0.433333333333 0.707070707071 0.919191919192 0.787878787879 + 0.511111111111 0.0909090909091 0.0 0.0 0.67 1.0 1.0 0.945454545455 + 0.2 0.0 0.0 0.0 0.7 1.0 1.0 1.0 0.1 0.0 0.0 0.0 0.74 0.909090909091 + 0.990909090909 1.0 0.31 0.209090909091 0.136363636364 + 0.109090909091 0.0 0.0 0.0505050505051 0.585858585859 1.0 1.0 1.0 + 0.505050505051 0.0 0.0 0.0 0.690909090909 1.0 1.0 1.0 + 0.336363636364 0.0 0.0 0.0 0.777777777778 1.0 1.0 1.0 + 0.242424242424 0.0 0.0 0.0 0.645454545455 0.83 0.863636363636 0.9 + 0.172727272727 + + + 0.384735855217 0.183822028472 0.0189583620577 0.0099282558973 + 0.0415107872974 0.343759232592 0.0617054404872 0.0343723691151 + 0.0160051154521 0.0132867726839 0.0906474935551 0.196405000753 + 0.0674471160309 0.0426168791847 + + + + + + + + + 20 2 77 2 75 5 74 5 74 6 73 6 73 6 74 1 1 3 73 2 1 3 73 5 74 6 73 2 1 + 2 75 1 1 2 74 2 1 2 74 2 1 1 75 2 1 2 73 6 74 5 74 1 78 1 78 1 315 1 + 78 2 77 2 77 1 395 3 76 5 74 5 74 2 1 2 74 2 1 2 74 2 1 1 75 5 15 3 + 56 5 15 3 56 6 14 3 56 5 14 4 56 6 13 4 56 5 14 5 55 5 14 6 55 3 15 6 + 55 1 19 4 55 1 1 1 17 5 53 6 13 7 51 8 12 10 50 5 15 12 49 3 15 8 53 + 3 16 7 51 4 17 7 52 3 17 11 50 1 15 14 48 2 16 14 33 3 9 5 14 16 32 3 + 3 4 3 5 13 16 31 5 2 4 3 4 1 1 12 16 30 13 1 8 11 18 26 9 1 15 10 19 + 25 11 1 13 10 20 23 10 3 12 11 20 23 10 2 14 9 22 22 9 3 14 9 23 21 9 + 4 13 9 24 20 9 5 12 9 25 19 9 4 14 9 24 19 10 2 15 9 24 18 28 9 24 18 + 27 10 25 18 27 9 5 5 15 18 26 10 5 6 11 1 1 19 26 9 4 8 3 1 2 1 4 21 + 26 21 3 1 2 2 3 21 10 1 15 16 1 4 3 1 2 1 4 21 10 1 15 11 1 4 1 5 5 1 + 4 21 8 4 3 2 9 11 1 4 2 3 6 1 5 20 8 6 12 11 2 1 4 3 6 2 3 35 11 11 3 + 1 1 1 2 3 6 1 5 32 13 10 6 1 3 1 7 1 6 19 5 10 1 2 8 9 25 19 4 14 8 + 10 24 18 5 8 3 4 7 9 6 2 2 2 13 19 5 7 4 3 7 9 6 6 11 22 8 10 7 9 6 6 + 6 3 2 25 5 9 8 9 6 7 4 4 2 27 2 11 7 9 6 8 3 4 3 39 7 10 4 9 4 3 3 24 + 5 11 6 10 3 8 6 3 3 15 3 2 1 1 3 1 2 11 7 9 4 4 1 3 6 1 5 13 15 10 8 + 9 5 2 11 2 4 12 6 2 10 9 7 9 5 2 2 4 5 3 3 12 6 2 8 4 3 5 6 9 5 3 10 + 2 4 12 6 2 10 2 3 5 6 9 5 3 16 15 2 4 2 1 2 8 2 4 6 9 5 4 16 11 5 3 + 27 8 6 3 16 14 2 3 27 8 6 5 13 1 1 7 1 11 1 2 1 2 1 2 17 8 6 6 13 9 3 + 1 3 3 3 9 15 8 6 5 1 1 16 4 4 2 1 4 3 13 11 7 7 8 9 3 1 5 7 5 3 17 7 + 5 9 9 8 3 2 1 11 3 4 18 5 9 5 11 7 1 2 4 2 1 1 1 2 6 4 18 4 10 6 11 3 + 2 1 20 3 19 4 10 5 17 2 21 1 19 4 11 4 13 1 2 3 41 3 12 3 2 2 10 5 43 + 3 10 4 1 6 6 7 41 4 29 3 43 3 31 2 64 3 75 5 74 6 73 6 1 3 49 5 8 6 1 + 5 4 1 50 4 8 1 1 3 2 12 48 4 9 19 47 4 11 3 1 14 46 4 11 3 1 15 45 3 + 10 5 1 16 44 4 9 5 1 18 40 6 10 4 1 18 41 5 12 22 41 4 12 23 39 5 12 + 24 38 5 12 24 38 6 11 25 37 6 11 1 1 23 37 7 11 23 38 6 13 22 39 4 14 + 11 1 10 39 5 13 21 40 5 12 24 38 4 13 1 1 1 1 1 4 3 1 2 1 8 38 4 22 3 + 5 2 1 3 39 4 15 1 1 1 4 3 5 7 38 4 15 3 5 2 4 7 39 4 15 3 4 4 3 8 38 + 4 16 2 4 11 1 3 38 3 18 1 4 11 1 3 38 2 24 10 2 3 39 1 19 1 4 1 1 9 1 + 3 39 2 17 2 6 2 1 1 1 4 2 2 40 2 16 2 6 2 4 3 2 2 39 2 26 1 4 2 3 2 + 39 1 32 1 3 3 73 1 2 3 53 2 9 3 1 1 3 3 1 3 53 3 2 4 1 7 2 7 52 4 1 + 13 1 8 53 3 1 22 53 3 1 22 52 4 2 6 8 7 52 4 3 8 4 8 52 5 3 19 51 6 4 + 18 51 6 5 17 50 8 5 17 48 9 7 15 51 6 8 14 51 6 9 14 50 5 9 14 50 7 9 + 13 50 6 13 10 50 5 15 4 2 2 52 4 16 7 52 4 15 9 51 4 16 8 51 4 18 5 + 53 2 20 3 54 2 21 1 55 2 21 1 56 2 235 2 75 4 74 5 74 5 77 2 38 0 + + + + 14299.0 + + + 0.436464088398 + + + 3366.0 + + + 0.479797979798 + + + 1.16768842409 + + + 0.482597467892 0.538383838384 0.0970594281921 0.408878744262 + 0.0866716195865 -0.00944230082663 0.00997778299706 + -0.00601747985434 0.0290831706815 + + + 79.0 + + + 4.0 1.87845303867 + + + 3.49367088608 3.64556962025 6.27848101266 2.17721518987 + 0.375690607735 2.54143646409 2.96132596685 1.63535911602 + + + 181.0 + + + 38.0 156.0 0.250663129973 46.0 4.0 9.0 + + + 0.0 0.994475138122 + + + 0.235401076998 + + + 0.025730994152 0.459649122807 0.159064327485 0.0 0.147777777778 + 0.406666666667 0.335555555556 0.102173913043 0.0266666666667 + 0.662222222222 0.665555555556 0.386956521739 0.0 0.0311111111111 + 0.165555555556 0.182608695652 + + + 0.0 0.0 0.308080808081 0.666666666667 0.420289855072 0.0 0.0 0.0 + 0.0818181818182 0.0173913043478 0.313636363636 0.54347826087 + 0.213043478261 0.0 0.0 0.0 0.3 0.273913043478 0.477272727273 + 0.786956521739 0.55652173913 0.436363636364 0.14347826087 0.0 0.0 + 0.0173913043478 0.145454545455 0.208695652174 0.252173913043 + 0.0909090909091 0.0782608695652 0.186956521739 0.0 0.104347826087 + 0.859090909091 0.560869565217 0.391304347826 0.845454545455 + 0.365217391304 0.226086956522 0.0 0.0 0.35 0.873913043478 + 0.639130434783 0.8 0.682608695652 0.273913043478 0.0 0.0 + 0.00454545454545 0.117391304348 0.152173913043 0.227272727273 + 0.413043478261 0.317391304348 0.0 0.0 0.0 0.0 0.278260869565 0.0 + 0.0 0.0 + + + 0.626319813711 0.115859535983 0.0174778279381 0.0155088832342 + 0.500447624336 0.258164509576 0.065763283683 0.155341889522 + 0.115448215099 0.00825337718774 0.200802806876 0.28714567594 + 0.130288437992 0.0480825549457 + + + + + + + + + 60 1 167 2 167 2 167 2 138 1 3 14 2 1 8 2 138 26 2 3 138 31 138 31 + 138 31 138 31 138 31 138 32 137 18 2 12 137 18 2 11 138 27 2 1 139 31 + 138 32 138 31 138 31 138 31 138 31 138 31 138 31 110 1 27 31 31 1 77 + 3 26 31 30 3 76 3 26 31 30 4 75 3 26 32 29 5 74 3 26 32 28 7 73 3 26 + 32 28 9 70 4 26 32 28 10 69 6 24 34 24 13 68 6 23 35 25 16 64 7 21 35 + 26 12 68 7 22 6 3 25 26 12 3 1 64 7 21 35 26 12 3 2 63 6 21 11 1 23 + 26 20 60 7 22 34 26 21 60 6 22 34 26 20 61 7 20 35 26 22 59 8 19 35 + 25 24 59 10 2 2 11 36 25 25 58 61 25 26 57 61 25 27 57 33 1 26 25 28 + 56 32 2 26 25 29 55 33 16 12 23 31 54 32 23 6 23 32 53 31 53 32 53 31 + 53 33 53 30 52 36 50 32 51 36 50 32 51 37 49 32 51 38 48 32 50 5 3 32 + 47 32 50 1 1 1 5 32 47 32 58 31 48 32 58 24 2 5 48 32 58 24 2 5 48 32 + 58 23 2 6 48 33 58 22 1 7 48 33 59 28 20 2 27 33 47 5 7 28 19 5 25 3 + 4 6 1 19 48 4 7 28 19 5 27 1 2 8 1 19 48 1 10 28 19 7 24 3 1 8 2 18 + 61 25 19 7 24 33 62 2 3 9 2 1 4 3 19 7 24 33 69 7 8 2 19 7 24 33 63 1 + 5 6 9 2 18 6 1 1 24 34 61 2 5 6 2 1 6 1 23 5 23 34 61 3 4 6 2 2 5 1 + 23 5 23 34 61 4 2 12 3 2 22 6 23 34 61 23 17 12 22 34 60 12 2 10 17 + 11 23 34 59 24 18 11 23 18 1 15 61 1 4 17 17 14 21 34 66 6 4 3 1 3 17 + 15 21 34 58 4 3 7 2 8 17 16 20 34 59 22 17 15 4 3 16 33 61 20 17 14 2 + 1 1 5 15 33 62 19 17 24 14 33 63 18 17 12 1 11 13 3 4 27 64 16 17 13 + 1 12 12 3 16 15 65 15 17 4 1 4 2 17 11 2 24 7 67 13 17 9 5 15 10 2 25 + 6 68 11 17 10 2 1 2 4 1 1 1 8 10 3 25 5 68 11 17 21 2 7 11 2 26 4 75 + 3 18 31 10 2 27 3 70 8 17 33 9 2 27 4 70 1 1 5 17 34 9 1 28 3 71 6 16 + 14 1 21 6 4 26 4 72 5 15 14 2 22 5 4 26 4 73 4 14 14 4 20 7 1 29 2 75 + 2 15 14 6 17 38 3 91 37 38 3 91 19 1 16 39 3 90 1 1 6 2 9 2 16 40 2 + 89 2 2 5 2 5 8 14 131 1 3 10 10 13 135 11 7 16 132 15 6 16 132 15 8 + 13 136 12 13 1 3 4 137 2 4 5 165 4 12 2 152 1 14 2 144 2 20 3 4 1 141 + 1 20 2 3 2 142 5 14 3 2 3 143 3 15 7 145 2 15 7 161 8 165 4 154 2 10 + 3 154 1 11 2 331 2 167 3 166 2 167 3 165 6 163 6 163 5 164 5 165 4 + 164 1 1 3 166 2 168 1 168 1 13 0 + + + + 21632.0 + + + 1.3203125 + + + 5146.0 + + + 0.237077341625 + + + 1.50886757598 + + + 0.43226708678 0.438700190653 0.478787810942 0.128439039579 + 0.124371719938 0.099729537946 0.0251686533067 0.0946775673108 + 0.00164117025997 + + + 169.0 + + + 0.899408284024 1.8515625 + + + 0.733727810651 0.165680473373 1.18343195266 1.51479289941 0.78125 + 2.125 3.71875 0.78125 + + + 128.0 + + + 21.0 114.0 0.236641221374 20.0 0.0 8.0 + + + 0.0 0.9921875 + + + 0.237888313609 + + + 0.261160714286 0.698660714286 0.511904761905 0.0014880952381 + 0.407738095238 0.219494047619 0.0 0.0 0.0505952380952 + 0.665922619048 0.293898809524 0.0 0.0 0.0138081395349 + 0.488372093023 0.199127906977 + + + 0.0 0.0952380952381 0.580357142857 0.824404761905 0.827380952381 + 0.16369047619 0.0 0.0 0.419642857143 0.529761904762 0.714285714286 + 0.675595238095 0.758928571429 0.297619047619 0.00595238095238 0.0 + 0.64880952381 0.970238095238 0.860119047619 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0119047619048 0.014880952381 0.00297619047619 0.0 0.0 0.0 0.0 0.0 + 0.199404761905 0.761904761905 0.693452380952 0.229166666667 + 0.0267857142857 0.0 0.0 0.0 0.00297619047619 0.357142857143 + 0.85119047619 0.595238095238 0.324404761905 0.0 0.0 0.0 0.0 0.0 + 0.0505952380952 0.369047619048 0.627976190476 0.300595238095 + 0.00595238095238 0.0 0.0 0.0 0.00568181818182 0.173295454545 + 0.784090909091 0.34375 0.142045454545 + + + 0.461975967131 0.174406097463 0.166958986262 0.100007926788 + 0.11872490509 0.342658104011 0.0846979656759 0.229778402048 + 0.120123854835 0.0931077971905 0.20106011166 0.313436317461 + 0.11387529362 0.0676113302724 + + + + + + + + + 131 1 237 2 237 2 236 3 236 3 231 8 228 11 215 2 2 8 1 11 209 30 205 + 33 205 35 204 35 205 34 204 18 3 14 204 18 4 13 204 18 3 14 205 3 2 5 + 1 6 1 16 211 28 205 3 2 29 114 2 89 34 113 5 89 15 1 16 113 6 88 15 1 + 16 113 6 1 1 85 34 108 2 1 12 81 35 108 15 81 35 108 16 80 35 108 16 + 80 35 108 17 79 35 108 17 79 35 27 5 5 1 70 16 81 34 26 11 71 13 1 1 + 82 35 25 10 72 15 16 2 64 35 25 9 73 16 6 2 8 3 61 36 25 11 71 16 5 6 + 6 4 59 37 23 13 70 16 6 7 68 36 23 14 69 17 8 6 9 2 55 35 24 14 69 19 + 3 1 2 10 5 7 50 35 24 15 68 36 5 7 48 30 1 2 26 16 1 1 65 22 2 1 3 1 + 2 4 63 19 1 1 2 4 31 20 62 22 4 1 5 1 67 18 1 9 2 4 23 20 62 21 79 34 + 23 23 60 21 33 9 36 34 23 25 58 21 17 3 5 20 33 34 23 27 56 22 14 9 2 + 23 30 33 22 28 58 21 26 25 25 34 22 29 57 21 28 28 20 34 22 30 56 22 + 24 34 17 34 22 32 54 30 18 36 14 33 22 34 52 32 15 4 1 33 12 34 21 36 + 51 22 7 4 14 43 7 26 29 37 50 25 17 20 4 28 1 20 37 37 50 22 1 10 7 + 22 4 39 46 38 51 20 3 34 1 1 7 34 50 37 52 21 1 35 9 33 51 37 52 20 4 + 30 12 33 51 29 3 6 51 20 4 30 13 32 51 28 4 5 52 20 5 26 25 23 52 28 + 4 4 52 20 7 6 4 11 8 3 18 2 1 19 53 28 3 2 54 20 8 4 7 13 4 5 19 18 + 56 25 25 3 32 20 9 2 8 16 25 19 58 22 24 5 31 21 2 1 1 4 12 17 22 20 + 59 21 22 7 30 20 3 2 19 18 19 19 60 20 22 8 29 21 26 18 15 20 61 18 + 22 10 28 32 18 18 13 19 61 18 4 2 16 11 28 32 20 20 8 18 62 14 1 3 4 + 2 18 10 27 4 6 24 22 19 4 20 61 13 9 2 16 1 1 10 27 4 7 8 8 6 27 40 + 60 14 8 1 16 12 28 3 10 4 11 6 3 5 21 37 59 15 25 12 28 3 11 2 15 5 4 + 4 22 34 58 19 22 12 1 1 26 3 32 4 5 5 20 28 62 19 3 2 15 13 1 1 26 3 + 33 7 3 3 24 22 63 21 1 3 15 15 26 4 36 2 35 19 1 1 58 27 15 12 1 2 26 + 4 75 22 53 29 15 14 27 4 75 3 3 16 52 30 14 15 7 3 17 4 75 4 1 17 53 + 28 15 15 5 7 15 4 76 21 55 25 16 16 1 10 15 4 75 22 57 24 15 28 14 4 + 75 22 59 22 15 29 13 4 41 3 32 21 60 21 14 30 13 4 43 14 19 21 61 19 + 15 31 13 3 46 4 3 2 21 22 61 18 15 33 11 3 46 9 11 4 1 27 62 17 15 33 + 11 3 46 12 2 38 63 16 14 35 10 3 47 51 65 14 14 36 9 3 50 48 70 4 3 1 + 15 37 8 3 55 43 72 2 19 37 8 3 58 40 70 8 15 38 8 2 63 35 70 9 13 39 + 8 2 67 29 1 2 69 8 13 41 7 3 70 1 2 1 9 15 69 8 13 41 7 3 83 15 70 7 + 13 40 8 3 82 16 72 5 13 40 8 3 81 18 89 6 4 29 9 3 84 16 89 4 8 26 10 + 2 85 14 92 3 10 22 11 2 87 11 93 8 3 1 1 22 11 2 88 11 91 36 10 3 93 + 6 89 37 10 5 95 3 89 16 4 17 11 4 187 15 5 17 11 4 190 3 2 9 4 16 12 + 2 196 10 3 10 2 3 13 3 196 8 4 11 1 3 13 4 200 3 4 15 13 4 191 4 5 3 + 5 14 12 5 192 5 4 1 6 2 2 9 14 3 208 14 14 4 207 14 14 4 215 6 15 4 + 218 2 15 4 235 4 235 4 212 3 19 5 212 3 19 5 212 3 20 4 212 4 20 3 + 212 4 20 3 212 5 19 4 210 6 19 4 210 7 17 5 210 7 18 5 209 7 18 5 209 + 7 18 4 211 6 19 4 210 6 19 1 1 2 210 5 20 4 214 1 20 4 235 4 236 3 + 236 3 237 2 224 0 + + + + 31548.0 + + + 1.81060606061 + + + 7280.0 + + + 0.268269230769 + + + 1.33942169605 + + + 0.488733955121 0.448936750273 0.654021454598 0.0873845467842 + 0.0771180666371 0.00727757894163 0.0123752503083 0.0797239107114 + 0.00391595505746 + + + 239.0 + + + 1.41841004184 2.69696969697 + + + 2.42677824268 1.77405857741 0.384937238494 1.02092050209 + 1.12121212121 4.39393939394 4.06060606061 1.21212121212 + + + 132.0 + + + 22.0 118.0 0.267489711934 41.0 4.0 7.0 + + + 0.0 0.992424242424 + + + 0.230759477621 + + + 0.0939907550077 0.608628659476 0.0986132511556 0.065228556754 + 0.25404040404 0.512626262626 0.421717171717 0.0 0.215656565657 + 0.452525252525 0.139393939394 0.0 0.0 0.128787878788 0.563131313131 + 0.136868686869 + + + 0.0 0.361054766734 0.771551724138 0.754563894523 0.155172413793 + 0.0973630831643 0.135775862069 0.129817444219 0.0 0.00980392156863 + 0.291666666667 0.617647058824 0.135416666667 0.0137254901961 0.0 + 0.0 0.0 0.0 0.297916666667 0.574509803922 0.335416666667 + 0.327450980392 0.0 0.0 0.35 0.656862745098 0.641666666667 + 0.53137254902 0.533333333333 0.492156862745 0.0 0.0 0.302083333333 + 0.460784313725 0.470833333333 0.0137254901961 0.0 0.0 0.0 0.0 0.0 + 0.0921568627451 0.6625 0.676470588235 0.51875 0.0529411764706 0.0 + 0.0 0.0 0.0 0.122916666667 0.3 0.439583333333 0.405882352941 + 0.0645833333333 0.0 0.0 0.0 0.0 0.0843137254902 0.495833333333 0.9 + 0.364583333333 0.127450980392 + + + 0.367808275474 0.23252363413 0.0876233664838 0.080616458081 + 0.24253533107 0.251984171398 0.171367909074 0.147777244847 + 0.0438232752074 0.0879977234631 0.290175273007 0.111764441499 + 0.300922891971 0.127898399818 + + + + + + + + + 37 1 40 2 38 3 34 7 6 6 4 3 3 19 4 36 5 36 5 37 4 37 4 37 4 37 4 37 4 + 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 3 38 2 41 1 39 2 39 2 39 2 39 3 + 37 4 37 4 37 4 37 4 37 4 37 4 38 3 38 3 38 4 37 4 37 4 37 4 37 4 36 5 + 36 5 36 5 37 4 37 4 37 10 7 3 7 1 13 38 3 39 1 40 1 2 0 + + + + 2009.0 + + + 0.836734693878 + + + 1564.0 + + + 0.125959079284 + + + 1.01348314607 + + + 0.513027493606 0.507632672634 0.0752187582615 0.0932347180862 + 0.00181530481492 -0.000515060644891 0.00184479252986 + -0.000280279309337 -3.43916842735e-05 + + + 41.0 + + + 0.0731707317073 0.0816326530612 + + + 0.0 0.0 0.0 0.292682926829 0.163265306122 0.0 0.0 0.163265306122 + + + 49.0 + + + 0.0 6.0 0.134831460674 0.0 3.0 1.0 + + + 0.0 0.979591836735 + + + 0.778496764559 + + + 0.516666666667 0.841666666667 0.808333333333 0.492307692308 + 0.608333333333 1.0 1.0 0.746153846154 0.666666666667 1.0 1.0 + 0.761538461538 0.628787878788 0.848484848485 0.863636363636 + 0.713286713287 + + + 0.133333333333 0.6 0.6 0.766666666667 0.666666666667 0.566666666667 + 0.4 0.171428571429 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 + 0.457142857143 0.2 1.0 1.0 1.0 1.0 1.0 1.0 0.571428571429 + 0.233333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.485714285714 + 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.571428571429 + 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.542857142857 + 0.433333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.571428571429 + 0.472222222222 0.638888888889 0.666666666667 0.777777777778 + 0.722222222222 0.777777777778 0.75 0.595238095238 + + + 0.384868207486 0.0310966297914 0.0123108437489 0.018327817712 + 0.0526624241711 0.0373226669402 0.0815825314261 0.00672410160729 + 0.00791297295044 0.00399354401773 0.163447205512 0.0202963062132 + 0.118603834318 0.0373572008914 + + + + + + + + + 31 2 72 2 71 1 72 3 69 4 31 2 36 5 28 5 35 4 30 3 37 1 33 1 38 1 33 1 + 38 1 33 2 37 1 33 1 38 3 31 1 39 6 27 2 38 12 20 3 38 18 13 4 38 35 + 38 35 38 35 38 35 38 35 38 35 38 35 38 36 37 36 38 35 5 1 32 35 5 1 + 32 35 5 1 32 35 5 1 32 35 5 2 31 35 5 2 31 35 5 2 31 35 5 2 31 35 6 1 + 31 36 4 3 30 36 4 3 30 35 5 3 30 5 5 25 5 3 31 35 4 3 31 35 5 2 31 7 + 1 27 5 3 33 3 4 25 4 4 40 25 5 3 40 25 5 3 39 26 5 7 3 3 20 2 6 28 4 + 18 3 1 10 6 1 29 5 30 1 5 4 28 5 68 5 68 5 69 4 69 4 69 4 69 4 69 4 + 69 4 69 4 37 9 23 4 37 15 17 4 37 27 5 4 37 27 5 3 38 28 4 3 38 29 3 + 1 1 1 39 27 5 1 41 26 4 2 41 27 3 3 39 28 4 2 40 27 4 2 39 28 4 2 41 + 25 5 3 39 28 4 2 38 29 3 3 39 29 2 4 38 28 3 4 38 29 2 4 38 29 2 5 37 + 29 2 5 37 29 2 5 37 36 37 36 38 35 38 34 39 35 38 35 38 36 37 36 37 + 36 38 35 4 10 23 36 3 22 12 36 3 26 8 37 2 28 6 37 2 29 5 37 2 30 4 + 37 2 31 3 37 2 31 3 37 2 32 2 71 3 71 2 71 2 71 2 71 2 72 1 72 1 30 0 + + + + + 7519.0 + + + 0.708737864078 + + + 3278.0 + + + 0.17754728493 + + + 0.849857459614 + + + 0.498805165751 0.504707557214 0.116561995019 0.137416210786 + -0.0618483971037 -0.000513083863121 0.00275311272803 + -0.00039674427561 -0.00431100208856 + + + 73.0 + + + 0.712328767123 0.699029126214 + + + 0.219178082192 0.547945205479 1.42465753425 0.602739726027 + 0.427184466019 1.16504854369 0.815533980583 0.349514563107 + + + 103.0 + + + 5.0 26.0 0.216828478964 5.0 5.0 5.0 + + + 0.0 0.990291262136 + + + 0.43596222902 + + + 0.0 0.318376068376 0.897435897436 0.34188034188 0.146666666667 + 0.260683760684 1.0 0.438034188034 0.46 0.895299145299 + 0.397435897436 0.241452991453 0.353684210526 0.827935222672 + 0.376518218623 0.0 + + + 0.0 0.0 0.213675213675 0.57264957265 0.820512820513 0.769230769231 + 0.495726495726 0.102564102564 0.0 0.0 0.0 0.487179487179 1.0 1.0 + 0.769230769231 0.0 0.0 0.0 0.0 0.410256410256 1.0 1.0 + 0.837606837607 0.0 0.259259259259 0.324786324786 0.213675213675 + 0.418803418803 1.0 1.0 0.91452991453 0.0 0.0 0.948717948718 + 0.957264957265 0.623931623932 0.615384615385 0.538461538462 + 0.65811965812 0.307692307692 0.0 0.820512820513 1.0 1.0 + 0.435897435897 0.0 0.0 0.0 0.0 0.769230769231 1.0 1.0 + 0.538461538462 0.0 0.0 0.0 0.133333333333 0.476923076923 + 0.623076923077 0.723076923077 0.638461538462 0.307692307692 0.0 0.0 + + + 0.470966045774 0.119517255294 0.0198464692875 0.0118148561371 + 0.0617232570549 0.281195070275 0.0338876799553 0.0301951929265 + 0.0172044574769 0.00920129687611 0.17967237591 0.269850991636 + 0.0671163190698 0.0295698512218 + + + + + + + + + 2 2 140 2 140 2 140 2 140 2 33 1 106 2 33 1 107 1 28 2 2 2 107 1 18 3 + 7 3 1 2 107 2 10 3 1 7 1 11 107 6 2 27 107 35 107 35 107 35 107 35 + 107 36 106 35 107 35 107 35 107 3 1 31 107 35 107 29 1 6 106 28 3 5 + 105 37 105 37 104 39 102 41 101 40 103 39 104 38 103 39 103 40 102 39 + 105 36 106 36 106 36 107 35 107 35 106 36 107 35 107 35 106 36 106 36 + 107 35 107 35 107 35 106 36 106 36 106 36 107 18 1 2 12 2 107 14 128 + 1 485 3 139 4 137 7 135 10 132 11 131 10 131 12 129 15 128 14 128 14 + 128 11 1 2 127 12 1 3 127 16 125 17 125 17 4 3 117 19 3 3 117 25 117 + 29 112 32 110 33 109 33 109 33 109 35 106 36 106 36 106 35 108 34 110 + 32 111 31 16 3 93 11 1 17 16 4 92 11 3 16 16 7 85 15 1 18 15 9 83 6 2 + 28 13 11 80 8 5 26 10 20 74 7 1 29 11 18 76 6 3 27 13 13 81 4 3 28 13 + 19 74 5 3 22 1 5 12 21 85 3 5 9 2 5 11 23 93 2 2 5 1 5 12 15 2 5 93 2 + 2 4 3 4 12 15 2 6 91 9 3 3 13 15 3 5 92 8 3 2 14 14 2 7 92 2 2 4 3 2 + 14 25 95 3 3 2 15 22 2 1 95 2 19 16 2 9 94 2 18 29 92 4 1 2 14 31 90 + 4 1 2 14 32 88 8 14 32 89 7 13 34 87 7 14 36 85 7 14 37 83 8 13 39 82 + 8 13 39 80 10 13 11 1 29 80 8 13 41 80 8 13 7 1 33 81 7 13 4 4 33 85 + 2 14 2 1 1 7 23 4 2 104 2 6 20 115 1 5 20 116 1 5 21 114 2 6 22 112 2 + 7 22 112 1 7 23 3 1 116 27 116 26 118 2 1 21 122 20 116 3 3 20 115 5 + 2 11 6 3 114 6 2 12 5 3 115 4 5 5 10 2 117 3 2 1 1 6 4 2 4 2 118 20 2 + 1 119 23 118 24 119 12 1 11 122 2 1 5 2 10 113 4 6 7 1 10 116 25 117 + 2 2 21 121 21 121 21 124 17 125 17 127 15 127 15 130 12 132 9 134 8 + 135 7 136 6 137 6 137 5 138 3 139 4 138 3 140 2 141 1 7 0 + + + + 21868.0 + + + 0.922077922078 + + + 4052.0 + + + 0.225074037512 + + + 2.36900584795 + + + 0.507615537026 0.474511094336 0.486914371352 0.380306528447 + 0.401622475256 -0.0270654366421 -0.013937102412 -0.0191349097937 + -0.0104876104943 + + + 142.0 + + + 0.816901408451 0.733766233766 + + + 0.253521126761 0.422535211268 0.732394366197 1.85915492958 + 0.363636363636 0.155844155844 1.79220779221 0.623376623377 + + + 154.0 + + + 25.0 74.0 0.252941176471 12.0 14.0 3.0 + + + 0.0 0.993506493506 + + + 0.18529357966 + + + 0.736842105263 0.25641025641 0.0 0.0 0.0913742690058 0.19301994302 + 0.118421052632 0.0 0.0 0.168498168498 0.412030075188 + 0.0043956043956 0.0 0.0 0.554093567251 0.44301994302 + + + 0.479876160991 0.876160990712 0.501547987616 0.0 0.0 0.0 0.0 0.0 + 0.59649122807 0.988304093567 0.549707602339 0.0 0.0 0.0 0.0 0.0 + 0.116959064327 0.248538011696 0.122807017544 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0643274853801 0.575 0.473684210526 0.0 0.0 0.0 0.0 0.0 + 0.0061919504644 0.588235294118 0.84520123839 0.312693498452 0.0 0.0 + 0.0 0.0 0.0 0.0777777777778 0.298245614035 0.210526315789 + 0.0175438596491 0.0 0.0 0.0 0.0 0.0 0.576023391813 0.93567251462 + 0.5 0.15 0.0 0.0 0.0 0.0 0.0409356725146 0.663742690058 + 0.675438596491 0.461111111111 + + + 0.319965183307 0.296639819349 0.045863658271 0.0148636239698 + 0.00547169967058 0.477128280937 0.217208551029 0.182125883243 + 0.0561063283968 0.0197133667942 0.256745917157 0.124596104371 + 0.461768725357 0.144390822156 + + + + + + + + + 1 1 3 1 3 1 3 1 3 1 3 1 3 1 3 2 3 8 1 1 1 1 1 1 3 1 + + + + 52.0 + + + 0.307692307692 + + + 21.0 + + + 1.95238095238 + + + 0.980769230769 + + + 0.507936507937 0.599206349206 0.0436237987258 0.54702515927 + 0.0587409567001 0.00383517540956 -0.0171359856216 0.0178630756349 + -0.274130887847 + + + 4.0 + + + 0.25 0.153846153846 + + + 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.615384615385 + + + 13.0 + + + 3.0 0.0 0.1875 0.0 5.0 1.0 + + + 0.0 0.923076923077 + + + 0.403846153846 + + + 0.0 0.0 0.0 0.5 1.0 1.0 0.666666666667 0.75 0.0 0.0 0.666666666667 + 0.25 0.0 0.0 0.333333333333 1.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.0 1.0 0.5 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.5 0.0 0.0 + 0.0 0.0 0.5 1.0 0.5 0.0 0.0 0.0 0.0 0.0 0.5 1.0 0.5 0.0 0.0 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 + + + 0.508149941998 0.195507926668 0.244316920541 0.105473024184 + 0.472618529631 0.266042526448 0.161193107042 0.205375808408 + 0.0399111882234 0.146015085115 0.187582018992 0.403879719378 + 0.122979038151 0.161873248683 + + + + + + + + + 34 3 30 2 74 3 28 5 73 8 16 11 74 35 75 34 74 36 73 36 73 36 74 34 75 + 34 75 34 75 34 75 34 75 34 75 34 75 35 74 34 75 34 75 34 75 35 74 35 + 74 35 75 34 75 34 75 1 1 1 2 25 79 34 75 34 75 34 75 34 75 34 75 34 + 75 34 75 34 75 34 76 33 75 34 75 34 75 34 75 34 75 35 75 36 73 43 4 + 14 5 1 42 67 42 65 1 1 41 21 3 44 25 84 7 38 27 37 7 37 29 36 7 37 29 + 36 7 37 29 35 8 37 30 35 7 37 29 35 8 37 29 36 7 37 29 36 7 38 28 37 + 6 39 25 43 1 40 26 39 4 40 25 40 4 39 26 40 3 40 26 40 4 40 25 40 3 + 41 27 35 1 2 6 37 28 34 10 37 29 36 7 37 29 36 7 37 29 36 7 37 28 37 + 7 4 1 2 1 29 29 36 7 37 29 36 7 37 29 36 7 4 1 32 29 36 7 37 29 37 6 + 37 29 36 7 38 28 36 7 37 29 36 7 38 28 37 7 37 28 37 7 37 28 37 7 37 + 28 37 7 37 28 37 7 37 28 37 7 37 28 37 7 37 28 37 7 37 28 22 1 14 7 + 37 28 3 4 2 1 4 13 1 3 6 7 37 28 2 31 4 8 36 29 1 42 37 72 20 2 1 2 + 13 72 4 1 2 24 6 72 2 30 4 73 2 31 3 73 2 32 2 73 1 33 2 107 2 108 1 + 108 1 68 0 + + + + 10573.0 + + + 1.12371134021 + + + 4737.0 + + + 0.124973611991 + + + 0.956692913386 + + + 0.488240721194 0.539608401942 0.176243410231 0.113203169536 + -0.00740823877996 0.00423173621379 -0.00449715734102 + 0.0290217235395 -0.0171151845157 + + + 109.0 + + + 0.385321100917 0.701030927835 + + + 0.183486238532 0.51376146789 0.550458715596 0.293577981651 + 0.123711340206 0.329896907216 1.15463917526 1.19587628866 + + + 97.0 + + + 13.0 38.0 0.211143695015 3.0 3.0 3.0 + + + 0.0 0.989690721649 + + + 0.448027995838 + + + 0.0 0.087962962963 0.918209876543 0.6 0.640432098765 0.651234567901 + 0.479938271605 0.379259259259 0.527777777778 0.663580246914 + 0.484567901235 0.228148148148 0.0 0.22619047619 0.855654761905 + 0.441428571429 + + + 0.0 0.0 0.0 0.141025641026 0.878205128205 0.782051282051 + 0.717948717949 0.337278106509 0.0 0.0 0.0 0.208333333333 1.0 1.0 + 1.0 0.373626373626 0.391025641026 0.371794871795 0.288461538462 + 0.448717948718 0.961538461538 1.0 1.0 0.443786982249 0.761904761905 + 1.0 0.994047619048 0.833333333333 0.0178571428571 0.0119047619048 + 0.0595238095238 0.0824175824176 0.833333333333 1.0 0.988095238095 + 0.821428571429 0.0535714285714 0.0119047619048 0.0 0.0 + 0.102564102564 0.115384615385 0.141025641026 0.666666666667 + 0.99358974359 0.948717948718 0.923076923077 0.0591715976331 0.0 0.0 + 0.0 0.565476190476 1.0 1.0 0.994047619048 0.010989010989 0.0 0.0 + 0.0 0.339285714286 0.714285714286 0.708333333333 0.767857142857 + 0.0604395604396 + + + 0.309200771599 0.072234604094 0.0574308729327 0.169868090292 + 0.165111785217 0.102718680549 0.0162097641994 0.101742605473 + 0.322466093257 0.0244384499329 0.181545815201 0.0233192408618 + 0.0976413710275 0.0469605849778 + + + + + + + + + 2 1 6 2 6 2 6 2 6 2 6 2 5 3 6 2 5 4 4 4 4 3 5 3 5 3 5 3 5 3 5 4 4 3 5 + 3 5 3 5 3 5 3 5 3 5 3 5 4 4 4 4 3 5 4 4 4 5 2 5 4 4 3 6 2 5 4 4 3 5 3 + 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 5 3 6 + 2 6 3 5 3 4 4 4 4 4 4 5 3 5 3 5 3 4 4 4 4 4 3 6 2 5 3 5 3 6 2 6 2 6 2 + 5 3 5 2 7 1 7 1 7 1 6 2 6 2 6 2 6 2 7 1 7 1 7 1 6 2 6 2 6 2 7 1 7 2 5 + 3 5 4 4 3 5 3 5 3 6 2 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 6 2 + 5 3 5 3 5 3 5 3 5 3 6 2 6 2 6 2 5 3 5 3 6 2 6 2 5 3 5 3 5 3 5 3 5 3 6 + 2 5 3 5 3 5 3 6 2 5 3 5 3 5 4 5 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 + 7 1 7 1 7 1 7 2 6 2 6 2 6 1 7 1 7 2 5 4 5 2 6 3 5 3 5 2 6 3 5 2 6 2 6 + 2 6 2 7 1 7 1 7 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 7 1 7 1 7 1 7 1 7 2 + 6 2 6 2 6 2 6 2 6 2 6 3 5 2 6 2 6 2 7 1 7 2 6 2 6 2 6 2 6 2 6 2 6 3 5 + 3 5 2 7 1 7 1 7 2 6 2 6 2 6 2 + + + + 1600.0 + + + 0.04 + + + 500.0 + + + 0.952 + + + 1.05667627281 + + + 0.266571428571 0.452492462312 0.005016088 6.342775768 0.109980328 + 0.000392889647023 0.283492558975 0.0111904619368 3.80357187729 + + + 8.0 + + + 4.25 0.0 + + + 8.5 6.0 1.5 1.0 0.0 0.0 0.0 0.0 + + + 200.0 + + + 4.0 35.0 0.201923076923 0.0 41.0 1.0 + + + 0.0 0.995 + + + 0.3125 + + + 0.9 0.81 0.63 0.0 0.66 0.46 0.56 0.29 0.0 0.0 0.01 0.46 0.0 0.0 0.0 + 0.22 + + + 0.72 0.92 0.48 0.76 0.72 0.16 0.0 0.0 0.96 1.0 1.0 1.0 1.0 0.64 0.0 + 0.0 1.0 1.0 0.84 0.56 1.0 1.0 0.36 0.0 0.2 0.44 0.4 0.04 0.0 0.24 + 0.8 0.0 0.0 0.0 0.0 0.0 0.0 0.04 0.68 0.36 0.0 0.0 0.0 0.0 0.0 0.0 + 0.04 0.76 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.64 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.24 + + + 0.455468490234 0.249486026388 0.122184075989 0.0411469081624 + 0.324397851432 0.428021235415 0.204512338858 0.0204589875598 + 0.114705406568 0.0725706355966 0.301974575316 0.412969547941 + 0.371044270483 0.176392346255 + + + + + + + + + 292 2 82 3 44 1 36 3 44 2 34 4 43 3 34 4 43 3 34 4 44 2 33 5 44 2 26 + 12 44 2 12 6 3 17 44 20 3 17 44 19 4 17 44 19 3 18 44 19 3 19 43 19 3 + 19 42 21 1 20 42 21 1 20 42 20 2 20 42 20 2 20 43 41 43 41 43 41 43 + 41 43 41 42 42 42 42 42 42 42 42 42 20 1 21 42 20 1 21 42 42 41 43 41 + 43 40 44 40 44 41 43 41 43 31 2 9 42 30 3 8 43 29 5 7 44 29 4 7 43 30 + 4 7 22 2 18 31 4 8 17 6 18 30 5 8 17 5 20 18 16 8 17 6 22 2 29 8 19 3 + 54 8 21 1 54 9 21 1 53 9 20 3 52 10 16 5 53 10 16 4 54 9 17 4 3 6 46 + 9 16 17 42 9 5 29 41 9 5 29 41 10 4 30 40 10 4 30 40 10 4 31 38 11 4 + 31 38 12 3 31 38 12 3 31 38 12 3 31 38 12 3 31 38 12 3 31 38 13 2 31 + 36 15 2 31 32 19 1 32 36 15 2 31 38 13 2 31 4 3 31 13 3 30 39 45 39 + 45 39 45 39 45 39 44 40 44 40 44 40 44 39 46 38 46 38 46 38 46 39 45 + 39 45 39 45 39 45 39 45 40 43 41 43 8 2 9 7 16 42 8 3 7 8 16 42 17 8 + 17 42 8 2 2 13 17 42 7 28 7 43 4 31 5 45 3 32 3 81 4 80 5 79 4 80 5 + 78 7 78 6 78 6 77 7 78 6 78 6 78 6 78 6 78 6 78 7 77 7 77 7 77 7 78 6 + 78 7 77 7 77 7 78 5 79 5 79 5 80 3 81 4 80 4 80 4 80 4 81 3 81 3 82 2 + 1 0 + + + + 10836.0 + + + 0.651162790698 + + + 3859.0 + + + 0.158849442861 + + + 1.34503334503 + + + 0.513326693662 0.419593401788 0.137133468611 0.172649638133 + 0.106218421451 -0.00428693642455 0.0140080602236 0.00462991104072 + 0.0228515550217 + + + 84.0 + + + 0.52380952381 0.53488372093 + + + 0.380952380952 0.571428571429 0.380952380952 0.761904761905 + 0.589147286822 0.961240310078 0.558139534884 0.031007751938 + + + 129.0 + + + 4.0 31.0 0.185286103542 4.0 4.0 3.0 + + + 0.0232558139535 0.992248062016 + + + 0.356127722407 + + + 0.578869047619 0.691964285714 0.0267857142857 0.0 0.660714285714 + 0.675595238095 0.110119047619 0.001443001443 0.0669642857143 + 0.60119047619 0.886904761905 0.002886002886 0.0 0.473214285714 + 0.706845238095 0.251082251082 + + + 0.26875 0.7625 0.875 0.5125 0.1125 0.0 0.0 0.0 0.272727272727 1.0 + 0.965909090909 0.414772727273 0.0 0.0 0.0 0.0 0.2125 0.93125 0.9 + 0.25625 0.0 0.0 0.0 0.0 0.482954545455 1.0 1.0 0.528409090909 + 0.204545454545 0.215909090909 0.00568181818182 0.0 0.08125 0.2 + 0.28125 1.0 0.98125 0.8625 0.0125 0.0 0.0 0.0 0.130681818182 1.0 + 1.0 0.710227272727 0.0 0.0 0.0 0.0 0.1875 1.0 0.99375 0.8375 0.0 + 0.0 0.0 0.0 0.238636363636 0.488636363636 0.448863636364 + 0.585227272727 0.517045454545 0.44385026738 + + + 0.638411319909 0.110034058338 0.043569423699 0.0235010940298 + 0.475874725459 0.298118051746 0.0453374889704 0.0399370277717 + 0.0202548777909 0.0309420555382 0.0951100726383 0.419543132806 + 0.095001365951 0.0326515156292 + + + + + + + + + 68 2 106 2 106 2 106 2 106 2 77 2 27 2 72 13 8 4 8 2 73 28 2 6 72 36 + 72 36 72 36 72 36 72 36 72 36 73 35 73 35 73 35 73 35 73 35 73 35 73 + 35 73 35 73 35 73 35 73 35 40 1 32 36 39 1 32 36 40 2 29 38 37 4 28 + 39 37 3 30 38 36 4 30 38 36 4 30 38 38 2 25 44 37 4 27 40 36 5 22 44 + 38 2 32 36 38 2 32 35 39 2 32 21 1 12 41 1 32 34 41 1 32 34 41 1 33 6 + 3 24 75 7 1 25 75 32 43 1 31 34 42 5 27 34 42 10 1 11 1 43 42 66 42 + 17 1 20 1 27 42 35 29 1 43 35 29 1 43 35 30 1 42 35 73 35 73 35 73 5 + 1 29 73 35 73 35 73 35 74 34 74 34 74 34 74 35 73 35 73 35 73 35 73 + 35 73 4 5 26 73 4 4 27 74 34 74 34 74 34 74 34 73 36 73 35 73 35 52 + 11 10 35 41 23 9 35 33 30 11 34 28 35 11 34 28 35 11 35 27 35 11 35 + 27 35 11 35 27 35 11 35 27 35 11 35 27 36 10 2 2 4 3 24 27 36 10 1 6 + 1 8 5 1 13 27 36 10 1 33 1 27 36 10 1 61 36 10 1 61 28 3 5 72 37 70 + 39 68 41 67 41 66 42 67 40 68 40 68 40 68 40 70 38 70 37 71 37 71 37 + 71 37 71 37 71 36 72 36 72 36 72 36 72 36 72 37 71 37 71 38 71 36 72 + 36 72 36 72 26 1 9 72 14 3 1 10 3 3 2 72 4 31 1 72 3 32 1 72 1 37 0 + + + + 12960.0 + + + 0.9 + + + 4466.0 + + + 0.147559337215 + + + 1.35549952726 + + + 0.507355680092 0.523053735601 0.183311476327 0.215651882098 + 0.0876658456923 0.00277424393969 0.036952423718 0.0396995408158 + -0.00981680845148 + + + 108.0 + + + 0.472222222222 0.525 + + + 0.481481481481 0.777777777778 0.407407407407 0.222222222222 0.3 0.8 + 0.8 0.2 + + + 120.0 + + + 6.0 40.0 0.195402298851 8.0 2.0 2.0 + + + 0.0 0.991666666667 + + + 0.344598765432 + + + 0.0135802469136 0.46049382716 0.643209876543 0.0 0.571604938272 + 0.628395061728 0.441975308642 0.0 0.483950617284 0.375308641975 + 0.201234567901 0.423456790123 0.0 0.0 0.445679012346 0.824691358025 + + + 0.0 0.0564102564103 0.174358974359 0.676923076923 0.54358974359 + 0.328205128205 0.0 0.0 0.0 0.0 0.0 0.985714285714 0.995238095238 + 0.67619047619 0.0 0.0 0.276923076923 0.405128205128 0.405128205128 + 0.938461538462 0.994871794872 0.728205128205 0.0 0.0 0.571428571429 + 1.0 0.980952380952 0.195238095238 0.0142857142857 0.0904761904762 + 0.0 0.0 0.54358974359 1.0 0.994871794872 0.2 0.0 0.0 + 0.00512820512821 0.0 0.180952380952 0.252380952381 0.280952380952 + 0.0571428571429 0.0 0.77619047619 0.928571428571 0.7 0.0 0.0 0.0 + 0.0 0.00512820512821 0.994871794872 1.0 0.753846153846 0.0 0.0 0.0 + 0.0 0.047619047619 0.742857142857 0.909523809524 0.642857142857 + + + 0.367689116315 0.131213495349 0.128471424038 0.144922048155 + 0.140037448848 0.203142188426 0.0406035628378 0.235906178349 + 0.340307442169 0.076384174984 0.323718715282 0.047568002052 + 0.0354686230472 0.0402544307989 + + + + + + + + + 36 1 37 3 70 3 35 6 68 3 33 6 70 4 32 7 108 3 108 3 108 5 106 6 105 7 + 89 1 4 9 1 8 8 3 61 2 2 36 7 4 60 41 7 4 59 41 7 5 59 41 8 3 60 40 7 + 2 63 42 4 2 64 40 1 3 68 45 67 46 66 46 66 41 71 40 72 40 73 39 73 40 + 71 42 70 42 70 41 72 39 73 39 73 39 73 39 73 39 73 39 72 40 72 39 73 + 39 72 41 41 2 28 40 42 2 28 40 42 2 29 6 2 31 42 2 28 3 1 36 1 1 6 3 + 31 4 2 5 3 1 16 49 7 7 18 20 7 54 6 18 7 18 6 58 5 18 7 17 7 3 4 52 4 + 18 7 17 5 60 5 18 7 81 6 19 6 58 1 47 6 18 1 37 5 45 6 18 1 29 5 1 6 + 47 5 33 5 8 16 18 2 24 5 40 25 17 1 25 4 39 1 2 24 41 4 39 27 42 3 41 + 26 42 3 41 26 43 2 41 26 44 1 41 26 44 1 40 27 44 1 40 27 43 2 39 30 + 40 4 38 30 40 2 2 1 37 30 40 3 39 30 40 4 38 30 40 4 37 31 40 4 37 32 + 39 4 37 32 39 4 34 1 2 32 39 5 36 31 40 5 36 31 40 6 36 30 40 6 36 31 + 39 6 36 31 39 6 36 31 40 5 36 31 40 5 36 31 40 5 36 31 41 5 35 31 41 + 5 34 32 41 4 36 31 41 4 36 31 41 4 36 31 41 4 5 4 2 5 20 31 8 2 2 1 3 + 1 24 4 4 13 1 5 13 31 3 16 3 11 8 4 4 24 8 31 2 35 4 5 4 24 7 32 1 37 + 1 6 4 25 6 77 4 26 6 76 4 27 4 77 3 30 2 77 3 31 1 77 3 109 3 109 4 + 108 4 109 2 104 0 + + + + 10976.0 + + + 1.14285714286 + + + 5018.0 + + + 0.145476285373 + + + 0.972947976879 + + + 0.505301634835 0.536542673181 0.185615749592 0.0909282184295 + -0.00264614624691 -0.00133055687387 0.000189387072416 + 0.0268694575052 -0.00949026790361 + + + 112.0 + + + 0.678571428571 1.0612244898 + + + 0.321428571429 0.964285714286 0.964285714286 0.464285714286 + 0.612244897959 0.897959183673 1.34693877551 1.34693877551 + + + 98.0 + + + 7.0 62.0 0.211494252874 12.0 2.0 7.0 + + + 0.0 0.989795918367 + + + 0.457179300292 + + + 0.0 0.2 0.921130952381 0.464285714286 0.446428571429 0.791428571429 + 0.494047619048 0.27 0.540178571429 0.771428571429 0.550595238095 + 0.227142857143 0.0267857142857 0.191428571429 0.938988095238 + 0.491428571429 + + + 0.0 0.0 0.0 0.417582417582 0.845238095238 0.85119047619 + 0.678571428571 0.252747252747 0.0 0.0 0.0 0.351648351648 + 0.988095238095 1.0 0.970238095238 0.010989010989 0.119047619048 + 0.494047619048 0.458333333333 0.703296703297 0.952380952381 + 0.815476190476 0.85119047619 0.252747252747 0.172619047619 1.0 1.0 + 0.994505494505 0.208333333333 0.0 0.0 0.0 0.22619047619 1.0 1.0 + 0.994505494505 0.220238095238 0.0 0.0 0.0 0.39880952381 + 0.535714285714 0.386904761905 0.692307692308 1.0 0.982142857143 + 0.910714285714 0.032967032967 0.0654761904762 0.0416666666667 0.0 + 0.362637362637 0.982142857143 1.0 0.994047619048 0.0164835164835 + 0.0 0.0 0.0 0.373626373626 0.916666666667 0.857142857143 + 0.958333333333 0.0714285714286 + + + 0.382929502053 0.0980781017353 0.0749792359124 0.129321472346 + 0.0535421056465 0.149494355322 0.0121202120646 0.149054703307 + 0.267737266811 0.0462596837936 0.173594778282 0.0191563820931 + 0.0749367807344 0.0276839673848 + + + + + + + + + 13 4 22 5 20 6 20 7 18 9 17 9 16 12 15 10 14 14 12 15 10 18 8 17 8 1 + 1 16 11 6 4 1 1 1 14 5 3 5 12 6 402 1 1 1 24 2 24 2 2 3 18 8 16 5 1 2 + 1 1 18 3 4 3 16 2 4 4 17 6 1 3 17 9 17 10 17 9 17 8 18 8 18 7 21 5 22 + 3 23 3 24 1 16 0 + + + + 1274.0 + + + 0.530612244898 + + + 276.0 + + + 0.61231884058 + + + 0.577358490566 + + + 0.492898550725 0.429951690821 0.105680276263 0.880011658737 + -0.207148624543 0.0045909232667 -0.0721095819267 0.00926091401448 + 0.32696328396 + + + 26.0 + + + 0.769230769231 0.224489795918 + + + 0.461538461538 1.69230769231 0.153846153846 0.615384615385 0.0 + 0.326530612245 0.326530612245 0.244897959184 + + + 49.0 + + + 1.0 15.0 0.294117647059 3.0 1.0 0.0 + + + 0.0 0.979591836735 + + + 0.216640502355 + + + 0.0 0.0 0.208333333333 0.205128205128 0.345238095238 0.154761904762 + 0.119047619048 0.725274725275 0.944444444444 0.208333333333 0.0 + 0.025641025641 0.345238095238 0.154761904762 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.277777777778 0.111111111111 0.0 0.0 0.0 0.0 + 0.0 0.0 0.555555555556 0.611111111111 0.142857142857 0.0 + 0.111111111111 0.0555555555556 0.0 0.0 0.388888888889 + 0.722222222222 0.619047619048 0.25 0.875 0.5 0.0 0.0 0.125 0.875 + 0.678571428571 1.0 1.0 0.666666666667 0.0 0.0 0.0 0.111111111111 + 0.0 0.777777777778 1.0 0.166666666667 0.0 0.0 0.0 0.0 0.0 + 0.111111111111 0.944444444444 0.388888888889 0.0 0.0 0.0 0.0 0.0 + 0.0 0.416666666667 0.25 0.0 0.0 0.0 0.0 0.0 + + + 0.284510164892 0.29865360297 0.278388462921 0.100635231166 + 0.201395337874 0.533778296707 0.196252129032 0.424443064705 + 0.0316498235286 0.111099882842 0.313659789669 0.343591723576 + 0.367001234108 0.143286455607 + + + + + + + + + 44 2 74 1 74 1 72 4 70 5 70 4 73 3 72 3 23 1 46 4 23 3 45 5 21 3 46 5 + 23 1 46 6 21 2 45 1 5 3 19 2 45 2 4 3 18 3 45 3 1 5 19 2 45 9 19 2 44 + 11 17 1 1 1 45 13 15 3 6 1 37 12 17 2 5 3 36 11 26 1 38 9 27 1 21 2 + 15 9 27 1 22 5 10 10 28 1 21 4 9 12 2 2 24 1 22 2 11 16 2 1 20 1 22 2 + 11 16 2 1 21 1 21 2 11 16 3 1 18 5 19 2 11 21 15 13 13 2 10 22 15 17 + 9 2 11 16 4 2 15 27 10 17 4 3 13 28 11 24 12 28 11 25 11 28 11 27 9 + 28 11 27 9 15 1 12 10 29 1 1 6 11 5 2 1 9 10 30 7 11 9 9 8 32 6 11 10 + 8 10 30 6 11 5 1 3 9 9 31 6 11 1 2 2 2 2 9 9 31 6 14 2 1 3 9 9 31 6 + 14 2 1 3 8 10 31 6 29 9 5 3 2 2 6 3 7 9 29 9 5 2 12 2 6 10 29 9 30 7 + 29 9 31 5 19 2 9 9 31 5 30 9 31 7 17 2 8 11 29 8 10 1 1 7 8 11 29 8 4 + 16 8 10 4 1 9 1 14 22 3 3 8 10 1 1 1 3 5 1 2 1 14 10 1 12 3 1 8 13 1 + 13 1 3 9 7 5 1 1 14 8 12 1 18 8 7 5 1 1 15 7 12 2 11 1 5 3 12 8 6 1 7 + 7 12 2 11 1 5 4 11 13 1 15 10 4 11 2 4 6 10 12 2 14 10 5 3 11 2 7 9 3 + 2 1 5 1 2 3 1 10 10 5 1 1 2 10 2 7 8 4 2 4 2 1 7 9 10 28 8 10 1 2 7 8 + 11 3 3 2 3 3 2 1 4 7 9 2 2 8 7 8 11 3 3 7 11 4 9 2 2 8 2 2 3 8 11 3 3 + 11 5 7 8 27 12 2 2 13 3 8 8 28 11 2 2 24 8 27 12 2 3 4 2 17 8 27 13 1 + 2 4 4 1 1 14 8 27 13 2 3 1 8 12 9 28 17 1 8 14 7 28 17 2 6 15 7 4 4 2 + 2 16 17 2 6 15 7 2 12 14 11 9 6 13 8 2 16 10 12 8 5 1 1 4 1 7 26 11 + 11 9 1 1 2 6 2 6 27 9 12 11 1 4 1 2 2 5 27 10 12 10 5 4 2 5 28 9 11 + 10 8 2 2 6 27 9 12 5 13 3 1 4 29 8 13 4 16 4 30 8 14 8 45 8 14 8 12 4 + 29 8 12 10 12 4 30 7 11 11 4 1 7 5 30 6 12 11 1 13 33 5 11 20 4 2 33 + 6 11 22 2 3 31 5 12 18 1 3 1 5 30 5 12 15 1 1 4 7 32 3 12 17 58 18 3 + 4 50 28 46 30 46 28 47 28 47 28 46 29 47 28 46 30 45 30 45 29 46 29 + 46 29 47 28 47 27 48 27 48 26 49 27 49 10 1 15 51 8 1 12 1 3 51 7 1 + 11 2 3 47 10 2 7 1 2 3 3 47 8 4 6 3 1 67 2 73 3 3 3 56 4 6 9 52 9 4 + 10 52 11 1 12 51 24 51 19 1 7 48 27 48 11 1 15 49 7 6 2 1 2 2 4 50 6 + 4 2 1 5 1 7 50 5 4 18 48 5 5 16 48 6 5 16 47 7 6 16 47 5 8 15 48 5 8 + 14 47 6 8 16 44 8 7 15 44 9 9 13 47 5 11 11 48 6 9 3 1 7 48 7 8 3 1 2 + 1 5 48 6 11 3 3 4 49 5 17 4 50 3 18 6 48 2 19 4 51 2 19 1 53 2 74 1 + 73 2 72 4 20 2 49 3 20 5 46 5 20 3 47 5 19 8 43 4 20 5 47 3 22 2 298 + 4 68 2 2 1 68 8 68 7 70 6 70 4 70 3 72 3 5 0 + + + + 12075.0 + + + 0.465838509317 + + + 3973.0 + + + 0.366473697458 + + + 1.10578144854 + + + 0.580356596214 0.436453876164 0.0966587123966 0.305029860977 + 0.0669431415705 -0.0189145708434 0.0309017625752 -0.0097619213152 + 0.0763806473286 + + + 75.0 + + + 4.28 1.72049689441 + + + 2.29333333333 1.54666666667 5.92 6.98666666667 1.51552795031 + 3.57763975155 0.919254658385 0.869565217391 + + + 161.0 + + + 27.0 128.0 0.240816326531 25.0 13.0 13.0 + + + 0.0 0.993788819876 + + + 0.329026915114 + + + 0.266666666667 0.572222222222 0.0 0.0 0.164473684211 0.527631578947 + 0.0802631578947 0.0 0.553947368421 0.542105263158 0.642105263158 + 0.227214377407 0.198684210526 0.557894736842 0.555263157895 + 0.368421052632 + + + 0.0222222222222 0.594444444444 0.733333333333 0.45 0.0 0.0 0.0 0.0 + 0.0 0.45 0.605555555556 0.5 0.0 0.0 0.0 0.0 0.0 0.505 0.81 0.845 + 0.2 0.0 0.0 0.0 0.0 0.133333333333 0.2 0.188888888889 + 0.116666666667 0.0 0.0 0.0 0.377777777778 0.683333333333 + 0.544444444444 0.333333333333 0.455555555556 0.35 0.405555555556 + 0.0952380952381 0.24 0.91 0.715 0.555 0.915 0.8 0.365 + 0.0619047619048 0.0 0.544444444444 0.822222222222 0.738888888889 + 0.705555555556 0.905555555556 0.733333333333 0.00529100529101 0.13 + 0.135 0.345 0.37 0.385 0.275 0.455 0.3 + + + 0.615739945692 0.104570576095 0.0760106892427 0.0575331408916 + 0.426934134719 0.248230239997 0.0424487001402 0.130076818533 + 0.128793239235 0.0454214626254 0.0697062193893 0.280764262675 + 0.0751866655429 0.0286594453716 + + + + + + + + + 6 1 133 1 133 2 132 2 132 2 131 4 12 7 5 3 103 32 102 32 101 33 101 + 33 101 33 101 33 102 18 1 13 102 32 101 33 102 32 102 32 102 32 102 + 32 102 32 102 32 102 33 101 33 101 33 101 33 101 33 101 34 99 15 1 1 + 1 18 97 37 97 36 99 36 98 36 99 35 98 35 99 34 100 34 101 14 1 2 4 12 + 101 17 2 14 101 33 102 31 103 17 3 12 102 19 1 11 103 32 102 32 102 + 32 102 32 102 31 103 11 1 2 10 7 103 4 21 5 104 3 23 4 104 3 23 4 104 + 3 23 4 105 2 24 3 105 2 24 2 107 1 24 2 132 2 132 2 132 2 132 2 132 2 + 25 3 104 2 25 4 104 1 24 5 104 2 23 7 102 2 23 8 101 1 24 9 100 1 24 + 11 98 1 24 12 121 13 121 12 68 1 53 13 67 1 53 14 65 2 52 7 2 6 66 1 + 30 1 21 12 69 1 30 1 21 12 69 1 30 1 21 12 69 1 30 1 21 15 66 1 30 1 + 21 13 1 1 11 1 53 3 29 1 21 16 9 3 52 3 29 1 20 19 7 4 51 4 27 3 19 + 32 49 5 1 6 5 17 19 32 49 34 18 35 47 34 17 37 47 32 18 37 47 32 17 + 39 45 32 18 41 43 32 18 41 43 33 17 40 44 33 17 40 15 3 25 35 15 40 + 15 5 24 36 14 41 13 8 22 36 15 5 1 32 16 5 24 35 16 3 6 28 16 8 22 35 + 16 3 1 1 5 25 17 10 20 35 17 8 1 25 18 12 17 38 15 33 18 14 17 37 15 + 32 3 2 14 15 17 36 15 31 4 2 14 16 17 35 19 23 24 17 16 35 20 1 1 10 + 1 9 9 1 13 19 15 35 22 20 8 2 13 20 14 4 1 30 23 19 8 2 13 21 13 36 + 14 2 3 2 3 21 4 2 13 22 12 36 14 1 1 1 2 3 1 23 2 3 12 24 11 36 16 2 + 1 3 1 28 12 25 10 36 17 6 8 1 3 16 12 26 9 36 20 2 9 1 4 3 3 6 14 28 + 9 35 62 29 8 35 62 30 7 35 35 2 25 31 6 35 36 1 5 2 17 5 8 9 3 8 4 36 + 42 2 17 1 12 9 4 8 3 34 43 3 17 1 13 6 6 1 3 4 4 35 41 3 17 2 4 1 2 2 + 3 5 12 3 4 35 40 1 19 13 3 4 12 3 4 35 40 2 18 5 1 7 4 3 12 2 5 36 38 + 3 18 13 4 8 14 36 38 3 18 1 1 11 4 8 14 36 38 3 20 14 1 8 14 36 38 2 + 21 24 4 1 8 36 61 24 1 6 6 36 60 3 4 25 6 36 60 3 5 23 7 5 25 6 62 1 + 6 3 2 17 7 4 26 6 69 2 3 7 2 8 7 4 27 5 61 1 7 1 3 19 7 3 27 5 59 33 + 7 3 28 4 57 14 3 18 7 3 28 4 56 16 2 17 8 2 29 4 57 1 2 3 3 6 3 16 8 + 2 30 3 61 1 2 9 1 16 9 2 30 3 58 32 9 2 30 3 59 31 9 2 30 3 61 29 10 + 1 31 2 63 26 11 1 31 1 65 25 11 1 103 13 3 3 116 17 118 1 2 8 1 4 117 + 2 1 14 122 1 2 9 122 12 117 16 119 15 120 15 119 15 121 12 124 10 124 + 10 126 9 126 7 127 5 130 3 132 1 11 0 + + + + 20636.0 + + + 0.87012987013 + + + 5430.0 + + + 0.233149171271 + + + 1.47249292675 + + + 0.394213434138 0.542878465075 0.299161780647 0.264360136446 + 0.155444035189 0.09325166784 -0.0236752273693 0.0618676653198 + -0.078777534019 + + + 134.0 + + + 1.39552238806 1.44805194805 + + + 1.4328358209 1.07462686567 0.89552238806 2.17910447761 + 0.207792207792 0.805194805195 2.88311688312 1.79220779221 + + + 154.0 + + + 19.0 105.0 0.26724137931 19.0 3.0 6.0 + + + 0.0 0.993506493506 + + + 0.263132389998 + + + 0.7336523126 0.223776223776 0.84370015949 0.207459207459 + 0.124613003096 0.177224736048 0.387770897833 0.078431372549 0.0 + 0.034965034965 0.496810207337 0.021756021756 0.0 0.0 0.365325077399 + 0.549019607843 + + + 0.526315789474 0.720394736842 0.391447368421 0.028125 + 0.736842105263 0.799342105263 0.421052631579 0.009375 + 0.702786377709 0.97213622291 0.495356037152 0.0 0.829721362229 1.0 + 0.421052631579 0.0 0.170278637771 0.328173374613 0.213622291022 + 0.0617647058824 0.195046439628 0.328173374613 0.312693498452 + 0.00882352941176 0.0 0.0 0.0 0.426470588235 0.733746130031 + 0.294117647059 0.0 0.0 0.0 0.0 0.0 0.1375 0.947368421053 + 0.529605263158 0.0427631578947 0.0 0.0 0.0 0.0 0.00294117647059 + 0.417956656347 0.120743034056 0.046439628483 0.0 0.0 0.0 0.0 0.0 + 0.198142414861 0.755417956656 0.764705882353 0.208823529412 0.0 0.0 + 0.0 0.0 0.0030959752322 0.504643962848 0.705882352941 + 0.535294117647 + + + 0.376761114949 0.16048036693 0.107688422061 0.15604498139 + 0.0864052665389 0.147905681626 0.103387079783 0.189200266975 + 0.313511713581 0.135056524164 0.0823241450922 0.21822466077 + 0.156343278455 0.0325588199512 + + + + + + + + + 1 7 96 9 95 9 96 8 97 6 98 6 98 6 3 1 94 7 2 1 2 1 91 7 1 8 89 6 1 10 + 87 6 2 8 89 5 2 8 89 3 8 4 89 4 9 2 89 4 9 2 89 5 8 2 89 5 7 5 87 4 9 + 4 88 3 10 3 89 2 10 4 87 4 9 4 87 4 9 3 88 4 9 3 88 4 10 2 89 4 9 3 + 88 5 8 3 87 6 9 1 88 7 8 3 85 13 3 4 85 9 6 4 85 10 6 3 86 8 3 1 2 4 + 85 8 3 9 83 10 3 8 83 22 82 12 2 8 83 11 2 8 83 10 3 8 83 10 3 8 83 + 10 3 8 83 11 3 7 84 10 3 6 85 10 3 6 85 10 4 5 85 10 4 5 85 10 3 8 83 + 10 4 8 82 10 4 9 81 11 4 9 80 11 5 6 82 13 3 1 2 3 82 22 82 22 82 23 + 81 17 1 6 80 16 3 3 82 23 81 24 79 25 78 24 81 23 82 23 81 23 80 24 + 77 28 76 28 76 28 79 25 79 25 79 25 77 27 76 28 77 25 79 25 79 25 79 + 25 79 24 80 24 81 24 82 22 81 22 82 21 83 22 82 22 83 21 83 21 83 21 + 83 23 81 22 81 22 82 22 83 21 83 21 83 21 83 21 84 20 84 20 85 19 85 + 19 84 20 84 19 85 19 85 19 85 19 85 19 85 20 84 20 84 20 84 20 84 20 + 85 19 85 19 84 20 84 20 84 20 85 19 84 20 85 19 84 20 84 20 84 20 85 + 19 84 20 84 20 84 20 84 20 85 19 84 20 85 19 85 19 85 19 85 19 87 17 + 87 16 88 17 87 17 87 16 88 16 89 7 1 7 88 8 1 7 89 15 89 7 1 8 87 8 1 + 8 87 8 1 7 87 9 3 5 88 7 4 5 88 7 5 4 88 7 4 6 87 7 4 7 85 9 2 8 85 + 10 1 8 83 1 1 19 82 13 1 7 83 13 2 6 83 2 2 9 3 6 86 9 3 5 87 9 3 5 + 87 8 4 5 87 7 5 5 87 11 1 6 86 9 2 6 87 9 3 5 87 9 3 5 88 8 3 5 87 8 + 4 6 87 7 4 6 86 8 4 6 85 9 4 6 87 7 4 5 89 6 1 1 2 5 89 6 1 1 2 5 89 + 8 2 5 88 9 1 6 88 16 88 16 88 9 1 6 88 9 1 6 88 8 4 4 88 8 4 4 88 9 3 + 4 88 9 3 5 87 9 3 5 87 8 4 5 87 8 4 5 87 9 3 6 85 10 3 6 86 9 4 5 86 + 8 5 4 87 8 5 4 87 8 5 4 87 8 5 4 87 8 5 4 87 8 5 4 88 8 4 4 89 7 4 4 + 88 8 4 4 88 8 4 4 88 8 4 4 88 7 5 4 88 8 5 3 88 8 5 3 88 8 5 3 89 9 1 + 5 89 9 1 6 88 7 3 5 89 7 4 5 88 7 5 4 88 7 5 4 87 8 5 5 86 8 5 5 86 7 + 6 5 86 7 5 6 87 7 5 5 87 7 6 4 86 8 6 4 87 7 5 5 87 7 5 5 88 5 6 5 88 + 5 7 3 88 7 6 4 88 6 6 4 87 8 5 5 86 8 3 6 88 7 3 6 87 8 3 2 1 3 87 10 + 1 7 86 10 1 7 87 17 87 17 87 18 86 7 1 10 86 9 1 8 86 17 87 17 88 16 + 88 8 3 5 87 9 3 6 79 1 5 10 3 6 79 1 4 11 3 6 79 1 4 11 3 6 78 17 3 6 + 78 17 3 6 78 8 1 8 2 8 77 17 2 8 77 17 2 8 78 3 3 10 2 8 79 1 6 8 4 6 + 87 6 6 5 86 7 6 5 87 6 6 5 87 6 6 6 86 6 6 6 86 6 6 5 86 5 1 1 6 5 86 + 7 6 5 86 7 6 4 88 6 6 5 89 5 5 5 90 3 7 4 90 3 7 4 90 3 8 5 89 2 7 12 + 83 2 7 13 82 2 7 13 83 1 6 14 83 1 7 13 82 2 7 13 81 2 8 12 82 3 7 12 + 82 3 7 6 4 2 82 2 9 3 7 1 82 1 10 2 102 2 102 5 1 5 81 4 3 2 2 12 74 + 1 6 4 2 3 1 13 74 1 5 20 78 2 4 11 1 7 78 5 1 12 1 11 74 30 73 18 3 3 + 81 15 89 12 92 11 92 12 20 1 72 11 19 2 71 12 16 5 71 13 8 4 4 1 73 + 13 9 4 2 6 69 7 1 6 7 6 2 6 29 6 14 3 17 7 1 31 26 10 5 10 12 21 2 17 + 23 12 7 10 10 43 23 25 2 8 2 46 28 26 4 31 4 10 30 12 1 8 7 11 6 2 2 + 61 1 4 3 11 3 86 8 9 1 39 3 12 21 5 25 47 4 1 24 1 28 16 2 28 11 19 + 28 13 6 4 4 18 26 4 29 17 2 8 1 16 61 25 2 2 2 12 61 25 7 9 64 22 10 + 8 64 20 1 1 1 3 3 13 63 24 7 10 63 14 7 1 12 2 2 2 64 9 1 1 26 1 66 5 + 98 7 97 8 96 8 97 4 94 0 + + + + 32656.0 + + + 0.331210191083 + + + 5654.0 + + + 0.315705695083 + + + 1.1127494432 + + + 0.208844327068 0.538226209836 0.0424528552533 1.57261252246 + 0.118673544966 0.023112938923 0.0403482956961 0.0484922189001 + 0.0552992205216 + + + 104.0 + + + 3.04807692308 0.802547770701 + + + 7.07692307692 3.61538461538 1.07692307692 0.423076923077 + 0.624203821656 0.229299363057 0.929936305732 1.41401273885 + + + 314.0 + + + 40.0 153.0 0.203995793901 18.0 21.0 2.0 + + + 0.0 0.996815286624 + + + 0.173138167565 + + + 0.590236686391 0.686952288218 0.407790927022 0.425511197663 + 0.0458579881657 0.0355404089581 0.104043392505 0.348101265823 0.0 + 0.0 0.0 0.0555014605648 0.0 0.0 0.0 0.0676728334956 + + + 0.499013806706 0.631163708087 0.500986193294 0.326923076923 + 0.161735700197 0.0216962524655 0.0867850098619 0.496153846154 + 0.335305719921 0.895463510848 1.0 0.923076923077 0.745562130178 + 0.702169625247 0.426035502959 0.684615384615 0.0 0.183431952663 + 0.0749506903353 0.0673076923077 0.12426035503 0.29191321499 + 0.485207100592 0.526923076923 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0512820512821 0.325 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0673076923077 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.151923076923 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.144230769231 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.123076923077 + + + 0.361327296579 0.28456072194 0.0392299997211 0.014309698597 + 0.116566252033 0.474488357665 0.207776000313 0.164984321539 + 0.0248898836051 0.0415429619371 0.269457313724 0.263553898815 + 0.443133748023 0.139485799673 + + + + + + + + + 40 3 146 3 145 5 295 1 149 1 107 3 36 3 107 14 3 2 4 19 107 42 106 43 + 106 43 106 22 1 20 106 43 106 43 106 43 107 42 107 21 1 20 107 21 1 + 20 107 21 1 20 107 41 108 43 106 43 106 21 1 20 107 42 107 43 15 2 89 + 42 16 3 88 42 16 4 87 42 17 3 87 38 21 4 87 36 22 5 86 38 1 2 17 5 86 + 4 1 1 3 29 1 2 17 7 84 4 5 32 16 9 83 41 16 11 80 42 16 12 80 41 13 + 15 80 41 13 15 80 42 12 15 5 2 74 41 12 16 3 4 73 36 4 1 15 13 2 6 72 + 7 2 28 2 1 17 12 2 6 72 40 18 11 2 6 1 5 66 40 13 1 4 12 1 6 1 5 66 + 40 13 1 4 25 66 41 11 2 3 30 62 41 11 4 1 32 60 40 12 39 58 41 11 4 1 + 34 58 41 11 4 1 34 58 41 10 40 58 2 1 21 2 11 1 2 12 38 59 3 18 1 17 + 2 11 38 60 3 35 3 10 38 60 1 38 1 10 39 98 2 10 39 19 3 76 2 10 39 18 + 5 75 2 10 39 18 6 87 37 19 8 84 38 18 10 82 41 15 13 3 1 1 2 74 39 16 + 16 2 1 75 7 1 30 17 13 81 38 17 19 75 6 1 2 2 27 17 15 79 5 2 8 4 19 + 17 15 79 4 1 13 2 18 17 15 3 1 75 4 1 13 2 17 18 16 1 1 1 1 74 4 2 12 + 2 17 18 16 4 1 73 4 5 8 3 16 18 16 5 3 71 1 2 1 5 1 1 6 3 16 18 15 3 + 7 77 11 3 15 18 15 2 6 2 1 77 10 7 11 17 16 3 8 81 5 9 10 17 17 3 10 + 75 6 1 1 3 3 2 11 17 31 76 3 7 3 3 8 18 32 77 2 13 7 18 33 90 8 17 34 + 90 7 18 37 80 3 3 10 16 38 78 16 16 39 78 16 16 41 79 12 18 40 80 11 + 19 5 1 34 78 13 18 1 5 35 80 9 25 36 81 7 20 2 2 26 4 7 83 5 20 2 2 + 26 6 5 84 1 28 25 6 5 85 1 30 22 7 4 116 9 1 11 128 21 129 22 4 2 1 1 + 118 23 4 4 118 31 118 31 118 31 119 6 1 23 122 2 3 11 2 9 120 4 3 10 + 4 7 121 3 5 8 7 5 121 2 7 7 9 2 122 4 6 7 2 2 126 8 4 6 2 5 2 2 120 4 + 1 3 5 4 2 10 121 2 11 14 122 2 10 4 1 10 122 3 4 20 123 3 3 20 124 24 + 126 23 127 22 129 19 130 19 132 17 133 16 134 5 3 7 135 2 5 7 142 6 + 141 8 139 9 140 10 140 10 140 8 141 8 143 6 143 6 146 4 7 0 + + + + 18923.0 + + + 1.17322834646 + + + 4742.0 + + + 0.226697595951 + + + 1.97209496043 + + + 0.476617802957 0.439358183875 0.429232501937 0.172201648932 + 0.237144872043 0.0310571926719 0.0261110301783 0.0315672077934 + 0.0205080719457 + + + 149.0 + + + 1.04026845638 1.42519685039 + + + 0.348993288591 1.28859060403 0.590604026846 1.93288590604 + 0.503937007874 2.07874015748 2.33070866142 0.755905511811 + + + 127.0 + + + 27.0 116.0 0.239165329053 23.0 1.0 3.0 + + + 0.0 0.992125984252 + + + 0.250594514612 + + + 0.748910200523 0.576013513514 0.0 0.0 0.15518744551 0.557432432432 + 0.119932432432 0.0 0.0 0.353885135135 0.325168918919 0.0 0.0 + 0.0723684210526 0.682565789474 0.410361842105 + + + 0.525925925926 0.9375 0.822916666667 0.229166666667 0.0 0.0 0.0 0.0 + 0.515789473684 0.986842105263 1.0 0.246710526316 0.0 0.0 0.0 0.0 + 0.237037037037 0.305555555556 0.326388888889 0.170138888889 + 0.0243055555556 0.0 0.0 0.0 0.0 0.0855263157895 0.710526315789 + 0.990131578947 0.4375 0.00657894736842 0.0 0.0 0.0 0.0 + 0.345394736842 0.986842105263 0.710526315789 0.292763157895 0.0 0.0 + 0.0 0.0 0.00347222222222 0.0451388888889 0.1875 0.0902777777778 0.0 + 0.0 0.0 0.0 0.0 0.289473684211 0.868421052632 0.848684210526 + 0.430921052632 0.0921052631579 0.0 0.0 0.0 0.0 0.269736842105 + 0.743421052632 0.661184210526 0.457236842105 + + + 0.41854703998 0.240555209379 0.0942564947993 0.0357437285324 + 0.132598754798 0.449353588802 0.151149129559 0.0648749667431 + 0.0406560330583 0.0490104592321 0.199128160275 0.241559851427 + 0.35403004817 0.0881744565383 + + + + + + + + + 11 3 29 5 28 6 28 5 29 3 29 4 29 4 28 3 30 3 30 3 30 3 30 3 30 4 26 1 + 2 4 26 1 2 5 25 1 2 8 22 12 21 13 22 12 22 11 22 10 24 11 22 11 22 10 + 23 7 26 7 26 6 20 2 4 8 20 1 4 8 16 5 3 10 15 17 15 18 15 19 14 19 14 + 4 1 1 1 3 5 4 14 6 2 1 7 3 14 4 1 1 3 4 3 5 12 5 4 11 13 6 3 8 16 6 3 + 9 15 7 2 8 17 6 3 8 17 5 3 7 18 5 3 8 19 3 4 7 18 4 4 7 18 1 7 10 14 + 6 3 8 16 5 4 8 16 4 4 9 17 3 4 8 17 5 3 9 16 6 4 8 16 4 7 5 17 4 8 4 + 17 4 8 5 16 4 8 6 15 5 4 10 14 6 3 11 12 7 3 11 11 7 4 11 13 5 4 11 + 13 5 5 10 14 5 3 11 14 5 1 1 1 11 14 5 1 1 1 11 14 19 14 19 14 19 2 1 + 12 22 11 23 9 24 9 24 9 24 10 23 10 23 10 23 10 23 10 23 10 23 10 23 + 10 23 11 26 7 22 11 22 11 26 7 27 6 27 7 25 8 21 11 22 11 22 11 23 11 + 22 11 24 8 25 9 24 8 23 11 20 13 19 14 18 15 18 15 18 16 18 15 18 17 + 17 17 16 21 12 1 1 21 12 21 12 23 10 26 7 26 1 4 1 27 1 3 1 28 2 31 3 + 29 3 25 1 3 4 25 1 2 7 23 11 22 2 3 6 22 2 3 2 26 2 3 1 33 1 10 0 + + + + 4092.0 + + + 0.266129032258 + + + 1725.0 + + + 0.325797101449 + + + 1.11785002673 + + + 0.462391304348 0.550064804996 0.0266194762883 0.483117396479 + 0.0469948154845 0.000211072502046 0.000472683368571 + 0.00243061002038 -0.120751618037 + + + 33.0 + + + 2.66666666667 0.435483870968 + + + 2.66666666667 3.0303030303 3.0303030303 1.93939393939 + 0.193548387097 1.06451612903 0.225806451613 0.258064516129 + + + 124.0 + + + 9.0 44.0 0.241509433962 11.0 15.0 2.0 + + + 0.0 0.991935483871 + + + 0.421554252199 + + + 0.0806451612903 0.653225806452 0.366935483871 0.0483870967742 + 0.629032258065 0.612903225806 0.951612903226 0.435483870968 + 0.217741935484 0.435483870968 0.971774193548 0.733870967742 0.0 0.0 + 0.426523297491 0.301075268817 + + + 0.0 0.09375 0.8 0.375 0.0166666666667 0.0 0.0 0.0 0.0333333333333 + 0.1875 0.666666666667 0.78125 0.916666666667 0.546875 0.2 0.0 0.4 + 0.53125 0.633333333333 0.171875 0.816666666667 1.0 0.85 0.0 + 0.566666666667 1.0 0.833333333333 0.828125 0.983333333333 1.0 0.95 + 0.0 0.0 0.734375 0.583333333333 0.875 1.0 1.0 1.0 0.3125 0.0 + 0.109375 0.0166666666667 0.25 0.883333333333 1.0 1.0 0.65625 0.0 + 0.0 0.0 0.0 0.533333333333 1.0 0.683333333333 0.421875 0.0 0.0 0.0 + 0.0 0.0 0.2875 0.16 0.05 + + + 0.596428537761 0.163896159429 0.100998545734 0.0364335431281 + 0.494802834923 0.372172577581 0.102199428147 0.171014378809 + 0.00656068695455 0.0453069417865 0.346707120131 0.435808218117 + 0.231218619456 0.0751125189096 + + + + + + + + + 15 3 19 6 17 6 17 7 15 7 61 2 21 1 22 1 425 3 21 1 68 1 14 1 7 1 13 1 + 6 3 20 3 13 5 2 3 13 6 1 3 12 4 2 1 1 3 13 3 1 7 14 9 15 4 1 3 16 3 1 + 3 17 1 2 2 17 2 2 2 17 1 3 2 17 1 3 2 17 1 4 1 20 0 + + + + 1104.0 + + + 0.479166666667 + + + 119.0 + + + 1.33613445378 + + + 0.586425339367 + + + 0.532085561497 0.606829966029 0.554106763813 2.21832479902 + -0.344309350038 -0.150250310064 0.501788705731 0.334223961307 + -2.84827907875 + + + 23.0 + + + 0.652173913043 0.333333333333 + + + 0.521739130435 0.0 0.347826086957 1.39130434783 0.0 0.0 0.25 + 1.08333333333 + + + 48.0 + + + 4.0 4.0 0.304347826087 7.0 0.0 2.0 + + + 0.0 0.979166666667 + + + 0.107789855072 + + + 0.0 0.0 0.2 0.533333333333 0.0 0.0 0.0 0.0 0.263888888889 0.0 + 0.0277777777778 0.0555555555556 0.194444444444 0.0 0.0694444444444 + 0.430555555556 + + + 0.0 0.0 0.0 0.0 0.0833333333333 0.333333333333 0.916666666667 + 0.416666666667 0.0 0.0 0.0 0.0 0.166666666667 0.222222222222 0.5 + 0.388888888889 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0555555555556 0.222222222222 0.0 0.0 0.0 0.0 0.0 0.0 + 0.777777777778 0.0 0.0 0.0 0.0 0.111111111111 0.222222222222 0.0 + 0.722222222222 0.0 0.0 0.0 0.0 0.222222222222 0.555555555556 0.0 + 0.0555555555556 0.0 0.0 0.0 0.0 0.0555555555556 0.833333333333 + 0.333333333333 + + + 0.220880918557 0.238430750501 0.500500980136 0.275486940074 + 0.0694040437264 0.0305375684833 0.239028806162 0.303068019373 + 0.14056446457 0.319244133403 0.31426467491 0.083740584991 + 0.208133172458 0.288554767209 + + + + + + + + + 9 2 25 4 22 6 22 7 21 3 1 3 21 1 1 1 1 3 21 1 3 4 24 4 24 4 24 4 24 3 + 25 3 25 3 26 2 20 1 5 3 19 4 2 4 18 4 2 4 18 10 18 11 1 1 15 13 15 14 + 14 14 14 14 13 15 13 4 1 10 13 3 3 9 13 2 5 7 22 6 23 5 23 5 23 4 15 + 1 4 1 3 5 14 1 2 3 3 6 3 1 9 2 1 4 2 6 3 2 8 7 2 6 3 2 8 7 3 5 3 3 7 + 7 2 6 3 3 11 4 1 6 5 1 13 2 1 2 1 4 24 2 27 1 42 1 26 3 21 1 3 1 9 5 + 3 3 2 1 4 1 5 1 2 7 1 5 1 1 4 1 5 2 1 7 2 4 18 4 3 3 18 4 2 6 11 9 2 + 6 11 17 12 16 12 16 13 1 5 9 18 10 17 11 16 12 16 12 4 1 14 9 3 2 17 + 6 3 2 13 9 4 3 12 9 4 4 11 10 4 5 9 10 4 5 11 7 3 6 12 8 2 7 12 8 2 5 + 13 3 2 2 4 1 16 2 3 2 32 5 1 1 3 1 16 13 15 14 14 15 13 16 12 17 11 + 18 10 19 9 21 7 22 6 23 5 24 4 25 3 25 3 2 2 22 2 26 2 26 2 26 2 25 3 + 22 6 23 4 25 3 25 3 26 2 26 2 26 3 25 4 15 2 8 5 13 3 7 6 1 1 1 1 8 2 + 8 2 1 3 1 1 1 1 8 1 8 2 2 9 5 3 7 3 2 9 4 3 7 3 2 9 4 4 3 1 1 4 1 10 + 4 4 6 3 2 9 4 4 2 1 3 14 4 4 3 1 2 9 1 4 4 4 2 3 1 2 3 4 1 1 1 2 3 5 + 3 1 2 2 3 3 10 3 4 1 2 2 3 4 9 3 7 2 3 3 12 1 7 2 3 4 3 2 6 1 7 2 3 5 + 7 4 7 2 3 5 18 2 3 7 16 2 3 8 15 2 3 9 14 2 3 9 14 2 4 9 13 2 3 12 11 + 2 4 12 10 2 4 11 1 1 9 2 4 17 5 2 4 21 1 2 3 17 6 1 5 15 7 1 4 18 5 2 + 3 19 4 3 2 20 3 3 3 20 1 4 3 24 4 24 3 25 4 23 5 23 5 24 4 24 4 23 5 + 24 4 24 3 25 4 24 4 24 3 25 3 25 3 25 3 25 3 27 1 27 1 24 0 + + + + 4228.0 + + + 0.185430463576 + + + 1760.0 + + + 0.469886363636 + + + 1.06184513161 + + + 0.509132996633 0.517049242424 0.0317862149876 0.675109182586 + -0.00232483396236 -0.000314706660117 -0.0309753896478 + 0.00895781421721 -0.179420655382 + + + 28.0 + + + 4.92857142857 0.801324503311 + + + 5.0 5.28571428571 5.14285714286 4.28571428571 0.662251655629 + 0.900662251656 1.03311258278 0.529801324503 + + + 151.0 + + + 13.0 63.0 0.241176470588 26.0 7.0 2.0 + + + 0.0 0.993377483444 + + + 0.416272469253 + + + 0.177606177606 0.259398496241 0.548872180451 0.488721804511 + 0.610038610039 0.244360902256 0.804511278195 0.0639097744361 + 0.339768339768 0.458646616541 0.812030075188 0.221804511278 + 0.042471042471 0.515037593985 0.718045112782 0.342105263158 + + + 0.0 0.0 0.0 0.228070175439 0.385964912281 0.385964912281 + 0.649122807018 0.649122807018 0.166666666667 0.447368421053 + 0.0921052631579 0.644736842105 0.973684210526 0.368421052632 + 0.355263157895 0.381578947368 0.351851851852 0.631578947368 + 0.0701754385965 0.298245614035 1.0 0.508771929825 0.0350877192982 + 0.0 0.75 0.644736842105 0.355263157895 0.223684210526 1.0 + 0.684210526316 0.197368421053 0.0 0.0555555555556 0.982456140351 + 0.561403508772 0.228070175439 1.0 0.982456140351 0.385964912281 0.0 + 0.0 0.381578947368 0.552631578947 0.460526315789 0.960526315789 + 0.394736842105 0.486842105263 0.0 0.0 0.157894736842 0.614035087719 + 0.631578947368 0.824561403509 0.964912280702 0.719298245614 0.0 0.0 + 0.0263157894737 0.407894736842 0.460526315789 0.473684210526 + 0.697368421053 0.657894736842 0.0 + + + 0.569134758309 0.175554405473 0.101124654053 0.0439810419085 + 0.512630403985 0.335234745971 0.119443189307 0.172943655853 + 0.0116550782058 0.065195851852 0.460606752991 0.343732182154 + 0.223673448146 0.0869300993569 + + + + + + + + + 7 4 26 5 28 4 28 1 30 2 28 7 25 8 24 7 23 7 24 8 25 1 1 1 3 1 31 1 20 + 3 25 1 1 4 23 8 23 12 20 12 23 1 4 1 3 0 + + + + 544.0 + + + 1.88235294118 + + + 99.0 + + + 1.10101010101 + + + 1.93505039194 + + + 0.458129683936 0.569444444444 1.06274457667 0.220975183938 + 0.370245666542 0.351506679174 0.026690538954 0.16174381279 + -0.0338710533943 + + + 32.0 + + + 0.21875 0.294117647059 + + + 0.25 0.375 0.0 0.25 0.0 0.0 0.705882352941 0.235294117647 + + + 17.0 + + + 5.0 4.0 0.264705882353 3.0 0.0 3.0 + + + 0.0 0.941176470588 + + + 0.181985294118 + + + 0.21875 0.53125 0.59375 0.0 0.21875 0.21875 0.0 0.0 0.0 0.0 0.0 0.3 + 0.0 0.0 0.09375 0.675 + + + 0.0 0.0 0.125 0.25 0.875 0.25 0.0 0.0 0.5 0.375 0.75 1.0 1.0 0.25 + 0.0 0.0 0.625 0.25 0.25 0.625 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.375 0.75 0.0 0.0 0.0 0.0 0.0 0.0 0.875 0.666666666667 0.0 0.0 0.0 + 0.0 0.0 0.375 0.375 0.75 + + + 0.20398353391 0.327913624275 0.258499844823 0.126431221711 + 0.315123817974 0.532417247726 0.212937935975 0.2187713939 + 0.0495359076086 0.170732406188 0.411123663638 0.353575651748 + 0.314716393058 0.158330700789 + + + + + + + + + 8 1 43 3 42 3 42 4 41 5 40 6 39 7 40 6 37 9 35 11 1 4 28 21 21 23 24 + 15 2 4 24 22 24 20 26 13 2 6 24 14 2 4 27 19 26 13 1 6 26 10 4 6 25 + 11 3 1 1 4 24 13 1 8 22 14 4 7 18 28 16 29 17 30 15 31 12 33 12 33 13 + 33 16 29 23 22 24 20 19 1 6 19 19 2 4 21 18 2 4 16 22 4 2 17 22 3 4 + 18 29 3 2 12 34 12 35 11 34 11 20 5 9 12 20 4 10 9 1 1 20 3 11 5 2 1 + 23 3 12 7 23 4 11 4 26 4 11 3 28 4 11 2 28 6 3 1 5 2 28 7 2 1 6 1 28 + 7 2 1 6 1 31 6 7 2 1 3 27 7 3 12 24 21 25 20 25 6 3 12 25 7 1 12 10 3 + 2 1 11 3 1 15 9 7 12 1 2 15 8 7 15 16 7 7 18 13 8 2 1 3 19 12 8 2 22 + 13 32 13 32 13 32 14 38 6 39 5 40 4 36 10 9 2 3 3 19 11 6 8 20 11 6 8 + 22 9 6 9 22 8 7 8 22 8 7 8 21 9 7 9 21 8 7 10 22 5 8 11 23 1 10 12 33 + 13 33 2 1 11 29 4 1 12 28 17 28 20 25 21 24 23 22 24 21 25 20 27 18 + 28 17 4 1 23 19 2 2 23 16 1 1 2 1 24 16 1 1 28 15 31 14 1 1 2 3 24 22 + 17 3 1 24 2 2 13 27 3 2 12 23 2 3 2 4 12 22 2 4 1 3 13 22 3 2 2 3 13 + 22 3 1 3 2 15 21 3 1 3 3 13 23 1 2 4 1 16 25 24 21 25 20 4 3 19 20 3 + 8 15 20 2 10 9 1 4 19 1 11 9 3 2 18 10 3 14 12 4 1 11 2 16 11 34 15 + 31 9 2 3 31 10 35 10 3 1 31 10 2 2 31 10 3 1 31 10 3 1 31 10 3 2 8 2 + 2 1 17 10 3 3 7 1 21 11 2 3 8 1 20 11 1 4 12 1 15 18 1 1 25 18 1 3 23 + 13 7 4 22 10 9 7 4 2 13 10 11 6 19 9 10 8 19 8 10 9 2 1 14 11 7 15 12 + 11 7 8 1 8 10 10 1 1 7 6 4 7 9 9 10 7 3 8 7 10 9 9 2 8 7 11 7 21 6 14 + 5 21 4 15 6 21 1 16 7 20 1 16 6 38 7 36 10 29 2 3 12 27 3 2 13 33 10 + 36 10 35 2 2 7 40 5 40 5 41 3 132 5 40 3 1 2 37 6 1 1 38 4 41 4 42 3 + 28 0 + + + + 7290.0 + + + 0.277777777778 + + + 2859.0 + + + 0.361315145156 + + + 1.08617844439 + + + 0.514388374829 0.500200956335 0.0373174150478 0.630300802918 + 0.0201635476849 0.00135707898041 -0.0276143278782 0.00190570101498 + -0.0846333123047 + + + 45.0 + + + 5.08888888889 0.808641975309 + + + 4.53333333333 7.28888888889 4.88888888889 3.46666666667 + 0.395061728395 0.987654320988 0.888888888889 0.962962962963 + + + 162.0 + + + 21.0 108.0 0.27519379845 22.0 9.0 2.0 + + + 0.0 0.993827160494 + + + 0.392181069959 + + + 0.35 0.141906873614 0.229545454545 0.161862527716 0.665909090909 + 0.266075388027 0.802272727273 0.532150776053 0.556818181818 + 0.29933481153 0.777272727273 0.294900221729 0.08125 0.512195121951 + 0.266666666667 0.380081300813 + + + 0.05 0.06 0.0 0.0 0.0 0.0 0.0 0.047619047619 0.683333333333 + 0.508333333333 0.0666666666667 0.444444444444 0.591666666667 0.25 + 0.325 0.230158730159 0.7 0.62 0.3 0.447619047619 0.89 0.6 0.78 + 0.695238095238 0.458333333333 0.883333333333 0.308333333333 + 0.047619047619 0.95 0.75 0.5 0.230158730159 0.35 0.933333333333 + 0.35 0.0 0.791666666667 0.85 0.583333333333 0.0 0.01 0.9 0.77 + 0.152380952381 0.54 0.91 0.63 0.0 0.0 0.325 0.541666666667 + 0.579365079365 0.15 0.641666666667 0.85 0.00793650793651 0.0 0.0 + 0.116666666667 0.793650793651 0.0 0.275 0.691666666667 + 0.00793650793651 + + + 0.421529779241 0.237431999131 0.0897034325336 0.0425471648066 + 0.166043111621 0.414776589378 0.157963562667 0.165608173726 + 0.0283598470399 0.071667857414 0.13774056194 0.268691367013 + 0.317722444143 0.0953538615045 + + + + + + + + + 55 1 3 1 75 3 2 1 75 3 2 2 74 3 3 1 74 3 3 2 72 4 3 2 72 4 3 2 30 3 + 39 2 1 1 35 1 41 4 77 5 76 6 2 1 72 9 71 14 66 11 1 3 67 9 1 2 31 1 + 37 8 35 2 36 8 34 5 35 7 34 9 4 1 26 8 33 10 2 7 22 6 34 10 3 4 24 6 + 34 10 3 4 24 6 34 10 2 9 20 6 33 6 1 4 2 9 20 3 2 1 33 5 2 4 2 7 21 4 + 1 2 33 4 3 3 3 8 18 16 2 1 23 5 2 3 3 4 3 1 18 20 22 5 2 3 3 5 5 2 13 + 22 21 10 4 5 4 1 14 23 20 10 4 11 13 23 20 12 1 12 13 24 9 1 9 11 2 4 + 1 1 1 5 13 25 7 5 2 1 3 12 1 12 12 27 6 6 1 2 2 25 13 27 4 37 13 10 1 + 16 4 37 13 9 5 13 4 6 2 29 13 1 1 1 3 3 4 14 4 5 3 29 13 1 6 2 1 16 + 14 22 1 5 13 1 10 14 17 6 44 7 3 1 20 5 35 1 9 7 24 6 33 3 4 11 21 2 + 1 12 1 5 3 1 1 2 14 5 1 11 3 2 17 2 1 18 3 4 14 2 4 2 1 8 3 2 1 1 15 + 2 1 6 1 18 15 1 4 10 3 6 14 2 1 6 1 19 14 1 2 13 2 6 17 18 2 6 14 16 + 2 6 17 17 4 4 14 2 4 2 2 6 3 5 18 25 25 5 3 5 18 26 19 1 4 5 3 2 21 + 12 4 9 19 2 6 3 3 2 21 12 4 1 2 5 19 6 1 4 4 2 21 5 2 5 4 1 2 5 19 11 + 4 3 20 11 3 3 2 6 18 6 3 2 4 3 20 11 3 3 2 6 18 4 1 1 9 3 20 11 3 3 2 + 6 18 4 11 3 20 25 15 1 3 3 4 2 5 3 20 25 14 2 4 3 2 3 4 4 20 25 13 3 + 4 3 2 3 4 5 19 25 13 3 5 1 4 5 1 7 12 3 2 25 13 3 5 2 2 14 12 2 3 25 + 13 3 4 19 11 3 3 4 4 1 2 13 15 2 5 18 17 3 17 5 13 3 5 18 17 2 19 4 + 13 3 6 1 1 15 17 2 20 3 13 3 7 1 1 14 17 2 20 2 14 3 12 11 17 2 20 2 + 14 3 11 12 17 2 20 2 29 12 16 1 21 2 31 10 38 2 31 9 39 1 17 1 4 2 13 + 4 39 1 15 2 6 2 15 1 39 3 13 3 4 3 13 3 38 4 11 10 11 7 39 1 13 7 12 + 4 1 4 54 6 18 3 54 7 18 2 39 1 14 8 58 1 14 8 57 2 14 9 56 2 14 9 57 + 2 13 10 56 2 13 10 56 2 13 10 5 1 50 2 13 17 49 2 13 18 48 1 14 12 1 + 6 47 2 12 22 45 2 12 23 44 2 12 24 42 3 12 25 42 1 13 26 41 1 13 26 + 40 2 13 27 39 2 13 27 39 2 13 10 1 16 39 2 13 27 40 1 13 7 1 19 54 8 + 3 16 54 8 4 15 40 1 12 7 1 2 2 15 40 2 12 26 41 2 12 27 40 2 12 28 39 + 2 12 28 39 2 13 16 1 10 39 2 14 14 3 9 39 2 16 12 4 8 39 2 23 3 7 1 3 + 3 39 2 24 2 7 6 40 2 24 5 4 6 40 2 27 1 5 2 2 2 40 2 33 2 44 1 26 1 8 + 1 2 1 41 1 15 1 9 2 7 2 2 2 40 1 14 17 2 7 40 1 14 16 2 9 39 1 14 16 + 1 10 39 1 14 16 1 10 39 1 14 16 2 10 38 1 14 3 1 13 1 10 38 1 14 3 2 + 12 1 10 38 1 14 3 3 11 1 9 38 2 15 2 4 20 39 1 15 2 4 2 1 17 39 1 15 + 2 3 3 2 5 2 9 39 1 15 2 10 2 2 10 39 1 15 2 4 2 4 3 1 10 39 1 15 2 4 + 2 5 13 39 1 14 3 10 1 1 12 39 1 14 3 10 1 4 9 38 2 15 2 11 1 4 5 1 2 + 39 1 15 2 17 3 43 1 35 2 2 1 40 1 15 2 19 4 40 1 15 1 21 3 365 1 78 2 + 79 2 79 2 79 2 79 2 79 2 79 2 79 1 80 2 79 2 79 2 79 1 80 1 80 1 49 0 + + + + + 12636.0 + + + 0.519230769231 + + + 3186.0 + + + 0.473634651601 + + + 1.07864271457 + + + 0.588241525424 0.423915112488 0.125608761115 0.388991167694 + 0.0814973235837 -0.0231690920171 0.023760403518 -0.0202929540635 + 0.0904030352658 + + + 81.0 + + + 3.20987654321 2.12820512821 + + + 0.938271604938 3.11111111111 4.04938271605 4.74074074074 + 2.07692307692 3.51282051282 1.53846153846 1.38461538462 + + + 156.0 + + + 23.0 117.0 0.236496350365 31.0 0.0 3.0 + + + 0.0 0.99358974359 + + + 0.252136752137 + + + 0.289743589744 0.292307692308 0.0 0.0 0.325641025641 0.411538461538 + 0.0833333333333 0.0602564102564 0.326923076923 0.224358974359 + 0.494871794872 0.166666666667 0.266178266178 0.41514041514 + 0.399267399267 0.261294261294 + + + 0.0 0.255 0.0421052631579 0.04 0.0 0.0 0.0 0.0 0.1 0.78 + 0.826315789474 0.275 0.0 0.0 0.0 0.0 0.0157894736842 0.815 + 0.647368421053 0.24 0.0 0.0 0.0 0.0 0.0 0.44 0.468421052632 0.305 + 0.178947368421 0.155 0.110526315789 0.13 0.0 0.005 0.0 0.105 + 0.247368421053 0.205 0.236842105263 0.005 0.547368421053 0.75 + 0.447368421053 0.345 0.889473684211 0.645 0.442105263158 0.0 + 0.136842105263 0.645 0.557894736842 0.515 0.563157894737 0.69 + 0.742105263158 0.0 0.0 0.286363636364 0.210526315789 0.395454545455 + 0.1004784689 0.277272727273 0.334928229665 0.0136363636364 + + + 0.582012332127 0.112229531426 0.0625949768254 0.0530742858761 + 0.294327397455 0.29312947476 0.0261843873355 0.128040308923 + 0.160568683838 0.0280066772046 0.0894089570051 0.299858337194 + 0.0806062338836 0.00161979397393 + + + + + + + + + 34 2 35 2 72 3 34 2 34 3 35 1 35 3 2 1 31 3 1 21 11 4 1 29 2 5 1 36 1 + 36 1 35 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 34 3 + 34 3 34 3 34 3 34 7 1 3 25 8 1 3 17 2 1 9 30 7 5 3 26 3 3 5 26 3 3 1 + 30 3 34 2 35 3 34 3 34 3 34 2 35 3 34 3 6 4 24 3 34 3 33 4 33 4 33 4 + 33 4 33 4 33 4 33 4 5 1 1 6 20 27 1 2 7 36 1 36 1 36 1 35 2 35 2 35 2 + 34 4 33 4 33 4 32 6 32 4 32 5 33 3 35 2 36 1 36 1 3 0 + + + + 2590.0 + + + 0.528571428571 + + + 1510.0 + + + 0.190066225166 + + + 1.05496183206 + + + 0.503311258278 0.449304155869 0.0670788750697 0.128576375615 + 0.00701269347139 -0.000935970897384 0.00721425146517 + 7.05402422765e-05 0.00719696334038 + + + 37.0 + + + 0.972972972973 0.185714285714 + + + 1.72972972973 0.216216216216 0.108108108108 1.83783783784 + 0.171428571429 0.228571428571 0.114285714286 0.171428571429 + + + 70.0 + + + 5.0 27.0 0.145833333333 0.0 9.0 3.0 + + + 0.0 0.985714285714 + + + 0.583011583012 + + + 0.457516339869 0.753086419753 0.882352941176 0.037037037037 + 0.470588235294 1.0 0.986928104575 0.0246913580247 0.43137254902 + 0.993827160494 1.0 0.0617283950617 0.470588235294 0.733333333333 + 0.758823529412 0.316666666667 + + + 0.0 0.833333333333 0.75 0.583333333333 0.8125 0.75 0.0833333333333 + 0.0 0.0 0.888888888889 1.0 0.644444444444 0.975 0.955555555556 + 0.0666666666667 0.0 0.0 0.888888888889 1.0 1.0 1.0 0.944444444444 + 0.0 0.0 0.0 0.888888888889 1.0 1.0 1.0 1.0 0.0888888888889 0.0 0.0 + 0.844444444444 1.0 1.0 1.0 1.0 0.111111111111 0.0 0.0 + 0.777777777778 1.0 0.972222222222 1.0 1.0 0.138888888889 0.0 0.0 + 0.733333333333 1.0 0.888888888889 1.0 1.0 0.244444444444 + 0.177777777778 0.4 0.688888888889 0.6 0.444444444444 0.6 + 0.444444444444 0.355555555556 0.488888888889 + + + 0.622776813371 0.0535407638912 0.0307427813453 0.0252188820479 + 0.417841069309 0.123179402534 0.0313013422771 0.0219827086817 + 0.0131049800767 0.0249150196257 0.0158376515525 0.142040562614 + 0.0902019346375 0.0338469622154 + + + + + + + + + 0 5 1 11 2 4 1 5 1 0 + + + + 30.0 + + + 1.2 + + + 25.0 + + + 1.12 + + + 0.962962962963 + + + 0.44 0.48 0.0864 0.079744 -0.00096 0.000768 -0.00163072 -0.0026752 + 0.003191808 + + + 6.0 + + + 0.166666666667 0.0 + + + 0.666666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 5.0 + + + 1.0 0.0 0.0 0.0 3.0 3.0 + + + 0.0 0.8 + + + 0.833333333333 + + + 1.0 1.0 1.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 0.5 0.5 + + + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 + + + 0.106561234242 0.0176864020694 0.0167915607503 0.069936578215 + 0.0378752567168 0.0764567304781 0.168595265514 0.0291346333949 + 0.0962212194817 0.125907359815 0.0966678190374 0.0987674837531 + 0.119329277681 0.047397835526 + + + + + + + + + 17 3 33 1 32 5 29 6 28 8 9 4 14 9 7 3 19 5 8 3 18 6 8 2 19 6 6 4 15 + 11 2 7 15 11 1 7 15 20 14 20 15 19 15 19 16 19 15 15 1 3 16 15 1 1 1 + 1 15 19 16 17 17 11 25 8 9 1 18 7 8 1 18 7 29 5 63 2 32 3 31 4 32 2 + 32 1 33 2 32 3 32 3 32 2 33 1 34 1 178 2 33 3 32 5 29 5 28 2 1 2 28 4 + 1 3 28 8 27 8 27 7 29 6 29 5 30 4 31 3 29 0 + + + + 1890.0 + + + 0.648148148148 + + + 400.0 + + + 0.6 + + + 0.717223650386 + + + 0.444191176471 0.373962264151 0.151917484375 0.4885065 -0.198853875 + 0.0132019465664 -0.126930880687 0.0264163709687 0.3681991545 + + + 35.0 + + + 0.742857142857 0.259259259259 + + + 1.25714285714 0.8 0.685714285714 0.0 0.518518518519 0.37037037037 + 0.0 0.148148148148 + + + 54.0 + + + 1.0 15.0 0.325301204819 6.0 1.0 1.0 + + + 0.0 0.981481481481 + + + 0.21164021164 + + + 0.0 0.0714285714286 0.211538461538 0.482142857143 0.290598290598 + 0.738095238095 0.0 0.103174603175 0.606837606838 0.47619047619 0.0 + 0.0 0.307692307692 0.0714285714286 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.125 0.214285714286 0.142857142857 0.357142857143 + 0.0 0.0 0.0714285714286 0.214285714286 0.5 0.0357142857143 + 0.535714285714 0.892857142857 0.0 0.2 0.885714285714 0.714285714286 + 0.0 0.0 0.2 0.171428571429 0.375 0.642857142857 1.0 0.321428571429 + 0.0 0.0 0.0 0.0 0.833333333333 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.1 + 0.571428571429 0.857142857143 0.0571428571429 0.0 0.0 0.0 0.0 0.0 + 0.642857142857 0.321428571429 0.0 0.0 0.0 0.0 0.0 0.233333333333 + 0.314285714286 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.57043844353 0.156402847424 0.276476387902 0.10964383516 + 0.600955657346 0.217949464409 0.122886052728 0.447076997971 + 0.0327388123865 0.128901176115 0.517713059584 0.247357052594 + 0.0994479032892 0.119341260603 + + + + + + + + + 193 1 38 1 38 1 38 1 2 1 34 2 2 3 2 5 3 24 1 38 1 38 1 38 1 38 1 38 1 + 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 38 1 + 38 10 21 19 20 9 3 2 28 1 1 4 38 1 3 6 29 1 6 1 31 1 38 2 37 1 38 1 + 38 2 37 2 37 2 37 2 37 2 37 2 37 2 37 2 37 2 37 2 37 2 37 2 38 1 37 3 + 2 32 1 2 0 + + + + 2106.0 + + + 0.722222222222 + + + 1615.0 + + + 0.14613003096 + + + 0.996271439224 + + + 0.495095323448 0.573211052047 0.0722019382184 0.103255112555 + 0.000220623570939 -0.00031616283495 0.000627769186333 + -0.000635603557788 0.000426065306687 + + + 39.0 + + + 0.641025641026 0.148148148148 + + + 1.64102564103 0.102564102564 0.0 0.820512820513 0.222222222222 0.0 + 0.296296296296 0.0 + + + 54.0 + + + 1.0 14.0 0.125925925926 1.0 3.0 1.0 + + + 0.0740740740741 0.981481481481 + + + 0.76685660019 + + + 0.290598290598 1.0 0.760683760684 0.84126984127 0.284615384615 1.0 + 0.992307692308 0.928571428571 0.307692307692 1.0 1.0 0.928571428571 + 0.323076923077 0.9 0.746153846154 0.85 + + + 0.0 0.571428571429 1.0 1.0 0.625 0.928571428571 0.75 0.714285714286 + 0.0 0.514285714286 1.0 1.0 0.633333333333 0.828571428571 1.0 + 0.857142857143 0.0 0.485714285714 1.0 1.0 0.966666666667 1.0 1.0 + 0.857142857143 0.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.571428571429 1.0 1.0 0.7 1.0 1.0 + 0.857142857143 0.0666666666667 0.571428571429 0.8 0.8 + 0.433333333333 0.8 0.8 0.742857142857 + + + 0.438185042986 0.0457325038815 0.00274665399172 0.00781739212125 + 0.00376694851507 0.0886957742658 0.0691152370428 0.00823713959821 + 0.0111505617212 0.00227361679757 0.17488007567 0.0270281866076 + 0.145594609591 0.0290898472573 + + + + + + + + + 37 3 73 3 72 4 72 3 74 2 75 1 43 15 5 1 10 2 37 3 1 16 2 17 37 21 1 + 18 36 40 36 39 37 39 37 39 37 40 36 40 36 40 36 39 37 39 37 39 37 39 + 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 30 46 1 4 13 1 8 49 33 + 43 32 44 33 43 34 42 35 41 37 39 38 38 39 37 39 37 39 37 39 38 38 38 + 38 38 16 4 18 38 16 4 18 38 15 5 18 38 16 3 19 38 16 2 20 34 1 3 38 + 18 1 4 6 4 2 3 39 7 27 4 4 3 1 2 29 1 32 4 2 24 46 4 2 30 40 4 2 31 + 39 4 2 32 38 4 2 32 38 4 2 32 38 38 16 1 21 38 16 1 20 39 38 37 39 36 + 40 37 41 34 41 35 41 35 41 35 19 1 20 37 17 2 21 37 16 2 16 3 1 38 35 + 2 1 38 37 39 38 38 38 38 38 37 39 37 39 37 39 37 40 36 40 36 39 37 39 + 37 39 37 40 36 40 36 40 36 40 36 40 37 39 37 39 37 39 37 39 37 39 37 + 12 22 5 37 3 33 3 38 1 35 1 38 1 39 0 + + + + 7220.0 + + + 0.8 + + + 3330.0 + + + 0.13963963964 + + + 1.59167065582 + + + 0.4922002002 0.518618618619 0.13328436087 0.182402413668 + 0.111244063207 -0.000365260557917 -0.000877040775282 + -0.000612844920974 -0.00288660737754 + + + 76.0 + + + 0.592105263158 0.378947368421 + + + 0.421052631579 1.15789473684 0.368421052632 0.421052631579 + 0.210526315789 0.252631578947 0.842105263158 0.126315789474 + + + 95.0 + + + 7.0 37.0 0.21752265861 4.0 3.0 3.0 + + + 0.0 0.989473684211 + + + 0.461218836565 + + + 0.723112128146 0.949561403509 0.131578947368 0.0 0.713958810069 + 0.890350877193 0.269736842105 0.129385964912 0.070938215103 + 0.0328947368421 0.927631578947 0.857456140351 0.0 0.00219298245614 + 0.875 0.791666666667 + + + 0.383838383838 1.0 0.962962962963 0.935185185185 0.296296296296 0.0 + 0.0 0.0 0.454545454545 1.0 0.991666666667 0.908333333333 + 0.233333333333 0.0 0.0 0.0 0.363636363636 1.0 0.990740740741 + 0.935185185185 0.25 0.0 0.0 0.0 0.436363636364 1.0 0.65 1.0 + 0.491666666667 0.308333333333 0.283333333333 0.208333333333 + 0.161616161616 0.138888888889 0.037037037037 0.101851851852 + 0.851851851852 1.0 1.0 0.759259259259 0.0 0.0 0.0 0.0 0.9 + 0.958333333333 1.0 0.675 0.0 0.0 0.0 0.0 0.962962962963 1.0 1.0 + 0.666666666667 0.0 0.0 0.0 0.00833333333333 0.758333333333 0.8 + 0.833333333333 0.675 + + + 0.351233667817 0.217857376873 0.0142117019651 0.00318482108068 + 0.063254788476 0.378836538755 0.0914754037103 0.0349412503693 + 0.00897890546223 0.00250315869781 0.089140612265 0.216281477262 + 0.106216797044 0.0621389692704 + + + + + + + + + 287 3 328 4 328 4 293 2 32 5 293 1 33 1 660 7 319 1 3 9 310 2 1 19 + 295 37 294 38 294 38 294 38 294 38 294 38 294 38 294 38 294 38 295 37 + 295 37 295 37 295 37 295 37 295 37 295 37 295 37 295 37 295 38 294 38 + 112 3 179 37 111 6 178 38 109 9 176 38 109 11 174 38 109 13 172 38 + 109 15 170 38 109 15 171 37 109 15 171 37 109 16 170 37 109 16 170 37 + 109 13 2 1 170 37 109 13 3 1 170 36 108 16 6 4 162 36 109 14 7 3 162 + 37 110 13 6 5 5 1 155 37 38 1 74 12 5 7 3 2 119 1 33 37 38 1 70 17 4 + 9 122 6 28 37 38 1 69 34 118 13 22 38 8 1 3 1 2 2 4 6 9 2 69 35 117 + 20 14 55 4 18 70 37 114 89 4 18 70 19 5 16 2 2 107 90 3 18 70 17 1 2 + 5 17 109 63 3 1 1 22 3 18 70 20 2 21 108 50 2 1 16 21 3 18 71 19 3 1 + 6 9 2 5 11 1 94 40 28 21 2 19 70 20 12 17 9 3 91 38 30 21 1 21 69 26 + 1 3 3 18 6 1 1 5 88 18 1 19 30 21 1 21 69 32 4 7 4 7 4 4 2 3 85 38 30 + 21 1 21 69 28 9 8 6 6 4 2 89 38 30 21 1 21 69 31 8 9 5 7 11 2 79 37 + 31 44 69 33 9 7 5 9 9 3 76 38 31 43 68 37 11 6 4 7 12 3 71 40 28 46 + 67 37 12 7 4 7 12 3 69 40 28 46 68 4 3 33 10 7 6 7 9 9 62 39 30 45 68 + 3 5 34 10 7 7 6 12 5 61 40 28 22 1 22 68 7 2 36 14 4 6 5 76 41 28 45 + 69 22 3 23 11 7 6 2 75 41 28 22 1 22 68 18 1 3 3 27 11 6 81 41 28 22 + 1 21 70 17 10 27 11 5 28 4 48 39 30 20 2 20 72 16 13 26 28 3 9 14 41 + 39 29 20 2 20 72 15 15 28 28 2 1 22 2 1 37 38 29 20 2 20 72 1 3 1 2 8 + 17 29 27 34 29 38 29 21 1 20 42 6 24 2 7 4 21 30 26 37 24 38 29 20 2 + 20 38 19 24 4 13 1 10 28 26 38 22 38 29 21 1 20 38 30 7 10 9 2 3 2 10 + 27 21 45 19 38 29 42 38 34 4 10 8 7 14 27 17 14 1 35 14 38 29 42 38 + 35 3 2 2 5 9 12 11 24 18 14 2 37 11 7 3 29 28 39 1 2 38 37 7 4 8 3 5 + 5 13 21 11 64 6 4 2 2 3 29 28 43 37 40 24 4 17 95 3 40 29 21 1 21 36 + 42 26 3 3 3 12 87 1 5 3 17 2 20 29 21 1 21 37 37 32 5 2 4 12 49 1 3 2 + 28 2 12 4 31 27 22 2 20 37 37 35 3 4 3 14 43 11 39 5 30 27 22 2 20 37 + 37 39 2 3 3 16 27 2 15 8 41 2 29 27 22 2 20 37 40 38 3 2 4 19 25 2 12 + 8 71 27 22 1 21 37 41 40 4 27 15 30 38 3 3 1 22 27 22 1 21 37 41 73 + 17 11 3 15 31 6 27 28 21 1 21 37 40 76 33 13 4 2 1 2 18 4 31 28 21 1 + 21 37 41 79 30 1 3 14 22 3 32 27 21 1 22 36 40 82 29 2 7 9 56 27 21 1 + 22 36 40 81 30 2 8 9 1 1 18 4 31 27 21 1 21 37 40 86 29 17 18 4 31 27 + 20 2 20 38 40 72 3 17 1 1 27 11 18 10 25 27 19 3 21 37 41 70 10 14 30 + 6 19 12 3 5 15 27 16 1 1 6 6 1 12 38 39 69 5 28 44 28 11 27 3 1 1 10 + 1 22 5 38 35 77 4 26 46 30 6 27 5 32 6 38 35 81 2 28 1 1 42 28 5 28 5 + 33 5 38 39 115 36 61 4 34 4 39 39 119 32 101 3 38 39 121 30 101 2 6 1 + 32 41 123 25 103 1 5 2 32 41 126 23 108 2 32 41 83 5 38 22 109 2 32 + 41 74 7 5 8 33 22 108 2 32 41 77 8 3 8 31 21 109 3 31 41 128 21 108 3 + 31 41 128 21 108 7 27 41 102 13 1 2 9 22 108 17 17 41 88 61 108 17 2 + 4 11 41 86 26 7 31 107 18 1 7 8 41 91 59 107 30 4 41 96 54 107 32 2 + 41 101 49 107 75 104 46 107 75 108 2 2 38 107 75 116 34 107 17 2 18 7 + 9 2 20 117 10 2 3 4 14 107 17 2 18 14 1 4 19 123 3 4 2 5 14 106 37 29 + 10 129 21 105 38 31 8 129 22 104 39 31 7 133 17 105 40 31 7 134 15 + 105 39 33 5 137 13 104 40 34 4 138 12 105 39 34 4 139 11 106 38 34 4 + 140 10 105 40 32 5 139 12 104 39 184 5 105 38 185 3 106 38 184 5 105 + 38 183 6 105 5 1 32 183 7 105 4 1 32 186 3 106 3 4 30 187 2 105 5 2 1 + 1 8 1 20 187 2 106 7 3 18 4 5 188 1 106 8 1 20 3 5 186 2 107 37 185 4 + 106 37 184 5 106 37 185 3 107 38 294 38 294 8 2 28 294 8 2 28 294 38 + 294 38 294 39 293 8 2 29 294 38 293 39 294 38 294 3 8 5 1 21 294 4 16 + 18 294 3 19 16 294 3 21 14 295 2 24 11 322 1 2 7 326 6 327 5 327 5 + 328 4 328 4 329 4 328 4 329 3 330 2 331 1 289 0 + + + + 54448.0 + + + 2.0243902439 + + + 12629.0 + + + 0.209438593713 + + + 0.624977260324 + + + 0.516915821472 0.477694487369 0.841090385926 0.0777088882387 + -0.146822340239 -0.122625582602 -0.0169258243063 0.0508893801585 + 0.00254840163011 + + + 332.0 + + + 1.55120481928 2.74390243902 + + + 0.987951807229 2.74698795181 2.04819277108 0.421686746988 + 0.439024390244 5.9512195122 3.73170731707 0.853658536585 + + + 164.0 + + + 39.0 194.0 0.279532967033 48.0 5.0 15.0 + + + 0.0 0.993902439024 + + + 0.231946076991 + + + 0.0429033205995 0.254187481634 0.579782544813 0.31531002057 + 0.00029385836027 0.382309726712 0.0405524537173 0.0 0.0 + 0.471054951513 0.454305024978 0.0176315016162 0.3690861005 + 0.627093740817 0.156626506024 0.0 + + + 0.0 0.0 0.0 0.0801393728223 0.143902439024 0.783972125436 + 0.891463414634 0.362369337979 0.0 0.165532879819 0.370238095238 + 0.549886621315 0.816666666667 0.560090702948 0.00595238095238 + 0.0283446712018 0.0 0.00116144018583 0.476829268293 0.485481997677 + 0.00487804878049 0.0 0.0 0.0 0.0 0.0 0.0642857142857 0.496598639456 + 0.154761904762 0.00453514739229 0.0 0.0 0.0 0.0 0.0 0.564459930314 + 0.462195121951 0.317073170732 0.0 0.0 0.0 0.0 0.517857142857 + 0.773242630385 0.625 0.418367346939 0.0714285714286 0.0 + 0.576829268293 0.909407665505 0.614634146341 0.306620209059 + 0.192682926829 0.0 0.0 0.0 0.0 0.0 0.658333333333 0.921768707483 + 0.446428571429 0.0 0.0 0.0 + + + 0.301975309815 0.290628541752 0.129559360384 0.0480979095533 + 0.03061488254 0.410567464399 0.210306834808 0.102070223708 + 0.108053087916 0.0960273434454 0.141411683037 0.202577786064 + 0.331350327424 0.143078434413 + + + + + + + + + 79 2 149 6 4 6 3 2 131 30 122 37 115 37 116 37 114 39 113 40 112 40 + 113 39 112 40 112 40 113 39 113 39 113 39 113 39 113 39 113 39 113 39 + 113 39 113 39 113 39 113 6 2 31 114 3 6 29 122 30 113 39 114 5 3 30 + 123 29 123 29 123 29 124 6 1 21 82 2 4 4 20 1 10 7 2 20 34 6 40 25 5 + 6 6 8 1 21 34 6 37 40 7 27 35 6 37 41 4 29 35 5 38 33 2 7 3 29 35 5 + 38 32 3 15 4 21 34 2 41 75 77 53 1 20 78 19 1 55 14 8 9 1 45 18 2 87 + 45 19 1 87 45 40 10 57 45 39 21 47 45 39 31 37 45 39 31 37 45 39 32 + 36 45 39 33 35 45 39 32 35 46 39 32 36 44 41 1 1 29 36 43 43 29 37 43 + 43 29 39 41 43 28 40 42 41 30 39 42 8 3 31 28 39 42 9 8 25 29 1 1 37 + 44 4 11 25 31 37 44 3 9 28 31 36 12 3 3 2 34 31 31 36 12 3 1 9 32 28 + 31 36 12 24 1 2 25 21 31 36 12 28 18 1 6 20 31 36 12 29 2 4 11 1 6 20 + 31 36 12 35 11 2 5 20 30 4 1 32 12 30 2 1 13 1 6 20 31 36 11 37 10 27 + 31 36 11 43 3 28 31 36 12 73 31 36 11 39 1 34 31 36 11 39 2 34 29 37 + 11 35 8 32 29 37 11 38 13 23 30 37 11 38 19 18 29 37 11 38 32 5 30 7 + 2 27 11 37 34 4 30 36 11 38 34 3 29 37 11 38 35 2 29 37 12 36 37 1 30 + 36 12 37 67 36 12 37 67 36 11 38 67 36 18 31 67 2 7 1 6 4 12 4 21 28 + 67 1 32 3 12 3 5 29 102 1 12 37 102 1 12 38 114 2 1 35 118 34 114 38 + 114 38 114 38 114 38 114 38 113 40 113 39 113 39 113 39 113 39 113 39 + 113 39 113 2 4 33 113 2 5 1 8 23 114 1 13 3 7 15 138 14 145 7 146 5 + 148 5 146 7 146 6 146 6 146 6 147 4 147 6 149 3 149 3 150 1 102 0 + + + + 17784.0 + + + 1.29914529915 + + + 6121.0 + + + 0.154223166149 + + + 0.789851018915 + + + 0.529273340828 0.471857764958 0.271153239863 0.106302371106 + -0.0673717474604 -0.00505329136839 -0.0112732346223 0.0390613567286 + -0.00447165653931 + + + 152.0 + + + 0.796052631579 1.04273504274 + + + 0.447368421053 1.31578947368 1.23684210526 0.184210526316 + 0.17094017094 1.60683760684 2.18803418803 0.205128205128 + + + 117.0 + + + 9.0 65.0 0.222621184919 13.0 4.0 4.0 + + + 0.0 0.991452991453 + + + 0.344185784975 + + + 0.0 0.02722323049 0.666969147005 0.382456140351 0.0 0.762250453721 + 0.470961887477 0.221052631579 0.835753176044 0.520871143376 + 0.124319419238 0.0 0.0862068965517 0.638838475499 0.796733212341 + 0.0 + + + 0.0 0.0 0.112781954887 0.0 0.445614035088 0.421052631579 + 0.445614035088 0.0140350877193 0.0 0.0 0.0 0.0 0.80701754386 1.0 + 1.0 0.0701754385965 0.0 0.0 0.586466165414 0.705263157895 + 0.456140350877 0.46992481203 0.554385964912 0.329824561404 0.0 0.0 + 0.751879699248 0.99298245614 0.891228070175 0.0375939849624 0.0 0.0 + 0.804511278195 0.694736842105 0.718045112782 0.361403508772 + 0.375438596491 0.0864661654135 0.0 0.0 0.842105263158 1.0 + 0.973684210526 0.0736842105263 0.0140350877193 0.0112781954887 0.0 + 0.0 0.131578947368 0.210526315789 0.368421052632 0.99649122807 + 0.99649122807 0.661654135338 0.0 0.0 0.0 0.0 0.221804511278 + 0.922807017544 0.894736842105 0.612781954887 0.0 0.0 + + + 0.347637733305 0.171278257976 0.112966407681 0.123069925361 + 0.0370112543114 0.259039237662 0.0292505692206 0.188361711267 + 0.201675904889 0.0953356126599 0.0204653647293 0.0660102436507 + 0.0451225472199 0.030256018542 + + + + + + + + + 39 1 79 3 78 3 41 2 27 5 2 4 41 4 8 28 41 6 3 31 41 40 41 40 41 40 41 + 40 41 40 41 40 41 40 41 40 41 41 41 39 42 39 42 39 41 40 42 39 42 39 + 42 39 42 39 41 40 41 42 38 42 39 42 40 41 40 41 40 42 39 41 40 40 41 + 40 43 4 2 32 43 38 43 8 1 29 35 1 7 38 16 1 2 17 7 39 1 34 7 8 1 65 7 + 8 1 65 8 73 7 21 1 52 7 74 7 35 1 38 8 32 3 38 8 3 3 10 1 3 15 38 8 3 + 32 38 8 2 33 38 8 2 34 37 8 2 34 38 8 1 34 38 8 1 34 38 8 2 32 39 43 + 38 43 38 43 39 42 38 42 34 47 38 43 39 42 40 42 39 42 40 41 39 42 39 + 42 39 42 39 42 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 + 40 41 40 41 17 1 3 1 2 12 4 41 3 34 2 43 1 35 2 79 2 78 4 78 3 79 2 + 78 4 77 4 77 4 78 3 78 1 2 0 + + + + 7290.0 + + + 0.9 + + + 3295.0 + + + 0.130804248862 + + + 1.46109637489 + + + 0.500758725341 0.461294777583 0.14949692576 0.134248926128 + 0.0991086373071 -0.000611672679373 0.00250807841925 + 0.00176011920975 0.0019495686269 + + + 81.0 + + + 0.308641975309 0.333333333333 + + + 0.395061728395 0.148148148148 0.197530864198 0.493827160494 + 0.177777777778 0.444444444444 0.444444444444 0.222222222222 + + + 90.0 + + + 6.0 31.0 0.189427312775 3.0 2.0 5.0 + + + 0.0 0.988888888889 + + + 0.451989026063 + + + 0.743181818182 0.884782608696 0.0590909090909 0.0 0.847727272727 + 0.989130434783 0.025 0.0 0.05 0.4 1.0 0.528260869565 0.0 + 0.31884057971 0.854978354978 0.534161490683 + + + 0.518181818182 0.845454545455 0.909090909091 0.666666666667 + 0.145454545455 0.0 0.0 0.0 0.609090909091 1.0 1.0 0.975 + 0.0909090909091 0.0 0.0 0.0 0.636363636364 1.0 1.0 0.991666666667 + 0.0272727272727 0.0 0.0 0.0 0.754545454545 1.0 1.0 0.966666666667 + 0.0363636363636 0.0363636363636 0.0 0.0 0.0909090909091 + 0.109090909091 0.181818181818 0.691666666667 1.0 1.0 1.0 + 0.116666666667 0.0 0.0 0.0 0.675 1.0 1.0 1.0 0.075 0.0 0.0 0.0 0.75 + 1.0 1.0 1.0 0.025 0.0 0.0 0.0 0.484848484848 0.702479338843 + 0.743801652893 0.909090909091 0.265151515152 + + + 0.494165182499 0.161414359496 0.0124768537181 0.00877578366618 + 0.116940579468 0.375083134767 0.0587316175831 0.0155047371261 + 0.0071946799341 0.0134980949731 0.148689941328 0.338451161965 + 0.104202712105 0.0399794908228 + + + + + + + + + 38 1 38 2 2 3 32 3 2 9 4 6 1 18 2 38 2 38 2 38 2 38 2 38 2 38 2 38 1 + 5 1 33 1 5 2 32 1 39 1 39 1 40 1 39 1 39 1 39 1 39 1 39 1 39 1 39 1 + 39 1 3 5 24 8 3 5 24 8 4 1 34 1 3 6 30 3 1 5 31 2 38 2 38 2 38 2 38 2 + 38 2 38 2 38 2 38 2 38 2 38 2 38 3 37 3 37 3 37 3 37 3 37 4 32 2 2 10 + 11 18 1 + + + + 1880.0 + + + 0.851063829787 + + + 1619.0 + + + 0.140210006177 + + + 1.01692307692 + + + 0.517540108646 0.520127829847 0.0744224215366 0.0979203893316 + 0.00303532965295 -0.00036870319409 0.000103092819811 + -0.00115419856917 0.000554453124835 + + + 40.0 + + + 0.5 0.255319148936 + + + 1.3 0.0 0.0 0.7 0.255319148936 0.170212765957 0.425531914894 + 0.0851063829787 + + + 47.0 + + + 3.0 18.0 0.163742690058 1.0 3.0 2.0 + + + 0.0 0.978723404255 + + + 0.861170212766 + + + 0.681818181818 0.916666666667 0.65 0.675 0.690909090909 1.0 1.0 1.0 + 0.718181818182 1.0 1.0 0.925 0.709090909091 0.966666666667 + 0.883333333333 0.908333333333 + + + 0.44 0.8 0.966666666667 0.8 0.6 0.6 0.566666666667 0.3 0.4 1.0 0.9 + 1.0 0.4 1.0 1.0 0.833333333333 0.24 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.4 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.36 1.0 1.0 1.0 1.0 1.0 1.0 + 0.866666666667 0.4 1.0 1.0 1.0 1.0 1.0 1.0 0.833333333333 0.4 1.0 + 1.0 1.0 0.866666666667 1.0 1.0 0.833333333333 0.56 0.8 + 0.866666666667 1.0 0.666666666667 1.0 1.0 0.8 + + + 0.367874031978 0.0413348590417 0.00596781806137 0.012355016907 + 0.0693022605007 0.0606391727614 0.0852125432122 0.0145678808404 + 0.015234481577 0.00813110893786 0.130032239091 0.00825002621252 + 0.125549141695 0.0329336842181 + + + + + + + + + 1 4 1 27 1 2 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 + 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 36 35 36 35 36 34 38 + 33 37 34 37 35 36 29 2 4 37 26 4 5 36 26 5 3 37 28 1 5 36 29 1 5 36 + 29 1 5 36 29 1 6 36 28 1 6 42 4 9 9 1 6 60 3 2 6 65 6 65 6 65 6 65 6 + 65 6 65 6 65 6 66 6 6 6 5 12 36 6 5 8 3 14 35 6 5 9 1 15 35 6 5 25 35 + 6 4 26 35 6 4 26 34 7 4 26 34 7 4 26 35 6 4 26 34 7 4 26 35 6 4 26 35 + 6 4 26 35 6 4 26 35 6 4 26 35 7 3 27 34 7 3 27 34 7 3 26 35 7 3 26 35 + 7 3 26 35 8 2 26 35 8 2 26 35 8 2 26 35 8 2 26 35 8 2 26 35 8 2 27 34 + 8 2 26 35 7 3 26 35 7 3 26 35 7 3 26 35 7 2 27 36 6 2 27 36 6 2 27 36 + 7 1 27 36 7 1 27 4 2 7 4 2 3 14 7 1 58 5 6 2 59 4 7 1 60 3 7 1 60 3 7 + 1 60 3 6 2 59 5 6 2 59 4 67 4 67 5 67 3 67 4 68 3 69 2 6 2 68 3 68 2 + 69 2 69 2 70 1 70 1 69 2 69 2 70 1 70 1 65 0 + + + + 7100.0 + + + 0.71 + + + 3163.0 + + + 0.159974707556 + + + 1.3836534167 + + + 0.480118332505 0.39377971942 0.123508935065 0.148383524529 + 0.0763783441509 0.0013709136771 -0.0033379379863 0.00685849408762 + 0.00447892036113 + + + 71.0 + + + 0.295774647887 0.6 + + + 0.507042253521 0.112676056338 0.112676056338 0.450704225352 0.12 + 0.84 1.0 0.44 + + + 100.0 + + + 7.0 14.0 0.1589958159 4.0 2.0 3.0 + + + 0.0 0.99 + + + 0.445492957746 + + + 0.945882352941 0.705882352941 0.162352941176 0.0705882352941 + 0.997777777778 0.731111111111 0.104444444444 0.00444444444444 + 0.0733333333333 0.751111111111 1.0 0.0244444444444 0.00444444444444 + 0.58 0.84 0.137777777778 + + + 0.864583333333 0.903846153846 0.802083333333 0.634615384615 + 0.427083333333 0.269230769231 0.114583333333 0.182692307692 1.0 1.0 + 1.0 0.418803418803 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.435897435897 0.0 + 0.0 0.0 0.0 0.990740740741 1.0 1.0 0.529914529915 0.203703703704 + 0.213675213675 0.0185185185185 0.0 0.111111111111 0.179487179487 + 0.583333333333 1.0 1.0 1.0 0.0648148148148 0.0 0.0 0.0 + 0.37962962963 1.0 1.0 1.0 0.037037037037 0.0 0.0 0.0 0.37037037037 + 1.0 1.0 1.0 0.0648148148148 0.0 0.0 0.017094017094 0.296296296296 + 0.615384615385 0.657407407407 0.700854700855 0.462962962963 + 0.042735042735 + + + 0.590679131386 0.103670733021 0.0258218839892 0.0147477643399 + 0.318362833202 0.309150473394 0.040980766848 0.035331970464 + 0.0423837544651 0.018056330208 0.0569037226631 0.378335829866 + 0.123095675934 0.026999305953 + + + + + + + + + 129 5 34 2 217 1 34 5 217 1 36 3 217 1 36 3 217 2 35 3 217 2 35 3 217 + 2 34 4 217 24 12 4 217 30 5 5 217 40 218 39 218 39 218 39 218 39 218 + 39 218 39 218 39 218 39 218 39 218 40 218 39 218 39 218 39 218 39 218 + 39 90 3 125 39 89 5 124 39 88 7 123 39 88 8 131 30 88 10 120 1 1 2 1 + 2 1 18 2 9 90 10 120 38 89 11 119 39 88 11 120 38 88 11 1 1 118 38 88 + 15 116 38 88 16 115 31 1 6 88 16 115 36 90 17 114 37 89 17 114 37 89 + 17 80 1 33 36 90 17 80 2 32 32 1 3 90 17 80 3 31 39 87 16 5 2 74 12 + 22 39 87 17 4 3 73 12 7 2 13 39 87 18 3 3 73 13 1 2 3 5 10 18 1 20 88 + 18 2 3 74 16 2 6 9 39 88 19 1 3 73 27 7 35 1 3 88 19 2 3 73 14 1 13 4 + 35 3 2 87 20 1 6 70 29 4 35 3 2 87 26 1 3 9 2 56 17 2 49 3 2 85 28 1 + 5 9 1 56 16 2 19 16 13 4 2 86 28 1 6 9 2 53 16 2 18 23 7 5 1 86 21 3 + 6 3 3 9 2 52 16 2 18 35 1 86 22 5 5 1 3 5 1 3 5 49 16 2 18 35 1 88 19 + 6 8 4 14 1 3 42 16 2 18 124 20 3 2 3 6 4 2 2 13 42 16 2 18 124 20 4 2 + 4 5 2 4 2 12 40 18 2 18 124 20 4 2 4 1 1 3 2 12 46 17 2 20 123 20 10 + 1 12 7 45 40 122 16 1 4 8 2 13 9 5 2 35 40 33 1 88 16 1 4 9 1 13 13 2 + 2 34 39 33 3 87 21 19 23 32 14 2 1 1 21 34 2 38 3 46 22 4 2 3 3 8 23 + 31 13 7 18 35 1 38 3 46 20 6 3 1 5 9 23 29 5 7 2 6 18 74 2 47 20 4 1 + 1 3 1 4 11 24 29 5 2 9 1 18 35 1 39 3 46 34 3 2 8 24 27 36 35 1 38 3 + 47 29 1 10 9 22 28 34 35 1 37 6 34 2 9 20 1 9 2 3 4 3 11 23 2 4 15 1 + 2 33 35 1 39 2 33 5 9 19 3 14 14 1 1 31 12 38 35 1 39 1 36 3 9 18 5 + 11 1 1 11 36 13 15 2 20 75 1 36 2 10 16 8 15 4 19 2 17 14 1 1 1 6 7 1 + 21 75 1 36 2 10 3 6 7 10 14 3 41 10 4 5 30 75 1 35 3 10 3 6 7 12 57 2 + 2 4 5 2 11 1 21 75 2 33 4 10 3 8 5 13 7 2 24 2 21 3 1 4 9 2 2 7 20 75 + 2 7 1 5 1 19 5 9 3 8 5 15 3 4 2 1 1 1 47 2 8 14 19 75 11 3 6 15 5 9 3 + 11 2 30 53 7 5 2 20 75 11 1 21 1 6 10 2 11 2 19 2 9 15 7 2 2 3 5 22 4 + 5 1 21 75 40 10 2 34 2 5 17 11 2 6 19 8 2 4 20 75 40 10 2 35 5 1 24 4 + 4 2 21 15 20 74 40 10 2 36 20 1 2 1 14 4 3 10 5 15 20 73 41 10 2 39 + 25 15 2 11 2 16 20 74 41 10 2 40 15 4 6 14 2 3 2 6 2 16 20 74 41 10 3 + 40 2 1 15 1 7 17 6 2 4 7 2 6 19 74 41 10 3 44 23 16 3 5 6 3 7 3 19 75 + 40 10 3 46 24 9 1 4 3 14 6 2 20 74 21 1 20 9 3 47 23 9 1 4 8 13 3 2 + 19 74 42 9 3 48 8 2 6 2 5 5 1 1 3 3 6 26 13 74 42 9 3 52 5 2 33 1 1 + 25 10 74 42 9 3 53 1 6 1 4 26 2 1 26 9 74 42 9 3 60 1 5 5 1 23 28 6 + 75 41 9 3 69 25 30 5 75 41 9 3 73 21 31 4 75 41 9 3 75 7 6 6 32 3 75 + 41 9 3 75 5 9 5 33 2 75 41 9 3 75 6 7 6 110 41 9 3 55 3 6 3 8 6 7 6 + 110 41 9 3 55 4 6 19 1 10 109 20 1 7 1 1 1 1 18 3 54 2 1 3 10 25 109 + 34 1 1 14 3 70 25 109 20 1 19 10 3 75 20 109 20 2 12 3 3 10 3 75 20 + 109 20 1 19 10 3 52 3 5 2 9 24 109 20 1 21 8 3 53 42 109 20 1 12 1 8 + 9 3 57 37 109 40 1 1 9 3 56 38 109 41 10 3 58 15 1 20 109 42 9 3 59 + 35 109 42 9 3 61 33 109 20 1 21 9 3 63 31 109 20 1 21 9 3 71 2 1 20 + 109 20 2 20 9 4 74 19 110 41 9 4 74 4 1 14 78 5 3 1 22 42 10 2 74 20 + 78 73 10 3 74 6 2 12 76 75 10 1 85 10 76 19 1 55 8 4 85 9 76 52 1 18 + 1 3 8 4 85 9 76 15 3 34 1 16 3 2 9 4 84 11 75 13 5 27 1 6 1 16 3 2 9 + 4 87 8 75 13 5 20 18 12 5 1 10 3 88 6 75 16 1 21 24 2 1 4 5 2 9 3 89 + 5 75 38 36 2 9 3 92 2 75 38 36 2 9 3 169 38 36 2 9 3 169 40 34 3 8 3 + 170 39 33 4 8 3 166 1 1 40 34 4 8 3 166 1 2 39 35 3 8 3 166 2 1 39 35 + 4 8 2 166 1 2 38 36 3 9 2 169 38 37 3 8 2 169 38 37 2 9 2 169 38 37 3 + 8 2 170 7 1 29 37 3 8 2 170 7 1 29 37 3 8 2 169 38 38 2 9 1 169 38 38 + 2 9 1 169 8 1 29 37 3 180 37 38 1 180 38 38 1 180 38 38 1 180 38 38 1 + 180 38 219 38 220 38 218 38 219 8 1 29 220 38 219 7 1 19 4 7 219 6 2 + 21 3 6 219 38 219 38 219 38 219 38 219 38 219 6 1 31 219 2 13 8 2 2 1 + 10 219 1 31 6 253 4 254 3 255 2 256 1 256 1 39 0 + + + + 41634.0 + + + 1.58641975309 + + + 9555.0 + + + 0.245944531659 + + + 1.56265910669 + + + 0.542353071036 0.492083426777 0.554440061914 0.140967194198 + 0.112619900597 -0.110081648126 0.030775539558 0.024863226779 + 0.00384322642058 + + + 257.0 + + + 1.51750972763 3.17283950617 + + + 1.68093385214 2.8326848249 0.700389105058 0.824902723735 + 0.765432098765 6.14814814815 4.32098765432 1.33333333333 + + + 162.0 + + + 68.0 235.0 0.214486638537 49.0 3.0 10.0 + + + 0.0 0.993827160494 + + + 0.229499927944 + + + 0.068359375 0.512576219512 0.08046875 0.0141006097561 0.000390625 + 0.489710365854 0.3640625 0.000762195121951 0.499609375 + 0.264862804878 0.080859375 0.163490853659 0.0 0.120075046904 + 0.651923076923 0.355347091932 + + + 0.0 0.2734375 0.7140625 0.474702380952 0.0921875 0.0984375 + 0.0578125 0.0 0.0 0.0 0.1953125 0.660714285714 0.121875 0.009375 + 0.0 0.0 0.0 0.0 0.0 0.520833333333 0.5046875 0.4453125 0.0 0.0 0.0 + 0.0015625 0.7109375 0.714285714286 0.28125 0.225 0.003125 0.0 + 0.60625 0.840625 0.578125 0.282738095238 0.14375 0.0 0.0 0.0 + 0.2234375 0.328125 0.19375 0.016369047619 0.0 0.1796875 0.4046875 + 0.252976190476 0.0 0.0 0.0 0.171130952381 0.3859375 0.6 0.7921875 + 0.580357142857 0.0 0.0 0.0 0.295815295815 0.830303030303 + 0.781818181818 0.0757575757576 0.0 + + + 0.375055523563 0.196309039954 0.0929422846535 0.0787601921895 + 0.0823663390154 0.229047660538 0.142542280966 0.225839646861 + 0.205856024871 0.0673808228608 0.0704149550279 0.0444320246279 + 0.205917497589 0.097480178587 + + + + + + + + + 31 1 32 2 30 3 30 3 30 2 31 2 15 3 13 2 13 6 12 1 13 7 12 1 13 7 11 3 + 11 9 9 3 12 9 7 5 12 10 6 5 11 11 22 11 20 14 20 13 5 1 14 13 3 3 13 + 15 1 4 13 14 1 6 12 21 12 20 12 20 12 15 1 1 16 14 18 14 3 1 14 23 9 + 24 9 24 9 23 10 10 1 12 10 9 3 10 11 9 3 8 13 9 2 9 13 20 12 20 13 20 + 13 16 17 6 3 1 23 9 3 1 1 4 14 10 3 2 1 3 14 8 5 1 1 4 14 11 4 3 15 + 18 15 18 15 17 17 16 17 9 4 3 17 4 10 2 17 3 11 1 18 3 11 2 17 2 32 1 + 203 2 30 3 29 5 28 6 27 6 27 6 27 6 28 2 1 1 30 1 24 0 + + + + 2211.0 + + + 0.492537313433 + + + 741.0 + + + 0.411605937922 + + + 0.897759103641 + + + 0.396339406208 0.447307078886 0.068191163662 0.25341777004 + -0.0682508904997 0.00850140708788 0.00245132315976 + -0.00932283189879 0.0484380861755 + + + 33.0 + + + 1.21212121212 0.44776119403 + + + 0.484848484848 2.42424242424 1.33333333333 0.606060606061 + 0.417910447761 0.477611940299 0.65671641791 0.119402985075 + + + 67.0 + + + 9.0 32.0 0.224637681159 8.0 6.0 2.0 + + + 0.0 0.985074626866 + + + 0.335142469471 + + + 0.0078125 0.419117647059 0.845588235294 0.132352941176 0.4375 + 0.948529411765 0.669117647059 0.198529411765 0.234375 + 0.830882352941 0.308823529412 0.00735294117647 0.229166666667 + 0.183006535948 0.0 0.0 + + + 0.0 0.0 0.0 0.40625 0.71875 0.888888888889 0.1875 0.0 0.0 0.03125 + 0.333333333333 1.0 0.96875 0.805555555556 0.0 0.333333333333 0.0 + 0.5625 1.0 0.9375 0.75 0.583333333333 0.0 0.722222222222 0.1875 1.0 + 1.0 0.84375 0.71875 0.638888888889 0.03125 0.0 0.09375 0.8125 + 0.972222222222 0.9375 0.71875 0.361111111111 0.03125 0.0 0.0 + 0.03125 0.583333333333 0.84375 0.1875 0.0 0.0 0.0 0.0 0.125 + 0.555555555556 0.25 0.0 0.0 0.0 0.0 0.4 0.325 0.0 0.0 0.0 0.0 0.0 + 0.0 + + + 0.625053998399 0.11800239847 0.0610660712234 0.038293145573 + 0.600858612841 0.21924342107 0.0572443164655 0.0555785665399 + 0.0301784323519 0.0658563920682 0.360298365925 0.286013739894 + 0.0655129301091 0.0330899665972 + + + + + + + + + 9 3 13 3 12 1 1 2 12 1 1 2 12 4 11 6 10 6 10 6 30 1 11 6 9 8 9 7 7 9 + 6 10 7 9 8 8 8 5 12 1 14 2 14 3 14 3 13 4 2 2 15 1 11 1 11 1 2 2 8 5 + 11 4 12 3 13 5 6 1 5 4 6 2 6 2 14 2 12 4 12 2 16 3 10 3 13 3 12 4 13 + 2 13 3 4 4 4 5 3 5 2 5 5 1 6 4 12 4 12 3 13 3 244 2 13 4 12 4 13 2 31 + 1 15 4 13 3 14 1 4 0 + + + + 1120.0 + + + 0.228571428571 + + + 224.0 + + + 1.16517857143 + + + 0.901864035088 + + + 0.511011904762 0.381534679089 0.0482678649724 1.411814609 + -0.0791525437602 -0.00193869292169 0.0912039849828 0.0138821467329 + 1.12154706531 + + + 16.0 + + + 2.8125 0.128571428571 + + + 0.5 4.25 5.0 1.5 0.114285714286 0.228571428571 0.171428571429 0.0 + + + 70.0 + + + 2.0 4.0 0.285714285714 9.0 4.0 1.0 + + + 0.0 0.985714285714 + + + 0.2 + + + 0.0 0.0555555555556 0.382352941176 0.0 0.279411764706 + 0.513888888889 0.220588235294 0.0277777777778 0.838235294118 + 0.166666666667 0.117647058824 0.236111111111 0.235294117647 + 0.0833333333333 0.0441176470588 0.0277777777778 + + + 0.0 0.0 0.0 0.0 0.1875 0.222222222222 0.0 0.0 0.0 0.0 0.0 + 0.222222222222 0.6875 0.444444444444 0.0 0.0 0.0 0.222222222222 0.0 + 0.777777777778 0.6875 0.111111111111 0.0 0.0 0.1875 0.666666666667 + 0.555555555556 0.722222222222 0.125 0.0 0.0 0.111111111111 0.75 + 0.777777777778 0.444444444444 0.0 0.1875 0.0 0.0 0.555555555556 1.0 + 0.833333333333 0.222222222222 0.0 0.3125 0.0 0.0 0.388888888889 + 0.1875 0.722222222222 0.0555555555556 0.0 0.1875 0.0 0.0 + 0.111111111111 0.0 0.0 0.111111111111 0.166666666667 0.0 0.0 0.0 + 0.0 + + + 0.620726115374 0.157101749328 0.180500278974 0.058876121036 + 0.669018300284 0.308928536188 0.1146307932 0.154726655576 + 0.112031867964 0.0922182219684 0.407895305475 0.563208734954 + 0.138414907338 0.11139079144 + + + + + + + + + 1 2 5 3 4 3 4 3 4 3 4 3 4 3 4 2 5 3 5 1 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 + 2 5 3 4 4 4 2 5 2 5 2 5 1 5 3 3 4 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 + 4 3 4 3 4 3 4 3 4 3 4 3 4 3 3 5 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 + 3 4 3 4 3 4 3 4 3 4 3 5 2 5 2 5 2 4 3 4 4 3 4 3 3 4 4 3 4 3 4 3 4 4 3 + 4 3 4 3 4 3 4 3 4 3 4 3 3 4 3 4 3 4 4 3 4 4 4 2 32 4 3 4 3 4 3 4 3 4 + 3 4 3 4 3 4 3 4 3 4 3 5 2 5 2 4 3 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 3 4 3 + 3 4 4 3 4 3 4 3 4 3 4 3 4 3 4 4 3 5 2 5 1 6 1 20 1 5 3 4 2 5 2 6 1 29 + 0 + + + + 917.0 + + + 0.0534351145038 + + + 384.0 + + + 0.786458333333 + + + 1.0332247557 + + + 0.483506944444 0.504647435897 0.00526421158402 3.17237571434 + 0.0848114578812 0.000174705664666 0.0189209675507 0.00290458001825 + -1.00025638405 + + + 7.0 + + + 2.85714285714 0.0 + + + 0.571428571429 2.28571428571 2.28571428571 1.14285714286 0.0 0.0 + 0.0 0.0 + + + 131.0 + + + 2.0 11.0 0.105691056911 4.0 31.0 1.0 + + + 0.0 0.961832061069 + + + 0.418756815703 + + + 0.03125 0.030303030303 0.0 0.0 0.921875 0.954545454545 + 0.530303030303 0.136363636364 0.328125 0.545454545455 + 0.878787878788 0.606060606061 0.0 0.0 0.227272727273 0.69696969697 + + + 0.0 0.0625 0.0588235294118 0.0 0.0 0.0 0.0 0.0 0.0 0.0625 + 0.0588235294118 0.0 0.0 0.0 0.0 0.0 0.9375 0.75 1.0 0.8125 0.4375 + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.705882352941 0.5625 0.0 0.4375 + 0.8125 1.0 1.0 1.0 0.764705882353 1.0 0.117647058824 0.0 0.0625 + 0.0588235294118 0.125 1.0 0.764705882353 1.0 0.352941176471 0.0 0.0 + 0.0 0.0 0.0625 0.705882352941 1.0 0.647058823529 0.0 0.0 0.0 0.0 + 0.0 0.117647058824 0.875 0.294117647059 + + + 0.424574044209 0.264677986581 0.0984353303244 0.0332400801756 + 0.293304231004 0.421940252944 0.22470836149 0.0217483156037 + 0.107048810877 0.0615237865295 0.255547823695 0.4098180253 + 0.369758673791 0.199844431761 + + + + + + + + + 2 1 8 2 8 2 8 2 8 3 6 5 6 3 7 3 7 4 6 4 6 5 5 4 6 3 7 2 8 2 8 2 8 2 8 + 2 8 2 8 2 8 2 8 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 2 8 1 9 1 + 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 + 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 2 8 2 8 2 7 3 8 2 8 2 + 8 2 8 3 7 2 9 1 9 1 8 2 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 69 2 + 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 9 1 8 + 3 7 3 8 2 8 2 8 2 8 2 8 2 8 4 6 4 6 4 6 5 5 5 5 3 8 1 19 4 6 4 5 6 5 + 5 5 5 5 5 5 4 6 3 8 2 8 2 2 0 + + + + 1350.0 + + + 0.0740740740741 + + + 244.0 + + + 1.29508196721 + + + 1.0170236913 + + + 0.357923497268 0.540035478346 0.0204254430988 8.57562713124 + 0.316166744133 0.00225808469421 0.249030181362 0.0266816504056 + -4.76684232799 + + + 10.0 + + + 1.6 0.0 + + + 0.8 2.4 1.2 0.8 0.0 0.0 0.0 0.0 + + + 135.0 + + + 0.0 4.0 0.112 3.0 13.0 1.0 + + + 0.0 0.992592592593 + + + 0.180740740741 + + + 0.5 0.5 0.117647058824 0.0 0.363636363636 0.0294117647059 + 0.294117647059 0.323529411765 0.0151515151515 0.0 0.0 + 0.558823529412 0.0 0.0 0.0 0.274509803922 + + + 0.0625 0.0 0.0 0.0 0.0588235294118 0.0 0.0 0.0 0.9375 1.0 1.0 1.0 + 0.411764705882 0.0 0.0 0.0 1.0 0.352941176471 0.0 0.176470588235 + 1.0 0.176470588235 0.0 0.0 0.4375 0.0 0.0 0.0 0.0294117647059 + 0.264705882353 0.794117647059 0.176470588235 0.0625 0.0 0.0 0.0 0.0 + 0.0 0.470588235294 0.823529411765 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0588235294118 0.882352941176 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0588235294118 0.823529411765 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.382352941176 + + + 0.205260486799 0.374070873971 0.176924368573 0.0609249547309 + 0.0523243583 0.399900202548 0.366032044153 0.0801548106236 + 0.211626549465 0.116794647482 0.323692578892 0.0905019755422 + 0.512124538186 0.339501596744 + + + + + + + + + 4 1 29 2 27 3 2 1 24 7 23 7 23 8 22 9 21 4 1 4 21 3 2 4 21 2 3 3 22 2 + 28 1 29 2 28 2 28 3 27 4 26 4 26 4 26 5 25 5 24 13 17 3 2 9 17 13 17 + 13 16 15 15 15 15 3 2 11 20 1 2 5 22 1 4 2 28 3 21 1 5 2 17 2 2 2 4 3 + 17 2 2 3 3 3 16 3 2 3 3 5 4 2 9 3 1 4 2 6 2 4 8 9 1 6 2 4 7 17 3 4 6 + 17 3 5 5 6 1 11 1 6 5 18 1 7 4 18 1 8 3 27 3 4 1 22 3 1 4 12 2 8 3 1 + 4 1 1 10 3 7 4 3 1 12 2 8 4 2 3 12 1 8 5 1 3 11 3 7 4 1 5 2 5 2 4 7 4 + 1 6 1 6 1 4 7 4 1 6 1 6 1 4 7 4 1 12 2 3 8 23 2 3 2 24 1 2 3 23 7 16 + 14 15 15 16 4 2 8 4 1 11 4 1 6 1 2 2 5 10 3 3 4 5 5 18 1 28 3 28 1 37 + 4 27 3 26 4 26 4 26 4 26 5 25 6 24 8 21 6 24 7 23 8 22 10 21 10 20 15 + 15 16 14 17 13 18 12 20 10 21 9 23 7 24 6 25 5 26 4 17 1 9 3 16 4 7 3 + 3 1 12 5 6 3 3 2 11 5 6 3 4 1 12 4 6 3 4 1 2 4 5 5 3 1 1 4 4 8 1 1 2 + 5 1 8 9 4 4 4 1 8 19 1 4 6 26 4 27 3 27 3 27 3 27 4 26 6 15 1 9 7 12 + 3 7 14 6 3 7 15 5 2 8 3 4 1 2 5 5 2 8 3 9 2 7 1 8 3 3 2 12 2 8 3 3 2 + 22 3 3 2 13 1 8 4 8 1 8 1 8 4 17 1 8 4 26 4 2 1 23 4 2 3 21 4 2 5 19 + 4 2 6 19 3 2 8 17 3 2 10 15 3 2 10 4 1 10 3 2 10 4 2 9 3 2 12 1 4 8 3 + 2 12 1 4 8 3 2 13 12 3 2 14 11 2 3 15 11 1 6 12 15 1 2 14 9 2 2 18 8 + 2 2 22 3 4 1 23 1 5 1 29 1 29 1 29 1 29 1 29 1 29 1 29 1 29 1 89 1 29 + 1 29 1 30 1 89 1 29 1 29 1 29 1 29 1 29 1 30 1 24 0 + + + + 4680.0 + + + 0.192307692308 + + + 1836.0 + + + 0.442265795207 + + + 1.16417910448 + + + 0.459488393058 0.496507133319 0.0355961374812 0.66844567558 + 0.0330163589794 0.000954540232844 -0.0144501859151 0.00384762150676 + -0.175616762665 + + + 30.0 + + + 4.83333333333 0.75 + + + 6.53333333333 4.93333333333 5.2 2.26666666667 0.641025641026 + 0.871794871795 0.974358974359 0.512820512821 + + + 156.0 + + + 15.0 84.0 0.219858156028 19.0 6.0 1.0 + + + 0.0 0.99358974359 + + + 0.392307692308 + + + 0.465201465201 0.454212454212 0.681318681319 0.212454212454 + 0.474358974359 0.314102564103 0.884615384615 0.0352564102564 + 0.142857142857 0.340659340659 0.765567765568 0.190476190476 + 0.0512820512821 0.387820512821 0.573717948718 0.317307692308 + + + 0.0 0.283333333333 0.280701754386 0.633333333333 0.666666666667 + 0.416666666667 0.315789473684 0.0 0.75 0.6625 0.289473684211 0.6 + 0.907894736842 0.675 0.315789473684 0.2 0.328947368421 0.6875 + 0.513157894737 0.175 0.894736842105 0.8125 0.0131578947368 0.0 + 0.0394736842105 0.8125 0.526315789474 0.0625 0.907894736842 0.925 + 0.131578947368 0.0 0.0 0.483333333333 0.736842105263 0.116666666667 + 0.894736842105 1.0 0.315789473684 0.0 0.0 0.125 0.526315789474 0.05 + 0.460526315789 0.7875 0.447368421053 0.0 0.0 0.2 0.934210526316 + 0.1375 0.592105263158 1.0 0.684210526316 0.0 0.0 0.0 0.486842105263 + 0.025 0.171052631579 0.5125 0.618421052632 0.0 + + + 0.5620446711 0.177536972087 0.103946831411 0.03867768574 + 0.380098893353 0.410781981477 0.103352468157 0.200380713834 + 0.0348214345872 0.0512264716203 0.129237252656 0.503872536338 + 0.230365204635 0.0706481730365 + + + + + + + + + 41 5 36 11 33 15 35 12 34 11 35 1 4 5 36 2 4 4 46 1 322 2 45 1 38 4 + 43 2 44 10 37 9 38 8 38 9 38 8 39 8 38 9 38 8 39 2 45 1 45 2 45 1 189 + 1 46 1 46 1 32 1 12 2 32 1 12 2 29 1 1 2 12 2 29 4 11 3 29 5 10 3 28 + 6 9 4 28 7 8 3 29 7 8 3 29 7 8 1 30 9 4 4 30 11 2 6 28 10 1 7 29 10 1 + 6 29 6 2 10 29 17 30 17 30 17 29 18 29 17 30 17 30 17 29 18 29 18 29 + 17 29 18 29 9 3 6 29 18 28 19 27 19 28 20 27 9 1 9 28 8 5 6 28 19 28 + 19 28 7 4 7 29 18 29 18 29 17 30 17 30 17 30 16 31 16 31 7 1 8 31 15 + 33 15 32 15 32 15 32 14 34 13 37 10 37 9 37 11 37 9 39 8 39 8 39 8 40 + 6 42 5 42 5 44 1 1 1 44 2 35 0 + + + + 4559.0 + + + 0.484536082474 + + + 967.0 + + + 0.378490175801 + + + 0.60206185567 + + + 0.30702306551 0.59060453292 0.106798770747 0.564491536385 + -0.198943700743 0.0413797253351 0.189037258911 -0.0937428632586 + -0.327669607436 + + + 47.0 + + + 0.787234042553 0.237113402062 + + + 0.765957446809 1.02127659574 0.936170212766 0.255319148936 + 0.0824742268041 0.536082474227 0.247422680412 0.0824742268041 + + + 97.0 + + + 10.0 39.0 0.238341968912 7.0 6.0 3.0 + + + 0.0 0.989690721649 + + + 0.212107918403 + + + 0.0 0.147727272727 0.75 0.683636363636 0.0 0.173611111111 + 0.756944444444 0.326666666667 0.222222222222 0.166666666667 0.0 0.0 + 0.222222222222 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.166666666667 0.883333333333 0.933333333333 + 0.0615384615385 0.0 0.0 0.0 0.541666666667 0.986111111111 + 0.888888888889 0.986111111111 0.730769230769 0.0 0.0 0.0 + 0.444444444444 0.958333333333 0.930555555556 0.861111111111 + 0.448717948718 0.0 0.0 0.0 0.25 0.763888888889 0.375 + 0.0138888888889 0.0 0.0 0.347222222222 0.263888888889 + 0.305555555556 0.0 0.0 0.0 0.0 0.0972222222222 0.444444444444 + 0.0972222222222 0.0 0.0 0.0 0.0 0.0 0.416666666667 0.0555555555556 + 0.0 0.0 0.0 0.0 0.0 0.0 0.416666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.663346595054 0.131712212302 0.19898144743 0.072885016684 + 0.80374760639 0.230853349976 0.100438137553 0.286485176825 + 0.0520401857869 0.0939579620933 0.704321827116 0.386969611245 + 0.112973264835 0.0959541264653 + + + + + + + + + 56 2 60 2 32 2 26 2 31 6 23 2 31 14 14 3 31 31 31 31 31 31 31 32 30 + 32 30 18 2 12 30 18 3 10 32 17 3 10 32 17 3 10 32 30 32 30 32 31 31 + 31 31 31 31 31 31 31 31 31 31 31 5 1 25 31 5 1 25 31 5 1 25 31 5 1 25 + 32 4 2 24 32 3 3 24 32 3 3 24 34 1 2 25 33 2 3 24 33 2 3 24 33 2 4 23 + 33 1 7 22 32 1 5 23 11 1 7 2 12 3 2 25 9 2 7 1 12 4 2 25 31 4 3 24 31 + 3 13 16 29 4 21 3 1 3 30 4 58 4 58 4 34 1 23 4 33 2 23 4 32 3 23 4 31 + 10 17 4 32 18 2 3 3 4 31 26 1 4 31 26 1 4 32 25 1 4 32 25 2 3 32 25 2 + 3 32 25 2 3 32 31 31 31 31 31 31 31 31 31 31 31 31 31 4 1 26 33 1 11 + 13 2 2 31 4 1 1 2 2 4 18 30 11 2 3 1 15 30 11 1 20 30 32 30 32 30 33 + 29 19 1 13 29 16 5 9 1 1 30 8 1 1 3 3 5 9 1 1 30 11 2 3 4 13 29 11 1 + 4 4 12 30 11 1 5 4 11 31 19 1 12 30 32 30 32 30 32 30 32 30 3 2 27 30 + 2 4 1 10 15 30 2 26 5 29 2 27 4 29 2 27 4 29 2 27 4 30 1 27 4 30 1 28 + 3 30 1 28 3 29 3 27 3 59 3 59 4 58 4 59 2 26 0 + + + + 5828.0 + + + 0.659574468085 + + + 2662.0 + + + 0.193463561232 + + + 0.760585065435 + + + 0.492462218719 0.460313613339 0.10034211341 0.183046061686 + -0.0777361858788 -0.00122834598943 0.0018668374889 + -0.00170476235285 0.00645625301248 + + + 62.0 + + + 0.887096774194 0.808510638298 + + + 1.48387096774 0.838709677419 0.774193548387 0.387096774194 + 0.297872340426 1.10638297872 0.765957446809 1.02127659574 + + + 94.0 + + + 13.0 51.0 0.193905817175 4.0 4.0 3.0 + + + 0.0 0.989361702128 + + + 0.456760466712 + + + 0.0 0.427777777778 0.826086956522 0.4 0.192934782609 0.393229166667 + 0.983695652174 0.427083333333 0.805797101449 0.947222222222 + 0.153623188406 0.236111111111 0.625 0.859375 0.0380434782609 0.0 + + + 0.0 0.0 0.369047619048 0.714285714286 0.818181818182 0.642857142857 + 0.595238095238 0.166666666667 0.0 0.0 0.0 0.65625 1.0 + 0.833333333333 0.833333333333 0.0 0.0 0.0 0.0 0.572916666667 1.0 + 0.958333333333 0.708333333333 0.0 0.386363636364 0.385416666667 + 0.364583333333 0.635416666667 1.0 0.979166666667 1.0 0.0 + 0.662337662338 1.0 1.0 0.857142857143 0.25974025974 0.392857142857 + 0.5 0.511904761905 0.568181818182 0.96875 1.0 0.927083333333 0.0 + 0.0 0.0 0.0 0.534090909091 0.9375 1.0 0.96875 0.0227272727273 0.0 + 0.0 0.0 0.431818181818 0.572916666667 0.791666666667 0.677083333333 + 0.136363636364 0.0 0.0 0.0 + + + 0.461915538992 0.1531827049 0.0159206841461 0.0148722262226 + 0.0814841382704 0.325414537736 0.0540100482515 0.00852345854452 + 0.0298060001338 0.0096363222307 0.111492497035 0.273274476518 + 0.125272781159 0.024182759162 + + + + + + + + + 0 1 32 2 37 1 31 3 35 2 19 8 1 5 36 14 1 20 36 35 36 35 36 35 36 35 + 36 35 36 35 36 35 37 34 36 35 36 35 36 35 36 35 36 35 37 34 36 34 37 + 35 37 34 37 34 37 34 37 34 37 33 38 6 1 26 38 4 3 26 37 35 36 34 37 + 34 37 34 38 34 37 34 34 1 2 34 33 2 2 33 34 2 2 33 33 4 1 33 31 5 2 + 33 33 3 2 33 31 5 2 33 9 27 2 34 3 32 2 68 3 68 3 68 3 20 1 5 1 41 2 + 13 16 18 1 21 3 3 26 17 1 21 3 2 27 39 3 2 26 40 3 2 26 40 3 2 25 41 + 31 42 29 42 28 43 28 43 28 42 29 42 28 43 29 41 31 40 31 40 31 40 31 + 40 31 40 31 40 31 40 31 41 30 40 31 40 31 40 31 40 31 40 31 40 31 39 + 32 40 31 40 31 40 31 40 31 40 31 40 31 14 1 4 4 1 1 14 32 8 27 4 32 4 + 33 3 31 3 34 3 32 1 36 2 32 1 36 2 69 1 212 2 69 1 3 0 + + + + 6461.0 + + + 0.78021978022 + + + 3173.0 + + + 0.134572959344 + + + 1.48267790262 + + + 0.490076988879 0.477868823756 0.119814619059 0.154590063851 + 0.0893281090759 0.00185284722996 -0.00490205033751 + -0.00236847975564 -0.00567237711301 + + + 71.0 + + + 0.380281690141 0.373626373626 + + + 0.450704225352 0.225352112676 0.112676056338 0.450704225352 + 0.21978021978 0.483516483516 0.351648351648 0.351648351648 + + + 91.0 + + + 6.0 37.0 0.169117647059 6.0 3.0 3.0 + + + 0.0 0.989010989011 + + + 0.491100448847 + + + 0.860962566845 0.941176470588 0.0613810741688 0.0 0.90404040404 + 0.966183574879 0.347826086957 0.224637681159 0.00252525252525 + 0.234299516908 0.995169082126 0.557971014493 0.0 0.289855072464 + 0.917874396135 0.538647342995 + + + 0.772727272727 0.954545454545 0.875 0.875 0.215909090909 0.0 0.0 + 0.0 0.717171717172 1.0 1.0 1.0 0.0505050505051 0.0 0.0 0.0 + 0.777777777778 1.0 1.0 0.989898989899 0.0 0.0 0.0 0.0 + 0.848484848485 0.989898989899 0.944444444444 0.929292929293 + 0.686868686869 0.703703703704 0.666666666667 0.25 0.010101010101 + 0.0 0.0 0.434343434343 1.0 1.0 1.0 0.175925925926 0.0 0.0 0.0 + 0.545454545455 0.979797979798 1.0 1.0 0.12962962963 0.0 0.0 0.0 + 0.545454545455 1.0 1.0 1.0 0.157407407407 0.0 0.0 0.0277777777778 + 0.636363636364 0.868686868687 0.805555555556 0.767676767677 + 0.287037037037 + + + 0.457511545257 0.164965679059 0.0303740270956 0.0195684995313 + 0.056055503413 0.353503956764 0.0593988685038 0.0695049003115 + 0.0463878568343 0.00992691483867 0.132490152794 0.266402876958 + 0.0975845455429 0.0409034922986 + + + + + + + + + 38 1 11 3 22 11 78 2 12 4 1 31 77 2 11 38 76 2 11 38 41 2 3 7 10 9 4 + 2 11 38 41 38 10 3 3 32 41 38 10 3 3 32 41 37 11 3 3 32 41 38 10 3 2 + 33 41 38 10 3 1 33 42 38 10 38 41 38 10 38 41 38 11 37 40 39 10 38 41 + 38 10 38 41 38 10 38 41 38 10 38 41 38 10 38 41 38 10 38 41 38 10 38 + 41 38 9 39 41 38 9 39 41 38 10 38 41 38 10 38 40 40 8 39 40 39 9 40 + 39 39 9 40 39 40 9 5 1 34 37 41 10 1 1 1 2 33 36 1 3 39 11 1 2 34 35 + 3 3 38 15 32 41 38 10 1 6 31 41 38 10 1 5 32 42 37 10 1 5 32 42 35 12 + 38 42 33 15 1 1 35 36 1 5 33 20 32 36 1 5 33 20 33 17 2 5 1 10 1 5 35 + 13 41 1 32 5 37 11 74 5 35 1 1 10 75 5 37 11 74 4 39 10 74 5 38 10 4 + 1 25 3 41 5 37 11 2 13 1 18 40 5 36 47 39 5 37 47 38 5 5 4 3 4 1 3 3 + 5 10 46 38 6 2 34 1 45 39 6 2 34 1 46 38 42 1 45 39 42 1 45 39 88 39 + 88 39 88 40 87 40 87 40 87 40 87 35 93 31 95 34 93 40 87 40 88 39 87 + 40 87 40 88 39 88 39 88 39 88 39 87 40 87 40 87 40 88 39 88 39 88 39 + 88 40 87 40 87 40 87 40 87 40 87 11 5 1 5 3 7 1 3 3 88 3 124 2 125 2 + 125 3 417 1 125 2 126 1 + + + + 11557.0 + + + 1.3956043956 + + + 4930.0 + + + 0.141784989858 + + + 1.57171514544 + + + 0.520750829067 0.399643903538 0.273604900595 0.0923030720681 + 0.0948782388533 -0.0232055065628 0.0182259317608 0.0168001879075 + 0.00988157895921 + + + 127.0 + + + 0.44094488189 1.02197802198 + + + 0.0944881889764 0.976377952756 0.283464566929 0.346456692913 + 1.40659340659 1.8021978022 0.571428571429 0.175824175824 + + + 91.0 + + + 3.0 27.0 0.176470588235 8.0 3.0 11.0 + + + 0.0 0.989010989011 + + + 0.426581292723 + + + 0.74780058651 0.927068723703 0.100981767181 0.0 0.605113636364 + 0.59375 0.0421195652174 0.0 0.758522727273 0.823369565217 + 0.271739130435 0.169836956522 0.0 0.298913043478 0.930706521739 + 0.57472826087 + + + 0.527272727273 0.872727272727 0.888888888889 0.806060606061 + 0.218181818182 0.0 0.0 0.0 0.585227272727 1.0 1.0 1.0 + 0.204545454545 0.0 0.0 0.0 0.363636363636 0.5625 0.588541666667 + 0.477272727273 0.176136363636 0.0 0.0 0.0 0.676136363636 + 0.818181818182 0.666666666667 0.636363636364 0.0 0.0 0.0 0.0 + 0.931818181818 1.0 1.0 0.914772727273 0.0 0.0 0.0 0.0 + 0.539772727273 0.5625 0.59375 0.789772727273 0.545454545455 + 0.541666666667 0.517045454545 0.177083333333 0.0 0.0 0.0 + 0.647727272727 1.0 1.0 1.0 0.197916666667 0.0 0.0 0.0208333333333 + 0.579545454545 0.886363636364 0.838541666667 0.954545454545 + 0.213541666667 + + + 0.440547475511 0.1844692218 0.0654710786807 0.0705892575935 + 0.0661343116275 0.358683932839 0.0850784258304 0.19077688022 + 0.168759535873 0.0493911576809 0.00668803843453 0.135865214807 + 0.220686530443 0.028640665795 + + + + + + + + + 100 2 80 1 30 2 80 24 7 2 80 27 4 2 80 33 14 1 65 33 14 1 65 33 14 1 + 65 33 14 1 65 33 14 2 64 20 1 13 13 5 62 17 3 13 13 6 61 3 1 28 13 9 + 59 3 1 28 13 9 59 32 13 10 58 32 13 10 58 33 13 10 57 33 12 11 57 33 + 12 13 55 33 12 13 55 33 12 14 54 33 12 15 53 33 12 13 56 32 12 14 55 + 33 11 14 55 33 12 15 10 1 42 34 10 16 7 6 40 12 2 20 10 17 5 8 38 12 + 3 20 10 19 3 10 36 35 10 21 1 15 32 34 8 39 32 35 8 21 2 13 34 35 8 + 22 3 13 31 36 9 21 4 12 2 2 27 35 10 24 1 19 25 33 10 46 25 12 1 3 5 + 11 10 47 24 3 1 2 1 3 4 1 6 4 2 5 11 24 1 23 22 7 1 2 4 2 4 5 2 6 11 + 48 21 7 1 2 12 2 4 5 11 50 19 6 3 1 12 3 1 7 11 52 17 7 2 2 11 11 11 + 54 15 11 3 19 11 56 13 12 2 19 11 57 13 11 1 20 11 60 10 4 1 27 11 61 + 9 4 2 26 12 59 34 8 12 60 3 2 31 5 12 67 30 4 12 69 29 3 12 60 8 4 26 + 3 12 21 1 21 5 10 40 3 12 21 2 22 1 10 44 1 12 20 5 29 59 20 6 24 63 + 5 1 14 7 16 1 6 63 5 3 12 8 23 62 4 6 10 9 25 15 7 37 4 9 7 10 26 10 + 14 6 1 26 4 10 3 1 2 12 18 2 6 11 13 3 4 24 4 10 2 2 1 14 26 8 15 3 7 + 21 4 31 26 8 15 1 8 20 4 33 24 10 9 6 8 19 4 35 25 6 11 5 5 2 2 1 2 + 15 4 36 41 4 7 2 3 16 3 39 40 2 14 15 3 39 40 2 14 15 3 31 48 1 16 14 + 3 32 57 1 7 13 3 33 46 1 18 13 2 33 45 2 18 13 2 33 46 2 14 1 1 14 2 + 35 12 6 46 12 2 37 13 5 46 10 2 34 4 1 63 9 2 39 63 9 2 38 64 9 2 39 + 37 3 23 9 3 40 35 4 12 2 8 9 3 40 36 3 22 9 3 41 35 3 23 8 3 42 34 3 + 23 8 3 42 26 4 5 2 12 2 9 8 3 43 1 4 18 13 12 3 9 7 3 50 14 16 11 6 6 + 7 3 52 12 16 10 8 5 7 3 55 12 14 12 7 3 7 3 57 13 11 15 1 8 5 3 61 9 + 11 23 6 4 75 4 2 22 5 6 68 34 6 4 70 21 1 11 7 3 72 18 4 9 7 3 75 4 5 + 1 2 2 9 1 1 3 7 4 100 2 7 5 99 2 7 5 108 5 108 4 109 4 109 4 109 4 + 109 3 110 3 111 2 111 2 111 2 111 3 110 3 110 3 110 3 110 3 111 2 111 + 1 112 2 111 2 111 2 111 2 111 2 111 2 112 1 112 1 112 1 112 2 111 2 + 111 2 112 1 102 0 + + + + 14351.0 + + + 0.889763779528 + + + 5025.0 + + + 0.230248756219 + + + 0.923918212078 + + + 0.529427860697 0.389008923636 0.207365281706 0.122211503697 + 0.0047059631217 -0.0312617798636 0.0120900735214 -0.00290518886584 + 0.00509907634175 + + + 113.0 + + + 1.75221238938 1.62992125984 + + + 0.70796460177 0.920353982301 2.61946902655 2.7610619469 + 1.25984251969 2.70866141732 2.3937007874 0.0314960629921 + + + 127.0 + + + 32.0 124.0 0.238591916558 15.0 3.0 4.0 + + + 0.0 0.992125984252 + + + 0.350149815344 + + + 0.349078341014 0.7421875 0.107142857143 0.0926339285714 + 0.0414746543779 0.811383928571 0.260044642857 0.0 0.464285714286 + 0.400669642857 0.704241071429 0.0 0.602892102336 0.337284482759 + 0.681034482759 0.00215517241379 + + + 0.214285714286 0.839285714286 0.830357142857 0.535714285714 0.1875 + 0.241071428571 0.245535714286 0.125 0.0 0.3125 0.950892857143 + 0.651785714286 0.0 0.0 0.0 0.0 0.0 0.160714285714 0.955357142857 + 0.723214285714 0.0625 0.0 0.0 0.0 0.0 0.0 0.629464285714 0.9375 + 0.852678571429 0.125 0.0 0.0 0.0428571428571 0.0 0.133928571429 + 0.424107142857 0.950892857143 0.46875 0.0 0.0 0.857142857143 + 0.955357142857 0.71875 0.325892857143 0.973214285714 0.424107142857 + 0.0 0.0 0.814285714286 0.991071428571 0.674107142857 0.160714285714 + 0.870535714286 0.732142857143 0.0 0.0 0.24 0.395833333333 + 0.445833333333 0.0791666666667 0.479166666667 0.658333333333 + 0.00833333333333 0.0 + + + 0.583895887747 0.0482244710322 0.033358031286 0.0397195934332 + 0.296118085812 0.148477016546 0.0439419161617 0.0729919400235 + 0.195021469467 0.0188358098569 0.0751235137824 0.156355035542 + 0.123761254251 0.0117162110288 + + + + + + + + + 2 1 41 1 41 1 41 2 34 1 5 3 32 2 5 14 8 2 11 2 5 28 1 8 5 37 5 37 5 + 37 5 37 5 37 5 37 5 37 5 5 1 31 5 37 5 37 5 37 5 38 4 38 4 38 4 38 4 + 38 2 41 2 41 2 39 3 38 4 38 5 37 5 38 4 37 5 37 5 37 5 37 5 37 5 37 5 + 37 5 37 5 37 6 36 6 36 6 36 6 36 6 36 6 36 6 36 6 36 7 35 6 36 7 2 11 + 22 7 2 30 3 7 2 31 2 7 1 32 2 7 1 41 1 36 0 + + + + 2310.0 + + + 0.763636363636 + + + 1663.0 + + + 0.131689717378 + + + 1.03125 + + + 0.505081911914 0.499877508296 0.0714339630718 0.0999891621724 + 0.00709719842183 -4.84261979299e-05 -0.000356594235228 + -0.000673053889032 0.00059057040899 + + + 42.0 + + + 0.0714285714286 0.181818181818 + + + 0.190476190476 0.0 0.0 0.0952380952381 0.363636363636 + 0.0727272727273 0.0 0.290909090909 + + + 55.0 + + + 0.0 6.0 0.167883211679 2.0 2.0 1.0 + + + 0.0 0.981818181818 + + + 0.719913419913 + + + 0.553846153846 0.814285714286 0.692857142857 0.4 0.58041958042 1.0 + 1.0 0.590909090909 0.546153846154 1.0 1.0 0.642857142857 + 0.426573426573 0.811688311688 0.824675324675 0.571428571429 + + + 0.366666666667 0.6 0.6 0.685714285714 0.428571428571 0.342857142857 + 0.171428571429 0.0285714285714 0.166666666667 1.0 0.971428571429 + 1.0 1.0 1.0 1.0 0.4 0.166666666667 1.0 1.0 1.0 1.0 1.0 1.0 + 0.142857142857 0.0277777777778 1.0 1.0 1.0 1.0 1.0 1.0 + 0.214285714286 0.0666666666667 1.0 1.0 1.0 1.0 1.0 1.0 + 0.285714285714 0.0 0.971428571429 1.0 1.0 1.0 1.0 1.0 + 0.285714285714 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.285714285714 + 0.138888888889 0.5 0.547619047619 0.761904761905 0.690476190476 + 0.666666666667 0.666666666667 0.357142857143 + + + 0.460116159435 0.046023225373 0.00293351785335 0.0066299174286 + 0.0446862861971 0.0727240431603 0.0612304117601 0.00104059961483 + 0.0127732710432 0.00144344365809 0.194059240173 0.0145601167119 + 0.120180759048 0.0391335172283 + + + + + + + + + 1 2 76 2 39 2 34 5 35 5 34 1 234 1 39 1 37 1 39 2 36 1 38 3 36 1 2 18 + 1 20 36 42 36 41 37 41 37 41 37 41 37 20 2 19 37 41 37 41 37 41 37 42 + 36 42 36 41 37 41 37 41 37 41 38 41 37 40 38 40 38 41 37 40 38 1 7 31 + 39 40 38 41 37 4 2 35 37 41 37 41 37 41 37 41 37 41 38 39 39 40 38 40 + 38 40 38 39 32 1 6 39 31 2 6 39 30 3 6 39 29 4 6 39 8 4 1 20 6 41 2 8 + 2 19 6 52 1 19 6 52 1 19 7 51 1 19 7 2 28 19 3 19 7 1 30 17 4 19 39 + 17 2 20 39 19 1 19 39 39 38 42 36 42 35 43 35 43 35 43 35 43 36 40 38 + 40 38 40 38 41 37 41 37 41 37 41 37 41 37 41 37 41 37 41 37 40 38 41 + 37 41 37 41 37 41 37 41 37 41 37 41 38 19 1 20 38 19 1 20 38 40 38 40 + 38 7 1 32 38 6 2 11 2 19 38 3 1 2 1 12 1 20 38 3 4 11 2 20 38 18 20 2 + 38 13 65 8 70 3 76 1 39 0 + + + + 7410.0 + + + 0.821052631579 + + + 3479.0 + + + 0.133084219603 + + + 1.45243858614 + + + 0.511234382174 0.52176891134 0.121085432628 0.157474518965 + 0.0939959328396 0.000113543642211 -0.00145540980717 + -0.00134839852915 -0.000727637375072 + + + 78.0 + + + 0.538461538462 0.4 + + + 0.615384615385 0.205128205128 1.23076923077 0.102564102564 + 0.336842105263 0.210526315789 0.547368421053 0.463157894737 + + + 95.0 + + + 8.0 38.0 0.178343949045 7.0 2.0 3.0 + + + 0.0 0.989473684211 + + + 0.469500674764 + + + 0.569794050343 0.809210526316 0.168859649123 0.0 0.602173913043 1.0 + 0.33125 0.120833333333 0.16704805492 0.234649122807 0.94298245614 + 0.831140350877 0.0 0.0208333333333 0.935416666667 0.754166666667 + + + 0.252525252525 0.777777777778 0.62037037037 0.592592592593 0.25 0.0 + 0.0 0.0 0.181818181818 1.0 0.983333333333 1.0 0.416666666667 0.0 + 0.0 0.0 0.172727272727 0.983333333333 1.0 1.0 0.416666666667 0.0 + 0.0 0.0 0.181818181818 1.0 1.0 1.0 0.575 0.333333333333 + 0.291666666667 0.191666666667 0.232323232323 0.462962962963 + 0.481481481481 0.509259259259 0.935185185185 1.0 1.0 0.731481481481 + 0.0 0.0 0.0 0.0 0.841666666667 1.0 0.991666666667 0.608333333333 + 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.583333333333 0.0 0.0 0.0 + 0.0833333333333 0.833333333333 0.908333333333 0.891666666667 + 0.541666666667 + + + 0.48699033942 0.160830104525 0.00778888037207 0.00585486426593 + 0.0967425529279 0.375894848347 0.0517294871066 0.00637091582526 + 0.00166604963895 0.00788763320622 0.137017079389 0.318553911863 + 0.0975206621589 0.0339164271574 + + + + + + + + + 44 2 6 1 15 1 152 32 145 33 144 33 143 34 143 34 143 34 144 33 144 17 + 1 15 144 33 144 33 144 33 144 33 144 33 144 33 144 33 144 33 144 33 + 144 33 144 33 144 33 144 33 20 3 121 16 1 16 19 5 120 33 20 5 119 33 + 18 8 117 34 18 10 115 35 16 14 113 34 17 12 114 34 17 11 114 35 17 12 + 2 4 107 35 17 15 111 34 16 15 3 2 108 32 17 15 3 3 107 17 1 15 16 15 + 2 4 107 31 17 17 1 6 105 32 16 16 2 7 104 32 17 13 4 9 102 32 16 15 3 + 9 102 32 16 16 2 10 101 33 15 30 99 32 16 32 97 32 16 32 97 32 15 34 + 96 32 15 35 96 2 23 4 17 36 121 2 18 38 120 1 18 38 120 1 18 38 120 1 + 18 38 120 1 18 38 146 31 146 31 145 23 6 3 145 23 21 3 132 21 21 2 + 135 21 19 2 136 20 18 3 1 2 133 20 18 6 121 1 11 26 12 9 118 2 10 20 + 2 3 12 14 114 2 9 16 8 1 13 10 2 1 126 16 8 1 13 10 129 16 7 3 12 11 + 129 6 1 7 7 3 12 13 62 2 36 1 27 3 5 5 5 1 3 2 12 11 1 1 61 6 33 1 27 + 3 5 5 4 1 4 2 12 10 64 10 1 2 26 1 27 4 4 5 3 3 3 2 11 11 64 17 2 1 + 19 1 26 7 2 12 1 3 11 10 65 20 2 4 13 1 26 8 1 5 2 5 1 3 11 10 65 21 + 1 8 8 3 26 6 2 4 2 6 1 2 12 13 62 21 1 6 3 1 6 3 27 3 5 3 3 4 3 1 12 + 14 6 2 54 17 1 2 2 10 5 3 35 3 4 7 10 18 3 5 52 17 1 2 2 18 28 3 3 4 + 3 8 10 19 2 10 47 18 1 1 1 19 27 22 10 32 46 19 2 20 26 22 9 34 45 19 + 2 20 26 22 9 36 43 20 1 20 30 17 10 37 42 41 30 17 10 38 41 41 30 17 + 9 39 41 41 30 17 9 39 41 41 30 17 9 40 40 41 30 3 3 10 10 41 39 20 1 + 20 30 2 11 3 10 41 39 41 30 2 10 4 9 42 39 41 30 2 8 6 9 42 37 21 2 + 22 38 6 10 41 38 20 2 22 38 6 10 41 39 20 1 22 53 44 37 42 53 44 36 + 44 53 43 2 3 33 43 53 43 3 1 34 43 53 6 2 34 40 43 52 6 7 2 4 23 41 + 41 53 6 14 22 41 40 56 14 4 21 42 41 56 14 4 20 42 41 57 14 4 18 6 1 + 36 41 58 13 4 18 6 3 34 19 2 20 60 5 4 2 5 17 6 7 30 19 2 20 61 1 12 + 1 2 15 7 11 25 20 2 20 73 2 3 11 1 2 7 14 4 2 1 1 14 20 2 20 12 1 66 + 10 1 2 7 15 1 6 1 2 11 20 2 20 11 2 2 2 62 1 3 6 1 2 7 26 2 1 6 21 2 + 20 12 2 2 1 67 8 7 78 11 3 2 1 68 7 7 78 12 2 71 6 8 20 1 57 86 5 8 + 56 2 20 87 4 8 56 2 20 87 4 8 41 7 8 1 21 85 1 2 3 8 20 1 19 14 2 2 + 20 85 5 9 40 21 17 84 4 1 1 9 40 25 13 83 7 9 40 28 10 83 7 10 39 33 + 5 83 6 11 39 35 2 83 7 11 39 120 7 11 39 120 6 12 39 120 6 12 39 120 + 6 12 39 124 2 12 40 137 40 137 3 3 34 137 3 3 1 1 32 137 40 137 40 + 137 40 137 40 137 19 1 20 137 40 137 4 1 35 138 39 138 39 138 39 138 + 39 138 39 138 40 137 40 137 40 137 40 137 40 137 3 4 33 138 2 6 31 + 137 3 9 6 3 20 136 3 20 19 135 3 26 12 167 10 167 10 167 11 169 8 171 + 5 175 2 176 1 174 3 175 2 82 1 174 2 174 3 175 2 51 0 + + + + 28143.0 + + + 1.11320754717 + + + 7635.0 + + + 0.193058284217 + + + 0.903260045489 + + + 0.430607400131 0.490562283952 0.287625848291 0.185196000963 + -0.0625142478549 0.0749907878843 -0.0458982233201 0.0508984052509 + -0.0165009220545 + + + 177.0 + + + 1.02259887006 1.74213836478 + + + 0.564971751412 1.26553672316 1.53672316384 0.723163841808 + 0.805031446541 2.8427672956 2.89308176101 0.352201257862 + + + 159.0 + + + 19.0 105.0 0.246648793566 27.0 0.0 7.0 + + + 0.0 0.993710691824 + + + 0.271293039122 + + + 0.00407925407925 0.0590909090909 0.498863636364 0.618181818182 + 0.730186480186 0.2875 0.638068181818 0.00170454545455 + 0.157925407925 0.542613636364 0.0522727272727 0.00454545454545 0.0 + 0.242222222222 0.501666666667 0.00444444444444 + + + 0.0 0.0 0.0 0.0 0.0181818181818 0.870454545455 0.872727272727 0.225 + 0.00717703349282 0.00909090909091 0.0 0.236363636364 0.320454545455 + 0.786363636364 0.909090909091 0.465909090909 0.952153110048 + 0.979545454545 0.243181818182 0.529545454545 0.981818181818 + 0.534090909091 0.0 0.00681818181818 0.473684210526 0.513636363636 + 0.15 0.227272727273 0.584090909091 0.452272727273 0.0 0.0 0.0 + 0.495454545455 0.638636363636 0.231818181818 0.0272727272727 + 0.0318181818182 0.0 0.0 0.0 0.120454545455 0.745454545455 + 0.554545454545 0.15 0.0 0.0 0.0181818181818 0.0 0.0 0.0613636363636 + 0.656818181818 0.802272727273 0.00909090909091 0.0 0.0 0.0 0.0 0.0 + 0.260869565217 0.876086956522 0.310869565217 0.0173913043478 0.0 + + + 0.287910960308 0.114006680209 0.109242443711 0.219674969781 + 0.0364028617265 0.183037061039 0.0215836232185 0.0658155571667 + 0.286596774654 0.104189349437 0.00142613174609 0.109367357204 + 0.138986792541 0.124241054874 + + + + + + + + + 165 3 168 2 29 2 169 1 2 1 26 4 167 6 26 3 166 2 32 1 168 1 1 2 28 2 + 168 22 1 11 168 34 168 34 168 34 168 34 168 34 169 34 168 33 169 33 + 169 33 169 33 169 33 169 34 168 34 168 34 168 33 169 33 170 32 170 32 + 170 33 169 33 169 33 169 33 38 1 130 33 38 1 130 33 38 1 130 33 37 3 + 129 33 37 4 129 32 36 6 128 32 36 7 127 7 2 23 36 9 125 7 2 23 36 9 + 125 32 27 1 8 10 124 32 27 1 7 14 121 33 26 1 7 16 88 1 30 33 26 1 8 + 15 88 4 21 39 26 2 7 10 1 5 87 64 11 2 2 13 6 10 3 4 88 64 4 22 7 9 4 + 4 88 35 2 53 8 9 2 6 87 34 3 54 7 18 2 1 4 1 78 34 4 53 7 24 1 3 76 + 34 4 3 18 32 6 26 1 1 1 2 74 33 25 33 7 26 3 2 73 33 26 32 7 27 1 6 + 71 3 1 28 26 32 7 36 69 1 1 1 1 28 26 32 7 30 75 5 1 26 26 32 7 32 73 + 33 25 32 7 32 73 33 25 33 6 20 2 4 3 6 70 33 25 32 7 19 4 5 2 2 1 4 + 68 33 25 32 7 19 5 7 74 33 26 32 6 19 19 9 58 33 26 33 3 21 18 1 1 9 + 1 2 54 34 23 35 3 21 24 8 53 36 22 35 4 21 25 6 53 35 24 34 4 21 85 + 34 25 33 5 20 85 7 7 19 26 33 5 29 76 33 26 34 4 4 2 21 1 1 76 5 10 + 19 24 12 1 20 6 7 3 16 1 4 1 1 75 4 1 3 4 20 24 32 6 37 36 3 3 7 19 6 + 4 1 1 1 2 19 25 33 5 26 2 10 30 19 19 7 1 4 1 20 25 32 6 27 2 13 25 + 21 18 16 2 15 26 31 6 44 25 25 12 4 3 3 12 3 4 4 26 31 6 21 1 22 26 + 25 10 5 5 1 12 12 24 32 6 20 2 22 23 30 7 8 2 4 7 1 2 12 24 32 6 17 5 + 18 3 1 24 23 1 18 4 10 1 15 25 31 6 17 5 18 3 2 25 7 3 8 1 2 1 3 1 14 + 5 9 2 14 25 32 6 16 6 4 4 4 3 1 1 5 2 1 21 40 11 3 5 12 25 32 6 17 21 + 13 8 51 10 19 25 32 6 2 2 16 20 71 2 1 5 20 25 31 7 2 5 12 21 99 25 + 32 5 3 7 8 28 43 1 22 3 26 24 32 6 2 8 7 12 3 1 4 10 37 6 20 3 27 24 + 32 6 2 9 6 11 11 17 29 3 22 2 28 24 32 6 3 10 4 11 4 2 1 2 2 23 22 7 + 19 4 17 2 7 24 32 6 2 14 1 52 5 3 2 12 21 2 2 6 1 8 1 2 7 23 7 1 25 5 + 2 67 15 6 20 25 6 23 4 3 3 3 2 1 10 4 3 5 2 67 16 5 1 1 17 27 5 23 3 + 17 6 5 2 5 2 69 14 7 13 3 1 25 1 1 4 24 2 20 4 5 2 5 2 69 14 7 13 30 + 5 24 2 21 3 5 2 5 2 73 33 29 3 24 3 21 1 6 2 5 3 75 32 27 3 25 2 28 2 + 5 3 76 32 27 3 54 2 5 3 78 30 27 3 55 1 5 3 87 20 29 3 54 1 5 3 87 11 + 2 4 32 2 55 1 6 2 88 8 4 9 27 3 54 1 6 2 90 5 6 8 26 4 54 1 6 2 90 5 + 6 7 28 3 54 2 5 2 89 6 5 8 29 2 54 2 5 2 88 7 3 5 90 2 5 2 88 7 4 5 + 89 2 5 2 87 9 1 10 86 2 5 2 88 20 85 2 5 2 88 20 85 2 5 2 89 20 85 1 + 5 2 89 20 85 1 5 2 90 19 85 1 6 1 90 20 84 1 6 1 88 23 83 1 6 1 89 22 + 83 1 5 2 88 23 83 1 6 1 88 23 83 2 5 1 91 20 83 2 5 1 95 16 83 2 5 2 + 95 15 83 2 5 1 98 13 83 2 5 1 101 10 83 2 5 2 103 6 84 1 6 2 104 4 92 + 2 104 4 92 2 104 4 91 5 102 5 90 4 103 4 92 3 104 2 93 3 105 1 93 4 + 104 2 92 3 199 5 197 3 200 1 201 1 201 1 201 1 201 1 201 1 201 1 201 + 1 201 2 201 1 201 1 201 1 201 1 201 1 201 1 194 0 + + + + 28886.0 + + + 1.41258741259 + + + 6754.0 + + + 0.25821735268 + + + 0.841705310903 + + + 0.569281958581 0.429093661763 0.500947095306 0.0922956089673 + -0.0525601842853 -0.207641252771 0.0070099700733 0.00940310272696 + -0.00266893018319 + + + 202.0 + + + 1.37128712871 2.42657342657 + + + 1.82178217822 0.811881188119 2.45544554455 0.39603960396 + 0.391608391608 3.44055944056 4.86713286713 0.783216783217 + + + 143.0 + + + 33.0 187.0 0.21387283237 29.0 4.0 12.0 + + + 0.0 0.993006993007 + + + 0.233815689261 + + + 0.00914285714286 0.488888888889 0.208888888889 0.0361111111111 0.0 + 0.0452069716776 0.393246187364 0.0168845315904 0.285714285714 + 0.596666666667 0.397222222222 0.0922222222222 0.275630252101 + 0.610566448802 0.270697167756 0.00871459694989 + + + 0.0 0.0355555555556 0.655555555556 0.853333333333 0.426666666667 + 0.0888888888889 0.0844444444444 0.06 0.0 0.0 0.1 0.346666666667 + 0.32 0.0 0.0 0.0 0.0 0.0 0.0 0.0511111111111 0.388888888889 0.0 0.0 + 0.0 0.0 0.0 0.0 0.128205128205 0.84188034188 0.326923076923 + 0.0662393162393 0.0 0.0 0.0 0.486666666667 0.653333333333 + 0.628888888889 0.431111111111 0.368888888889 0.0 0.489411764706 + 0.648888888889 0.677777777778 0.568888888889 0.471111111111 + 0.0577777777778 0.0 0.0 0.449411764706 0.668888888889 + 0.673333333333 0.417777777778 0.297777777778 0.00444444444444 0.0 + 0.0 0.0 0.0 0.489316239316 0.856837606838 0.713675213675 + 0.0576923076923 0.034188034188 0.0 + + + 0.54076230387 0.147292276522 0.169467976949 0.0649319491216 + 0.34930998044 0.286892645323 0.0807647523015 0.302567367307 + 0.0752817836523 0.0457497935518 0.220618153549 0.279926184998 + 0.214555001019 0.0384764853068 + + + + + + + + + 1 1 68 1 67 2 68 1 68 1 68 1 68 2 135 3 31 1 35 2 30 2 35 3 29 2 35 3 + 29 2 35 3 29 2 35 4 27 3 35 17 2 15 35 34 35 34 35 34 35 34 35 34 35 + 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 + 35 34 35 34 35 34 35 34 34 36 33 36 33 36 34 35 34 35 34 35 34 35 29 + 2 3 34 30 1 4 34 30 1 5 33 30 1 5 33 30 1 5 33 30 1 6 32 7 3 20 1 6 + 33 2 22 4 3 5 64 5 64 5 64 5 63 6 63 6 4 3 7 1 49 5 3 25 36 5 2 27 35 + 5 3 26 35 5 3 26 35 5 3 27 34 5 3 27 34 6 2 27 34 6 2 27 34 6 2 27 34 + 35 34 35 34 35 34 35 34 35 34 35 33 36 34 35 4 1 29 35 34 35 34 35 34 + 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 34 35 35 + 34 35 34 35 34 34 35 34 13 2 2 1 17 34 4 5 2 18 6 34 3 27 6 33 2 31 3 + 33 2 31 2 34 2 31 3 34 2 29 5 65 2 67 2 67 4 65 4 65 3 66 3 66 4 66 3 + 66 2 67 2 67 2 67 2 67 2 67 2 68 1 68 1 68 1 68 2 67 2 67 2 67 2 67 2 + 67 2 67 2 68 1 + + + + 8487.0 + + + 0.560975609756 + + + 3026.0 + + + 0.162590879048 + + + 1.28583581455 + + + 0.503727498931 0.438619396921 0.123627896036 0.181619847112 + 0.107276879574 -0.000571065255006 0.00434422736146 0.00120050722861 + 0.00959038253968 + + + 69.0 + + + 0.275362318841 0.308943089431 + + + 0.289855072464 0.115942028986 0.173913043478 0.347826086957 + 0.227642276423 0.520325203252 0.162601626016 0.227642276423 + + + 123.0 + + + 5.0 26.0 0.176245210728 5.0 2.0 3.0 + + + 0.0 0.991869918699 + + + 0.356545304583 + + + 0.554901960784 0.779886148008 0.0170777988615 0.0 0.541176470588 + 0.855787476281 0.0645161290323 0.0208728652751 0.043137254902 + 0.438330170778 0.992409867173 0.011385199241 0.0 0.347670250896 + 0.887096774194 0.143369175627 + + + 0.283333333333 0.875 0.890625 0.541666666667 0.075 0.0 0.0 0.0 + 0.0666666666667 1.0 1.0 0.651851851852 0.0 0.0 0.0 0.0 0.05 1.0 1.0 + 0.658333333333 0.0 0.0 0.0 0.0 0.111111111111 1.0 1.0 + 0.740740740741 0.111111111111 0.131944444444 0.0814814814815 0.0 + 0.0518518518519 0.111111111111 0.159722222222 0.814814814815 + 0.992592592593 1.0 0.0444444444444 0.0 0.0 0.0 0.0 0.816666666667 + 1.0 0.9765625 0.0 0.0 0.0 0.0 0.0 0.8 1.0 1.0 0.0 0.0 0.0 0.0 + 0.0347222222222 0.6 0.77037037037 0.777777777778 0.385185185185 + 0.194444444444 + + + 0.658276368798 0.107997644058 0.0158499910256 0.00686955939086 + 0.496656514599 0.325665077036 0.0372368242283 0.0114298565926 + 0.0161472025008 0.0115935095593 0.0982241058616 0.48158441826 + 0.103411894249 0.0219163796689 + + + + + + + + + 66 1 27 1 68 16 7 8 66 32 66 32 66 32 65 33 65 33 65 33 65 34 65 17 2 + 13 65 33 65 33 66 32 66 32 66 32 65 33 65 34 64 33 65 33 65 33 65 33 + 1 1 62 36 63 35 62 35 33 3 27 35 33 4 27 34 33 4 27 34 63 19 2 14 65 + 17 2 15 64 16 3 14 65 17 2 13 66 15 4 13 66 1 2 3 3 4 1 1 5 5 1 1 71 + 6 14 5 6 1 65 6 9 5 1 13 42 1 20 8 3 24 39 16 2 12 4 25 36 19 8 5 3 + 27 35 17 11 5 2 28 35 63 35 63 35 63 35 63 35 33 4 26 35 32 13 18 35 + 33 12 2 4 2 1 5 1 3 35 33 65 31 30 2 35 32 29 2 36 31 29 2 36 31 29 2 + 36 31 29 2 36 32 28 2 36 32 28 1 37 32 28 1 37 32 28 1 37 32 28 1 37 + 32 66 7 1 24 66 12 1 18 67 32 67 31 67 6 1 24 66 33 65 33 65 33 32 2 + 31 33 32 18 14 9 4 21 32 30 1 7 1 4 2 21 32 66 32 30 1 35 32 29 2 35 + 32 66 32 39 1 26 32 66 32 66 32 66 32 22 1 13 2 28 32 36 15 16 31 36 + 24 1 2 4 31 36 29 1 31 37 28 2 30 39 27 2 30 39 1 1 26 1 30 41 58 39 + 59 39 60 37 61 37 62 36 62 36 62 36 62 36 62 36 62 36 62 36 62 36 62 + 36 62 36 62 36 62 36 62 37 61 37 61 37 61 37 62 36 61 37 61 37 61 3 8 + 26 62 1 12 4 1 18 62 1 23 13 61 1 31 5 61 1 32 4 61 1 33 3 61 1 33 3 + 61 1 33 3 61 1 93 0 + + + + 11466.0 + + + 0.837606837607 + + + 4270.0 + + + 0.159484777518 + + + 0.540307164986 + + + 0.505521620512 0.494462165873 0.167399623166 0.214395127908 + -0.154854321414 0.000818628082666 0.00828593407265 + -0.00440041443366 -0.010737702969 + + + 98.0 + + + 0.836734693878 0.649572649573 + + + 0.0408163265306 0.938775510204 1.26530612245 1.0612244898 + 0.307692307692 1.23076923077 0.752136752137 0.307692307692 + + + 117.0 + + + 13.0 72.0 0.147540983607 8.0 3.0 3.0 + + + 0.0 0.991452991453 + + + 0.372405372405 + + + 0.0 0.0 0.64224137931 0.651388888889 0.0151724137931 0.43724137931 + 0.699310344828 0.513333333333 0.395114942529 0.652298850575 + 0.576149425287 0.0 0.891034482759 0.493793103448 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.344444444444 0.886904761905 0.761111111111 + 0.355555555556 0.0 0.0 0.0 0.0 0.377777777778 1.0 1.0 + 0.488888888889 0.0 0.0611111111111 0.0654761904762 0.116666666667 + 0.361111111111 0.994047619048 1.0 0.577777777778 0.0 0.0 + 0.494505494505 1.0 0.948717948718 0.494505494505 0.235897435897 + 0.282051282051 0.0 0.0 0.386904761905 1.0 1.0 0.404761904762 0.0 + 0.0 0.732142857143 0.844444444444 0.738095238095 0.472222222222 + 0.55 0.321428571429 0.0 0.0 0.892857142857 0.977777777778 + 0.809523809524 0.111111111111 0.0 0.0 0.0 0.0 0.78021978022 + 0.912820512821 0.835164835165 0.25641025641 0.0 0.0 0.0 0.0 + + + 0.396643734152 0.229030462108 0.0452048903258 0.0206127679759 + 0.0960948696416 0.386886433507 0.133430658935 0.0385804988848 + 0.0128736349247 0.0280874855844 0.194373814139 0.128602996026 + 0.260405937313 0.0747120087935 + + + + + + + + + 70 3 71 1 71 1 72 2 61 12 39 18 1 15 37 36 37 36 37 36 37 36 36 37 36 + 37 36 37 36 37 36 37 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 + 37 36 37 36 37 32 41 30 43 36 37 36 37 36 37 36 37 36 37 36 37 36 37 + 36 37 36 37 36 38 5 4 26 38 35 38 35 37 36 37 37 35 37 6 20 9 38 5 68 + 5 68 4 69 3 44 1 2 3 2 15 3 3 38 30 2 3 38 30 2 3 37 32 1 3 36 37 37 + 36 37 36 36 37 37 35 39 33 40 34 39 34 38 35 39 34 39 35 37 36 37 36 + 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 + 36 37 36 37 36 37 37 36 37 36 36 37 37 36 37 36 37 36 36 6 2 1 6 2 2 + 18 36 5 25 7 37 2 30 4 36 3 31 3 36 3 31 3 37 1 33 2 71 2 71 2 71 2 + 71 2 34 0 + + + + 6935.0 + + + 0.768421052632 + + + 3137.0 + + + 0.127510360217 + + + 0.658264199107 + + + 0.507376120143 0.484047640041 0.12567282289 0.17303020214 + -0.104053737733 -0.000113441480825 0.00292783958324 + -0.00138366107259 -0.00122676139121 + + + 73.0 + + + 0.301369863014 0.178947368421 + + + 0.164383561644 0.0547945205479 0.493150684932 0.438356164384 + 0.0421052631579 0.0842105263158 0.252631578947 0.336842105263 + + + 95.0 + + + 1.0 14.0 0.191919191919 2.0 5.0 2.0 + + + 0.0 0.989473684211 + + + 0.452343186734 + + + 0.0 0.12962962963 0.905092592593 0.55787037037 0.012077294686 + 0.148148148148 1.0 0.631944444444 0.777777777778 0.983796296296 + 0.203703703704 0.155092592593 0.782608695652 0.927631578947 + 0.0175438596491 0.0 + + + 0.0 0.0 0.0 0.185185185185 0.814814814815 0.805555555556 0.75 + 0.296296296296 0.0 0.0 0.0 0.333333333333 1.0 1.0 1.0 + 0.185185185185 0.0 0.0 0.0 0.314814814815 1.0 1.0 1.0 + 0.231481481481 0.010101010101 0.037037037037 0.0 0.277777777778 1.0 + 1.0 1.0 0.296296296296 0.525252525253 1.0 1.0 0.944444444444 + 0.416666666667 0.351851851852 0.333333333333 0.287037037037 + 0.545454545455 1.0 1.0 0.990740740741 0.0462962962963 0.0 0.0 0.0 + 0.565656565657 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.636363636364 0.9 + 0.816666666667 0.908333333333 0.0666666666667 0.0 0.0 0.0 + + + 0.427838928353 0.1883071586 0.0130219225428 0.0105899462036 + 0.0198820741975 0.387580468795 0.0728297884848 0.0174639656027 + 0.0119926682762 0.0129437750454 0.124863074763 0.283787940252 + 0.117038921524 0.0474453558573 + + + + + + + + + 1 3 4 3 5 3 6 2 1 3 2 7 3 1 3 1 + + + + 48.0 + + + 1.33333333333 + + + 23.0 + + + 1.60869565217 + + + 1.21052631579 + + + 0.422360248447 0.539130434783 0.1946248048 0.103723185666 + 0.0788197583628 0.0451049400929 -0.00242088661515 0.0177270894002 + -0.0135015283061 + + + 8.0 + + + 0.125 0.333333333333 + + + 0.0 0.5 0.0 0.0 0.0 0.0 0.666666666667 0.0 + + + 6.0 + + + 0.0 8.0 0.0769230769231 0.0 1.0 2.0 + + + 0.0 0.833333333333 + + + 0.479166666667 + + + 0.5 1.0 0.5 0.25 1.0 0.5 0.5 0.75 0.0 0.0 1.0 0.5 0.0 0.0 0.5 0.75 + + + 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 + + + 0.361790717826 0.180885892933 0.174005381893 0.114654496756 + 0.0650991435611 0.173835104919 0.135966145301 0.195462389554 + 0.130060690121 0.122669713936 0.307643007945 0.192096109055 + 0.0596095292426 0.136434919235 + + + + + + + + + 77 1 256 2 256 3 255 4 254 4 254 4 254 3 255 3 256 1 257 1 257 1 256 + 2 256 3 256 1 258 2 254 4 254 5 253 3 255 2 256 4 1289 2 256 2 505 3 + 256 2 1033 5 103 6 147 3 101 6 247 10 147 5 85 4 5 11 147 9 74 12 7 4 + 1 4 2 1 149 3 75 13 7 2 3 9 148 3 74 12 6 10 1 1 228 14 1 15 228 14 1 + 12 231 28 1 2 227 34 223 36 223 2 1 32 217 1 5 2 2 8 3 20 217 2 3 3 1 + 9 3 20 217 4 1 31 2 2 218 20 1 20 217 41 217 41 217 41 217 41 217 41 + 217 41 217 41 175 2 40 41 67 4 104 2 40 19 2 20 67 6 102 1 41 7 1 12 + 1 18 69 8 142 20 1 20 67 9 104 2 35 20 1 20 67 10 99 1 1 6 33 41 67 + 13 95 13 29 41 67 15 93 18 24 20 1 20 67 16 92 21 4 13 3 20 2 20 67 + 16 92 39 1 21 2 20 67 16 92 20 6 34 3 20 67 17 91 18 8 19 8 6 4 20 67 + 18 39 6 45 20 7 20 23 13 67 20 37 6 45 20 7 20 29 6 68 22 36 3 47 21 + 6 19 31 5 68 22 36 3 48 20 5 21 30 5 68 22 9 1 26 1 50 20 5 20 31 5 + 68 21 11 2 75 20 5 20 31 5 68 28 81 20 4 20 32 5 68 32 77 21 3 20 32 + 5 68 22 1 9 77 22 2 20 33 3 69 23 1 11 74 22 2 20 33 3 69 20 1 7 2 6 + 8 2 63 21 3 20 33 3 69 19 3 5 5 5 9 1 62 21 3 20 33 3 69 19 5 3 7 6 + 10 2 57 44 33 3 69 20 6 6 4 6 3 3 3 3 55 44 33 3 68 21 7 29 52 46 31 + 5 66 22 11 1 11 6 1 10 49 46 30 6 66 21 25 5 6 3 51 44 31 5 67 22 27 + 3 59 20 1 22 33 4 67 26 84 21 1 22 33 4 67 26 84 44 32 6 66 5 3 14 3 + 1 25 2 3 5 49 21 1 22 32 5 67 5 5 23 19 1 1 18 39 19 3 22 31 5 29 1 + 34 1 2 36 18 25 31 21 3 20 32 5 29 2 32 3 2 38 20 23 28 21 3 20 33 4 + 62 4 2 39 20 26 24 19 4 21 33 3 69 40 22 23 24 21 1 22 33 4 68 42 21 + 28 19 20 3 20 33 4 64 1 3 20 3 15 25 29 18 19 4 20 33 4 29 1 33 3 2 + 17 1 2 3 16 23 33 15 2 1 15 5 20 33 4 29 2 14 21 2 17 6 17 22 35 13 + 18 5 20 33 4 29 6 8 23 2 20 3 3 1 12 5 1 18 35 12 18 6 19 33 4 29 37 + 2 20 5 1 2 3 2 6 4 11 9 37 10 18 6 19 33 4 29 37 2 20 9 1 5 21 7 37 + 10 16 1 1 5 20 33 4 29 37 2 20 8 3 6 20 8 35 1 2 7 3 3 13 3 21 33 4 + 29 37 2 18 1 1 11 1 8 65 5 2 3 38 33 4 29 37 2 5 2 13 11 2 7 1 4 3 4 + 14 1 40 3 2 4 13 4 20 33 4 29 37 2 4 4 12 12 3 17 56 3 1 4 13 4 20 34 + 3 29 37 2 4 7 9 14 3 15 14 2 3 3 35 2 1 6 11 4 20 34 3 29 37 2 4 8 5 + 19 3 20 5 9 2 12 22 14 6 5 19 34 3 29 37 2 4 11 2 21 2 20 16 10 1 1 + 25 21 19 34 3 30 36 2 4 27 3 27 16 11 24 36 5 34 3 29 37 2 4 29 1 27 + 16 1 1 9 23 39 3 34 3 29 37 2 4 59 17 10 10 1 11 39 2 34 3 29 37 2 4 + 39 2 26 13 9 8 1 10 75 3 29 37 2 4 38 3 25 15 8 8 1 11 74 3 29 37 2 4 + 38 4 28 12 2 1 4 8 2 10 74 3 29 37 2 4 39 5 27 15 3 8 2 10 74 3 29 37 + 3 3 43 3 27 14 1 21 74 3 29 37 3 3 74 12 3 20 73 4 29 37 3 3 79 5 1 + 24 73 4 29 34 6 3 80 26 77 3 30 33 6 4 82 3 3 17 76 4 30 34 5 4 82 4 + 2 16 78 3 30 36 3 4 85 1 3 18 75 3 30 6 2 28 3 4 90 19 72 4 30 36 4 3 + 90 7 1 11 73 4 29 36 4 3 90 7 1 11 73 4 29 36 3 4 89 8 4 8 73 2 1 1 + 29 36 3 4 89 20 73 2 1 1 29 36 3 4 89 20 73 2 31 36 4 3 89 20 73 4 29 + 36 4 3 89 20 73 4 29 36 4 3 90 19 73 4 29 36 4 2 91 20 72 4 29 36 97 + 20 72 5 28 36 96 21 71 6 28 36 79 10 8 20 71 6 28 36 81 5 1 7 3 20 72 + 5 28 36 84 11 2 20 72 5 28 36 90 1 1 25 72 14 19 36 90 21 1 5 72 19 + 14 36 92 4 2 20 70 26 8 3 4 29 94 24 70 17 1 11 5 3 5 2 11 2 10 2 98 + 21 71 30 3 3 132 19 71 36 134 17 71 16 2 18 136 15 70 16 3 18 137 15 + 70 15 3 18 139 14 69 16 2 18 141 11 69 37 142 1 1 8 69 38 142 9 69 39 + 144 5 70 39 144 5 70 39 144 3 1 2 67 40 221 38 220 37 221 37 221 37 + 221 37 221 37 221 38 220 38 220 38 220 38 220 38 220 38 220 38 220 38 + 220 38 220 38 220 38 220 38 220 5 5 28 229 29 221 2 7 26 1 1 222 36 + 223 35 223 5 4 26 222 4 1 1 5 25 223 5 4 26 223 6 2 27 223 3 7 25 223 + 3 13 19 223 2 17 16 223 2 18 15 224 1 23 10 251 7 252 6 253 4 254 4 + 255 1 257 2 33 0 + + + + 49278.0 + + + 1.35078534031 + + + 9674.0 + + + 0.243849493488 + + + 1.55287162162 + + + 0.563544709273 0.547930426645 0.554616669106 0.132221723356 + 0.100384789187 -0.157438714132 0.0343262860937 0.00974205182184 + 0.00757732156281 + + + 258.0 + + + 1.42635658915 2.42931937173 + + + 1.84496124031 2.04651162791 1.25581395349 0.496124031008 + 0.502617801047 3.24607329843 5.23560209424 0.607329842932 + + + 191.0 + + + 32.0 192.0 0.227201257862 36.0 5.0 17.0 + + + 0.0 0.994764397906 + + + 0.196314785503 + + + 0.0 0.326822916667 0.172526041667 0.0 0.0294599018003 + 0.232692307692 0.49391025641 0.0336538461538 0.119348404255 + 0.543619791667 0.152018229167 0.0452473958333 0.0 0.00384615384615 + 0.550320512821 0.421153846154 + + + 0.0 0.0 0.247395833333 0.802083333333 0.377604166667 0.05859375 0.0 + 0.0 0.0 0.0 0.0169270833333 0.240885416667 0.25390625 0.0 0.0 0.0 + 0.0720108695652 0.0481770833333 0.00260416666667 0.153645833333 + 0.705729166667 0.078125 0.0 0.0 0.0 0.0 0.223484848485 + 0.541666666667 0.60101010101 0.584595959596 0.132575757576 0.0 0.0 + 0.0481770833333 0.41015625 0.756510416667 0.377604166667 0.0 0.0 + 0.0 0.0 0.419270833333 0.873697916667 0.134114583333 0.108072916667 + 0.122395833333 0.13671875 0.0442708333333 0.0 0.0 0.0 0.00390625 + 0.115885416667 0.26171875 0.986979166667 0.630208333333 0.0 0.0 0.0 + 0.0113636363636 0.929292929293 0.872474747475 0.0391414141414 + 0.0517676767677 + + + 0.404968958726 0.18723938974 0.1289146757 0.0903211539328 + 0.172824922742 0.205378907113 0.136168809975 0.172913833143 + 0.157297659715 0.100941899569 0.0297991094475 0.0527916985115 + 0.145198077735 0.119255800559 + + + + + + + + + 39 4 59 6 56 9 56 2 1 4 59 7 57 8 54 13 51 13 51 15 49 16 48 17 46 19 + 45 20 30 2 13 20 28 3 13 21 12 4 4 3 4 3 12 23 7 8 4 5 2 3 12 23 7 8 + 5 4 2 3 12 24 6 2 1 5 5 4 2 3 12 25 6 7 3 11 12 25 5 8 4 10 12 25 5 8 + 4 5 2 3 12 25 5 8 5 1 1 1 3 3 12 26 4 8 5 1 1 1 3 3 12 4 1 21 4 7 7 2 + 3 3 12 3 2 19 5 8 8 1 3 4 11 4 1 20 4 9 4 4 3 3 12 3 1 21 4 4 1 4 4 4 + 3 2 13 3 1 22 3 4 1 4 4 4 3 3 12 26 3 9 4 4 2 4 12 26 3 9 3 11 13 16 + 1 7 3 24 12 16 4 6 3 23 12 17 3 3 1 2 3 10 2 5 2 5 10 6 6 5 4 2 2 2 3 + 10 2 5 1 6 11 5 3 1 2 4 5 2 2 2 3 10 2 5 2 4 12 4 3 8 5 2 7 3 17 3 12 + 3 8 2 1 1 5 3 7 2 17 3 12 4 7 1 1 2 5 5 4 4 10 3 1 6 11 5 6 5 3 6 4 2 + 7 1 3 10 12 7 4 5 3 7 3 2 6 2 2 11 12 16 2 7 4 3 10 11 11 17 1 7 4 4 + 9 11 11 25 4 5 16 3 11 2 1 6 3 5 2 6 4 4 1 1 14 4 11 3 2 5 2 5 2 6 6 + 5 13 4 12 2 3 19 3 1 19 3 14 2 4 19 2 2 1 4 14 2 14 2 5 17 3 5 1 1 8 + 2 3 4 13 2 5 17 3 5 1 1 7 4 2 4 13 2 7 15 3 5 10 2 3 4 12 3 8 14 3 5 + 15 4 12 2 11 12 3 6 8 4 2 4 12 2 12 11 3 7 2 2 1 12 12 1 14 10 3 5 5 + 1 1 12 12 2 14 9 3 7 5 12 12 2 15 7 4 7 5 12 12 3 15 7 3 9 3 12 11 5 + 16 5 4 4 1 3 3 13 10 6 15 6 3 3 8 1 2 10 13 2 16 6 3 3 12 9 30 6 4 3 + 12 9 11 3 18 4 4 3 14 8 10 4 17 5 3 3 15 7 9 5 15 7 3 3 16 7 8 7 13 3 + 7 3 15 5 10 8 12 2 9 3 16 4 10 11 9 2 9 2 17 6 9 12 18 2 17 4 1 1 8 1 + 1 13 16 2 18 3 12 12 17 2 18 3 12 14 15 2 18 3 12 13 1 2 33 3 12 12 2 + 3 33 2 10 20 31 3 10 21 30 4 10 21 29 3 11 22 28 3 11 23 27 3 12 24 + 25 3 12 25 24 3 11 27 23 3 11 27 23 3 11 27 23 3 11 27 23 3 12 26 24 + 2 12 26 23 2 12 5 2 11 4 4 25 1 12 5 2 11 33 2 12 10 1 7 3 1 27 3 11 + 25 25 3 11 26 24 3 11 27 23 3 11 28 22 3 11 27 23 2 12 28 22 3 11 28 + 22 3 11 28 22 3 13 15 2 9 22 3 11 3 1 2 4 7 3 8 22 3 11 6 1 11 2 7 23 + 3 11 27 23 3 11 18 1 8 23 3 11 27 23 3 10 29 22 3 11 16 4 7 23 3 12 + 26 23 3 12 27 22 2 13 27 22 2 12 28 22 2 13 4 1 22 22 2 13 3 3 21 22 + 3 12 3 8 16 22 3 12 3 9 15 22 3 12 3 9 5 2 8 22 3 12 3 9 3 3 9 22 2 + 13 3 11 1 1 10 23 2 13 3 11 12 22 3 13 4 12 11 22 3 12 6 10 11 22 3 + 10 8 11 11 21 5 8 8 12 10 20 6 9 6 16 6 22 5 9 6 17 4 23 4 11 5 17 5 + 21 6 10 6 20 1 20 8 8 7 43 2 1 2 9 5 45 5 9 8 42 6 8 7 43 5 8 6 45 4 + 11 3 46 3 12 5 44 3 11 5 45 4 11 4 44 5 11 5 42 7 10 4 43 5 1 1 10 4 + 44 4 12 5 43 4 12 4 43 5 12 4 43 6 11 4 45 4 1 1 10 3 45 5 10 4 46 2 + 12 4 46 3 11 3 47 3 12 3 47 2 12 3 47 2 12 3 47 2 13 2 47 1 15 1 47 2 + 14 1 24 0 + + + + 9664.0 + + + 0.423841059603 + + + 3483.0 + + + 0.405110536893 + + + 0.965813533495 + + + 0.600914190923 0.434562159058 0.0801803803897 0.401024793333 + 0.0270116740796 -0.0142701996081 -6.98306953026e-05 + -0.0120261855668 0.0607657224165 + + + 64.0 + + + 3.875 2.15894039735 + + + 2.625 3.5625 5.0625 4.25 2.30463576159 3.3642384106 1.40397350993 + 1.45695364238 + + + 151.0 + + + 32.0 148.0 0.248956884562 22.0 1.0 5.0 + + + 0.0 0.993377483444 + + + 0.360409768212 + + + 0.376689189189 0.314144736842 0.0 0.0 0.228040540541 0.365131578947 + 0.172697368421 0.248355263158 0.636824324324 0.444078947368 + 0.738486842105 0.276315789474 0.513513513514 0.475328947368 + 0.809210526316 0.175986842105 + + + 0.0972222222222 0.782894736842 0.565789473684 0.361842105263 0.0 + 0.0 0.0 0.0 0.0763888888889 0.519736842105 0.223684210526 + 0.105263157895 0.0 0.0 0.0 0.0 0.145833333333 0.730263157895 + 0.690789473684 0.638157894737 0.342105263158 0.342105263158 + 0.381578947368 0.361842105263 0.0 0.0197368421053 0.0394736842105 + 0.0921052631579 0.00657894736842 0.0 0.144736842105 0.105263157895 + 0.361111111111 0.473684210526 0.342105263158 0.539473684211 + 0.592105263158 0.546052631579 0.546052631579 0.421052631579 + 0.868055555556 0.842105263158 0.414473684211 0.480263157895 + 0.967105263158 0.848684210526 0.125 0.0131578947368 0.513888888889 + 0.815789473684 0.776315789474 0.203947368421 0.947368421053 + 0.921052631579 0.230263157895 0.0 0.0902777777778 0.611842105263 + 0.631578947368 0.289473684211 0.532894736842 0.835526315789 + 0.473684210526 0.0 + + + 0.531712149826 0.143076592659 0.0606440740348 0.0389369448338 + 0.238468079544 0.324007156318 0.0579661667015 0.0501680495819 + 0.0801153064925 0.0314831230402 0.0495468959264 0.312403438915 + 0.100051866209 0.0429377534686 + + + + + + + + + 43 1 78 1 77 2 77 2 35 1 4 1 19 12 4 3 35 20 4 14 2 4 35 21 3 20 35 + 21 3 20 35 21 3 20 35 21 3 20 35 21 2 20 37 20 2 19 38 20 2 12 1 3 1 + 1 39 20 2 19 38 20 2 19 38 20 2 20 37 20 2 20 37 20 2 20 37 20 2 20 + 37 20 2 20 37 20 2 20 37 19 3 20 37 19 3 19 38 21 1 19 38 20 2 19 38 + 3 2 36 38 3 5 33 38 41 38 20 1 20 38 41 38 41 38 42 36 43 37 42 37 43 + 36 42 36 43 37 20 2 19 38 41 35 1 3 20 1 19 35 1 3 19 2 19 35 1 3 19 + 2 19 34 3 2 40 33 4 2 39 7 3 1 7 1 13 1 4 3 76 3 76 3 76 3 17 1 58 3 + 4 2 4 22 44 3 3 31 42 3 3 32 41 3 2 33 41 3 2 33 41 4 1 33 41 38 41 + 38 41 38 41 38 41 38 41 38 40 39 40 39 40 39 40 39 40 40 2 3 25 1 2 + 52 32 47 33 47 32 47 31 45 34 46 33 45 35 43 36 43 36 40 38 41 38 41 + 38 41 38 41 38 41 38 41 38 41 37 42 37 44 35 45 34 46 12 5 16 46 5 27 + 1 46 4 75 3 76 1 78 2 77 2 76 3 77 4 75 3 76 3 76 5 74 1 1 3 74 2 76 + 3 76 3 3 2 71 8 72 6 73 6 73 7 72 8 72 7 73 6 73 6 73 6 73 6 74 5 74 + 5 74 5 75 5 75 3 76 3 29 0 + + + + 9243.0 + + + 0.675213675214 + + + 3506.0 + + + 0.162863662293 + + + 1.38230584468 + + + 0.498347155792 0.39860977241 0.128515058638 0.177897231995 + 0.0955883067367 -0.00269540854697 -0.00127041714042 + -0.00452177653742 0.0219261278539 + + + 79.0 + + + 0.696202531646 0.478632478632 + + + 0.354430379747 0.405063291139 1.56962025316 0.405063291139 + 0.991452991453 0.717948717949 0.136752136752 0.0683760683761 + + + 117.0 + + + 14.0 41.0 0.23768115942 4.0 2.0 3.0 + + + 0.0 0.991452991453 + + + 0.379314075517 + + + 0.785843920145 0.642468239564 0.0 0.0 0.762068965517 0.68275862069 + 0.0379310344828 0.0 0.165517241379 0.587931034483 0.887931034483 + 0.226666666667 0.0 0.505172413793 0.824137931034 0.0 + + + 0.634920634921 0.837037037037 0.873015873016 0.377777777778 0.0 0.0 + 0.0 0.0 0.642857142857 1.0 1.0 0.353333333333 0.0 0.0 0.0 0.0 0.5 + 0.84 0.95 0.326666666667 0.0 0.0 0.0 0.0 0.685714285714 1.0 1.0 + 0.493333333333 0.0866666666667 0.0642857142857 0.0 0.0 + 0.314285714286 0.346666666667 0.35 0.953333333333 0.753333333333 + 0.907142857143 0.346666666667 0.473333333333 0.0 0.0 0.0 + 0.993333333333 1.0 0.892857142857 0.0 0.0866666666667 0.0 0.0 0.0 + 0.993333333333 0.993333333333 0.928571428571 0.0 0.0 0.0 0.0 + 0.0714285714286 0.893333333333 0.74 0.628571428571 0.0 0.0 + + + 0.550178890146 0.130410317351 0.039219420413 0.0260057074046 + 0.240212345117 0.358436385043 0.020825584049 0.0433094140885 + 0.0202333788001 0.0338383696074 0.110143971031 0.424640535153 + 0.0726967597699 0.0192462812943 + + + + + + + + + 22 1 24 13 1 6 25 20 6 5 9 1 4 20 5 9 5 2 4 20 5 16 4 21 3 17 4 16 2 + 2 3 18 4 20 3 18 4 16 1 3 3 18 4 20 2 5 1 13 4 20 1 20 4 20 1 20 4 20 + 1 20 2 43 2 43 2 44 1 45 2 41 4 41 4 41 4 40 5 40 5 3 2 35 5 4 1 34 6 + 4 1 34 6 40 5 40 6 39 6 39 6 39 6 39 6 39 6 39 6 39 6 39 6 7 1 31 6 6 + 3 30 6 7 1 20 1 10 6 7 2 19 5 6 6 39 6 39 6 39 6 39 6 39 7 38 8 1 13 + 3 1 19 29 1 4 11 36 2 1 6 42 3 44 1 3 0 + + + + 2250.0 + + + 0.9 + + + 1727.0 + + + 0.145338737695 + + + 1.07452093683 + + + 0.498315523504 0.479125060563 0.0799222783847 0.0935484102769 + 0.00786650268274 -0.000130487967356 0.000585279348715 + -0.00127611620016 0.00102263299323 + + + 45.0 + + + 0.4 0.6 + + + 0.355555555556 0.444444444444 0.444444444444 0.355555555556 1.28 + 0.24 0.16 0.64 + + + 50.0 + + + 3.0 27.0 0.211822660099 1.0 6.0 3.0 + + + 0.0 0.98 + + + 0.767555555556 + + + 0.75 0.846153846154 0.719696969697 0.433566433566 0.886363636364 + 1.0 0.992424242424 0.629370629371 0.590909090909 0.993006993007 1.0 + 0.685314685315 0.597222222222 0.807692307692 0.75 0.634615384615 + + + 0.5 0.6 0.866666666667 0.6 0.466666666667 0.4 0.4 0.0857142857143 + 0.833333333333 1.0 1.0 0.904761904762 1.0 0.916666666667 + 0.944444444444 0.309523809524 0.8 1.0 1.0 1.0 1.0 0.966666666667 + 0.966666666667 0.285714285714 0.833333333333 0.916666666667 1.0 1.0 + 1.0 1.0 1.0 0.357142857143 0.166666666667 0.638888888889 + 0.972222222222 1.0 1.0 1.0 1.0 0.428571428571 0.666666666667 + 0.966666666667 1.0 1.0 1.0 1.0 0.9 0.485714285714 0.416666666667 + 1.0 1.0 1.0 1.0 1.0 0.916666666667 0.690476190476 0.305555555556 + 0.666666666667 0.75 0.5 0.5 0.5 0.5 0.452380952381 + + + 0.402459524467 0.033143349304 0.00428261721398 0.0142704805812 + 0.0294140856238 0.0259281021845 0.0846971503768 0.014197236224 + 0.0325986939177 0.008044964426 0.147974925857 0.031873710917 + 0.146806169297 0.0278626742734 + + + + + + + + + 1 1 73 1 73 1 73 2 72 2 72 3 71 4 6 20 3 2 39 35 39 35 39 35 39 35 39 + 35 39 34 40 35 39 35 39 34 40 35 39 35 39 35 39 35 39 35 39 35 39 35 + 39 35 40 34 40 34 40 34 40 34 40 34 40 34 40 35 37 38 37 37 38 36 38 + 36 37 37 37 37 38 34 40 34 40 7 2 25 40 34 41 33 31 2 8 33 31 2 8 34 + 30 2 8 36 21 3 3 4 7 67 7 67 7 68 6 69 5 16 11 42 6 3 24 41 6 1 27 41 + 5 1 27 41 33 41 33 41 33 41 33 41 33 41 33 41 34 41 33 41 33 40 34 40 + 34 17 1 21 35 38 36 34 40 2 6 24 42 4 1 27 42 39 35 7 2 31 34 4 4 32 + 34 40 34 40 34 40 34 40 34 41 33 41 33 41 33 41 33 41 33 41 33 41 33 + 41 33 41 33 41 33 41 33 41 33 41 33 6 4 6 1 7 1 2 6 8 34 4 34 1 35 4 + 69 5 69 5 70 3 71 2 72 2 72 2 71 4 37 0 + + + + 7252.0 + + + 0.755102040816 + + + 3271.0 + + + 0.13084683583 + + + 1.46832579186 + + + 0.500291059246 0.50041760299 0.124205205983 0.170918497775 + 0.102298656045 0.000803154599176 -0.00635935788028 + -0.00348315545691 -0.00387819402797 + + + 74.0 + + + 0.432432432432 0.224489795918 + + + 0.216216216216 0.27027027027 0.594594594595 0.432432432432 + 0.0816326530612 0.244897959184 0.367346938776 0.204081632653 + + + 98.0 + + + 2.0 21.0 0.194029850746 2.0 9.0 3.0 + + + 0.0 0.989795918367 + + + 0.451047986762 + + + 0.717592592593 0.877777777778 0.0462962962963 0.0 0.699561403509 + 0.974736842105 0.236842105263 0.191578947368 0.0 0.177777777778 + 0.972222222222 0.637777777778 0.0 0.16 0.890350877193 + 0.623157894737 + + + 0.5 0.888888888889 0.814814814815 0.717948717949 0.101851851852 0.0 + 0.0 0.0 0.481481481481 1.0 1.0 0.982905982906 0.0833333333333 0.0 + 0.0 0.0 0.5 1.0 1.0 1.0 0.00925925925926 0.0 0.0 0.0 0.425 + 0.883333333333 0.95 0.953846153846 0.508333333333 0.383333333333 + 0.4 0.330769230769 0.0 0.0 0.0462962962963 0.333333333333 1.0 + 0.898148148148 1.0 0.307692307692 0.0 0.0 0.0 0.307692307692 1.0 + 0.990740740741 1.0 0.299145299145 0.0 0.0 0.0 0.333333333333 1.0 + 1.0 1.0 0.264957264957 0.0 0.0 0.0 0.284615384615 0.9 + 0.683333333333 0.983333333333 0.3 + + + 0.45537625628 0.177616085579 0.0293941521067 0.0222449935807 + 0.0607371039748 0.384346237286 0.0674879859768 0.0471278108431 + 0.0393489413197 0.0187699738352 0.107858898038 0.291699025345 + 0.129463711311 0.0414185846893 + + + + + + + + + 13 1 19 2 10 2 18 2 11 2 17 2 4 2 5 2 17 2 4 2 5 1 18 2 2 5 4 1 18 1 + 3 5 10 2 17 3 9 3 18 2 9 1 110 1 30 3 10 1 18 3 1 1 8 1 17 6 8 1 17 + 10 4 4 2 3 9 11 2 6 1 4 8 4 1 6 2 12 7 25 7 11 1 13 7 11 2 12 8 10 2 + 5 2 5 9 6 5 5 2 5 12 3 5 5 2 5 12 4 4 5 2 5 12 4 4 5 2 5 7 18 2 4 10 + 1 1 6 1 7 2 4 12 1 1 4 1 7 2 1 2 1 8 7 1 2 1 13 8 10 1 7 1 2 12 2 1 6 + 3 5 1 1 13 1 3 5 3 4 2 1 18 3 4 4 3 1 12 2 3 2 6 3 3 1 1 1 10 3 3 2 5 + 4 2 3 10 3 4 1 5 4 2 4 9 3 4 1 5 3 4 3 9 3 10 2 5 3 9 3 10 4 2 4 9 3 + 10 10 9 3 10 9 10 3 11 9 9 3 11 9 9 3 11 9 9 3 10 10 9 3 11 3 1 4 10 + 3 11 2 16 4 11 1 16 5 10 1 16 6 26 7 26 6 27 6 13 2 11 6 10 6 10 5 12 + 5 10 6 12 4 12 3 6 1 7 2 14 2 7 2 21 2 8 1 17 2 2 1 9 1 17 2 2 1 6 6 + 2 1 16 1 6 6 2 2 11 6 5 5 4 2 9 10 1 7 14 1 1 18 1 1 12 25 6 26 5 28 + 4 30 2 31 1 31 1 31 1 1 1 29 1 8 1 22 2 7 2 21 2 5 5 20 1 7 4 20 1 30 + 2 28 5 28 4 29 3 29 4 29 5 27 12 20 13 19 13 13 1 5 13 18 15 12 2 3 + 15 6 1 5 3 2 14 7 1 6 7 1 10 14 1 2 4 1 9 19 3 1 9 19 3 1 4 1 4 19 3 + 1 3 14 2 9 3 1 1 4 3 9 1 10 3 4 6 19 3 3 6 20 3 3 6 20 3 3 7 19 3 3 9 + 17 3 3 10 16 3 2 13 14 4 1 14 13 4 1 15 12 4 1 16 11 23 9 24 8 25 7 + 26 5 28 5 28 4 29 3 30 3 30 1 1 0 + + + + 3776.0 + + + 0.271186440678 + + + 1720.0 + + + 0.44476744186 + + + 1.20507140369 + + + 0.498480870218 0.554730669847 0.0422533076883 0.510083822022 + 0.0597205187122 -0.000873297982334 -0.00436352457664 + 0.00214319277892 -0.137489272671 + + + 32.0 + + + 4.03125 1.12711864407 + + + 5.375 4.375 4.75 1.625 1.28813559322 1.62711864407 0.64406779661 + 0.881355932203 + + + 118.0 + + + 11.0 52.0 0.257534246575 17.0 6.0 2.0 + + + 0.0 0.991525423729 + + + 0.455508474576 + + + 0.5 0.520833333333 0.633620689655 0.154166666667 0.405172413793 + 0.270833333333 0.745689655172 0.258333333333 0.396551724138 + 0.508333333333 0.831896551724 0.65 0.0387931034483 0.0125 + 0.637931034483 0.741666666667 + + + 0.267857142857 0.683333333333 0.616666666667 0.55 0.464285714286 + 0.466666666667 0.233333333333 0.15 0.160714285714 0.85 + 0.366666666667 0.55 0.767857142857 0.833333333333 0.2 + 0.0333333333333 0.178571428571 0.5 0.283333333333 0.05 + 0.553571428571 0.683333333333 0.116666666667 0.0 0.178571428571 + 0.733333333333 0.633333333333 0.116666666667 0.75 0.983333333333 + 0.866666666667 0.05 0.0357142857143 0.583333333333 0.583333333333 + 0.316666666667 0.75 1.0 1.0 0.233333333333 0.0714285714286 0.85 + 0.633333333333 0.5 0.553571428571 1.0 0.916666666667 0.45 0.0 0.15 + 0.0 0.05 0.428571428571 1.0 0.883333333333 0.7 0.0 0.0 0.0 0.0 + 0.214285714286 0.866666666667 0.683333333333 0.7 + + + 0.540570705022 0.181110245886 0.127367482516 0.0452734602628 + 0.341249917401 0.393429776613 0.106419091483 0.248720304082 + 0.0383825557274 0.0457900594589 0.19810714864 0.367025633065 + 0.251511569385 0.0659043627679 + + + + + + + + + 62 2 76 4 75 4 75 4 75 4 75 4 75 3 76 4 75 4 75 3 75 4 76 4 75 4 75 4 + 75 3 76 4 75 4 75 4 75 4 75 3 75 4 76 3 156 3 76 3 75 2 78 1 235 5 73 + 4 76 1 239 1 61 2 14 1 21 1 39 3 35 3 38 4 33 4 38 4 12 1 21 4 36 5 + 12 2 20 3 37 6 11 1 21 3 37 7 8 3 61 13 66 7 32 3 37 8 31 5 35 10 28 + 6 36 11 26 5 36 11 28 5 34 11 27 7 35 15 23 6 35 16 22 6 35 20 17 7 + 34 18 3 2 15 8 34 16 4 2 14 13 13 2 15 16 19 1 1 21 2 4 14 24 14 27 + 14 25 13 27 14 26 12 27 14 29 9 27 14 30 8 27 14 32 6 27 14 32 6 28 + 13 33 5 27 13 35 4 27 13 35 3 28 13 35 3 28 15 34 2 16 3 9 16 33 1 17 + 3 9 17 25 1 6 2 28 14 27 10 27 15 27 9 28 15 1 3 24 9 28 14 1 3 4 1 + 19 2 1 6 28 14 1 6 25 5 28 20 26 5 18 1 9 20 27 4 9 10 5 24 27 20 1 3 + 5 25 25 17 5 1 5 27 24 4 3 8 7 1 8 24 19 2 3 4 7 3 8 1 9 23 18 5 1 3 + 19 2 3 2 3 19 3 1 18 10 28 18 23 4 2 4 27 20 29 3 27 20 28 2 29 20 28 + 2 29 16 2 2 28 3 29 14 2 4 27 4 27 15 2 5 26 4 27 15 2 6 25 4 27 24 + 24 4 27 25 23 4 27 26 22 4 27 27 22 3 27 16 1 11 20 3 28 16 1 12 18 5 + 26 17 1 12 18 5 4 12 11 15 2 14 16 5 3 14 10 14 4 13 2 5 9 5 3 15 9 + 14 4 13 2 4 10 4 4 14 10 14 5 9 5 3 12 3 5 13 9 14 8 8 18 4 4 15 8 15 + 6 9 4 1 13 4 4 15 8 15 6 9 1 5 11 6 3 16 7 15 9 5 3 3 13 3 5 15 8 14 + 10 5 19 26 5 14 9 7 18 27 4 12 10 12 7 35 3 13 16 5 3 40 2 13 17 4 2 + 41 2 13 21 1 1 42 1 13 23 56 21 1 2 55 23 56 24 55 24 55 24 55 25 54 + 25 54 26 52 28 51 29 50 30 49 31 47 32 47 32 48 31 48 20 1 3 55 26 53 + 27 53 27 58 22 57 22 57 22 57 22 58 11 1 9 61 7 3 1 3 1 1 1 63 6 3 1 + 5 2 62 6 3 3 4 1 62 6 3 3 3 2 35 1 26 5 4 4 2 2 35 1 26 5 4 4 38 3 25 + 5 3 5 38 2 15 2 1 13 3 5 39 1 16 3 1 22 34 3 16 16 3 6 36 2 17 2 1 11 + 4 7 35 2 16 3 1 12 1 9 35 2 16 4 1 20 54 3 3 19 37 1 2 1 13 4 2 19 36 + 4 13 4 3 20 35 2 16 3 6 18 52 2 10 14 35 2 17 2 8 15 35 2 15 4 9 13 + 54 3 10 13 35 1 17 3 11 12 35 2 16 2 13 12 52 4 11 11 53 4 13 9 70 8 + 73 6 74 5 75 5 74 4 75 1 78 1 15 0 + + + + 13272.0 + + + 0.470238095238 + + + 4165.0 + + + 0.303961584634 + + + 1.1554735874 + + + 0.56730076646 0.540549633027 0.113354718768 0.260702696551 + 0.0369501526339 -0.021626211035 0.0253901960546 -0.0147283514048 + 0.0318740798983 + + + 79.0 + + + 3.0 1.16666666667 + + + 1.82278481013 1.62025316456 3.54430379747 4.81012658228 + 0.261904761905 1.59523809524 1.54761904762 1.2619047619 + + + 168.0 + + + 15.0 88.0 0.258389261745 33.0 12.0 4.0 + + + 0.0 0.994047619048 + + + 0.313818565401 + + + 0.0225563909774 0.636591478697 0.329573934837 0.0 0.0 + 0.342857142857 0.269047619048 0.0380952380952 0.0369047619048 + 0.603571428571 0.594047619048 0.464285714286 0.129761904762 + 0.569047619048 0.614285714286 0.357142857143 + + + 0.0 0.0952380952381 0.555555555556 0.687830687831 0.671957671958 + 0.026455026455 0.0 0.0 0.0 0.0 0.452380952381 0.847619047619 + 0.62380952381 0.0 0.0 0.0 0.0 0.0 0.37619047619 0.880952380952 + 0.952380952381 0.119047619048 0.0619047619048 0.0904761904762 0.0 + 0.0 0.047619047619 0.0666666666667 0.0047619047619 0.0 0.0 0.0 0.0 + 0.109523809524 0.442857142857 0.204761904762 0.242857142857 + 0.833333333333 0.371428571429 0.252380952381 0.0 0.0380952380952 + 0.871428571429 0.895238095238 0.414285714286 0.885714285714 + 0.833333333333 0.4 0.371428571429 0.147619047619 0.471428571429 1.0 + 0.885714285714 0.714285714286 0.685714285714 0.733333333333 0.0 0.0 + 0.152380952381 0.652380952381 0.757142857143 0.1 0.00952380952381 + 0.0 + + + 0.611795923773 0.0756068951041 0.0223199695594 0.0525096024025 + 0.415178110567 0.157477127521 0.029399917352 0.117814472284 + 0.174804325422 0.0465255883779 0.0393661518145 0.121099644341 + 0.0676251076121 0.0120106255372 + + + + + + + + + 6 4 17 4 16 6 15 6 7 1 7 6 2 3 1 4 5 10 1 5 5 11 1 4 4 17 4 16 5 5 1 + 11 4 17 4 16 5 16 5 4 1 10 6 2 20 1 311 2 4 3 12 11 2 1 6 15 6 15 6 3 + 4 4 2 1 7 3 4 5 1 1 6 15 7 14 7 14 7 14 8 13 8 13 9 12 9 12 10 9 14 1 + 43 4 17 4 15 7 15 6 17 3 19 1 20 2 9 0 + + + + 1134.0 + + + 0.388888888889 + + + 387.0 + + + 0.503875968992 + + + 0.820123398196 + + + 0.475839793282 0.461996002145 0.0541543365241 0.673174500962 + -0.0601203027512 0.00360992992021 0.00997192779957 -0.0113215240756 + -0.00764036077623 + + + 21.0 + + + 1.42857142857 0.240740740741 + + + 0.380952380952 2.47619047619 2.09523809524 0.571428571429 + 0.444444444444 0.0740740740741 0.444444444444 0.0 + + + 54.0 + + + 6.0 15.0 0.293333333333 2.0 4.0 0.0 + + + 0.0 0.981481481481 + + + 0.34126984127 + + + 0.0923076923077 0.0285714285714 0.553846153846 0.157142857143 + 0.953846153846 0.0857142857143 0.630769230769 0.542857142857 + 0.692307692308 0.0714285714286 0.630769230769 0.542857142857 + 0.628205128205 0.047619047619 0.0384615384615 0.0 + + + 0.0 0.0 0.0 0.0 0.0833333333333 0.571428571429 0.0 0.0 0.0 + 0.285714285714 0.0952380952381 0.0 0.444444444444 0.904761904762 + 0.52380952381 0.0 0.833333333333 1.0 0.285714285714 0.0 + 0.333333333333 0.714285714286 0.785714285714 0.0714285714286 1.0 + 0.952380952381 0.0952380952381 0.0 0.444444444444 0.904761904762 + 0.714285714286 0.52380952381 0.333333333333 1.0 0.142857142857 0.0 + 0.388888888889 0.952380952381 0.714285714286 0.714285714286 + 0.333333333333 1.0 0.142857142857 0.0 0.166666666667 0.857142857143 + 0.571428571429 0.0 0.222222222222 0.952380952381 0.142857142857 0.0 + 0.111111111111 0.047619047619 0.0 0.0 0.388888888889 0.857142857143 + 0.047619047619 0.0 0.0 0.0 0.0 0.0 + + + 0.308525450651 0.280214408007 0.0282811305284 0.0150413576626 + 0.208595639106 0.547370332562 0.153588501368 0.217878750513 + 0.0578940110203 0.0450321753636 0.364234093852 0.389195817068 + 0.3155030927 0.0918773618107 + + + + + + + + + 37 1 61 10 1 7 48 1 2 28 46 33 44 35 44 35 45 34 47 32 42 37 42 37 42 + 37 42 37 42 37 41 38 42 37 42 37 42 37 42 36 43 36 43 35 44 37 42 37 + 42 37 38 1 2 38 37 3 1 38 35 5 1 38 38 1 2 38 41 38 42 37 42 38 42 36 + 36 2 10 31 26 12 8 5 1 27 21 2 1 15 5 5 3 27 14 25 4 36 11 28 4 16 3 + 17 7 32 4 16 3 8 1 2 2 5 2 36 4 75 4 75 4 75 5 7 1 66 5 74 5 21 2 1 1 + 49 5 17 13 44 5 10 21 43 5 3 30 41 5 2 31 41 5 2 32 40 5 2 32 40 6 1 + 32 40 39 40 39 40 39 40 39 37 42 41 38 41 38 41 38 4 1 36 38 3 2 36 + 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 42 37 41 38 41 38 + 41 38 39 1 1 38 39 1 1 38 39 40 26 10 1 42 19 60 14 65 10 70 5 74 2 + 77 3 75 6 74 4 75 2 77 2 39 0 + + + + 6715.0 + + + 0.929411764706 + + + 3260.0 + + + 0.134662576687 + + + 1.42441604231 + + + 0.504479314142 0.469025708443 0.145334510969 0.126270953833 + 0.0853340826075 -0.000875590178066 -0.00444729563579 + -0.00468337442611 -0.000818264036894 + + + 79.0 + + + 0.455696202532 0.411764705882 + + + 0.708860759494 0.405063291139 0.253164556962 0.405063291139 + 0.0941176470588 0.894117647059 0.517647058824 0.141176470588 + + + 85.0 + + + 10.0 37.0 0.241258741259 6.0 3.0 7.0 + + + 0.0 0.988235294118 + + + 0.485480268057 + + + 0.799498746867 0.884711779449 0.130325814536 0.0 0.892857142857 + 0.95 0.159523809524 0.0863636363636 0.0 0.354761904762 + 0.992857142857 0.665909090909 0.0 0.483333333333 0.914285714286 + 0.479545454545 + + + 0.455555555556 0.89898989899 0.933333333333 0.656565656566 + 0.282828282828 0.0 0.0 0.0 0.79 1.0 1.0 0.945454545455 + 0.218181818182 0.0 0.0 0.0 0.89 1.0 1.0 0.963636363636 + 0.0727272727273 0.0 0.0 0.0 0.81 0.863636363636 0.91 0.927272727273 + 0.354545454545 0.2 0.2 0.145454545455 0.0 0.0 0.0 0.563636363636 + 1.0 0.97 1.0 0.490909090909 0.0 0.0 0.0 0.790909090909 1.0 1.0 1.0 + 0.172727272727 0.0 0.0 0.0 0.945454545455 1.0 1.0 1.0 + 0.0363636363636 0.0 0.0 0.12 0.790909090909 0.8 0.86 0.872727272727 + 0.00909090909091 + + + 0.310976473019 0.203578004934 0.0404441790288 0.0320155768219 + 0.0863240701805 0.305880382001 0.0689213243007 0.041127634021 + 0.0424299699536 0.0182621038297 0.0345465259096 0.133826123761 + 0.0244380258572 0.0600208430377 + + + + + + + + + 42 1 80 1 81 2 79 3 78 4 41 2 20 4 9 6 41 16 1 2 2 5 4 11 41 19 2 6 3 + 11 40 20 2 19 41 20 3 18 42 17 5 18 42 16 2 1 1 20 42 40 41 41 41 20 + 1 20 41 20 1 20 41 41 41 41 41 41 41 41 42 40 42 40 41 41 41 41 41 19 + 2 20 41 41 41 41 41 41 41 41 40 43 39 43 36 2 2 42 36 2 2 42 36 2 2 + 42 36 3 1 41 35 5 1 41 36 3 3 40 36 3 4 18 2 19 36 3 2 19 3 19 35 4 2 + 6 4 9 3 19 34 5 2 20 2 19 33 6 3 19 1 20 10 4 1 8 2 4 2 8 3 6 3 7 5 + 58 3 7 2 10 3 33 2 22 3 54 3 21 4 21 1 33 2 21 4 19 3 56 4 26 4 25 2 + 21 4 17 5 3 5 25 3 20 4 13 1 2 5 4 1 29 2 21 4 3 30 21 3 21 5 1 32 20 + 3 21 38 20 2 22 38 21 2 21 38 21 2 21 38 20 3 21 38 20 3 21 38 20 2 + 21 39 20 3 20 39 19 4 20 39 19 4 20 39 20 2 20 40 20 2 12 1 3 44 20 3 + 7 2 2 2 1 45 20 2 17 43 20 2 20 40 3 2 15 2 21 39 43 39 43 38 44 39 + 43 39 43 39 43 39 20 2 21 38 21 3 20 38 21 2 21 38 21 3 20 38 44 38 + 44 39 43 39 43 39 43 39 38 44 38 44 20 3 14 44 14 68 9 73 5 77 4 79 1 + 80 2 81 2 44 0 + + + + 7544.0 + + + 0.891304347826 + + + 3552.0 + + + 0.161317567568 + + + 1.39683794466 + + + 0.491463685908 0.498289154539 0.135468488428 0.138334219866 + 0.0851157428186 0.00129468070489 -0.00272598094675 + -0.00359531288521 0.000641646276969 + + + 82.0 + + + 0.865853658537 0.891304347826 + + + 0.731707317073 1.21951219512 0.926829268293 0.536585365854 + 0.608695652174 1.30434782609 1.4347826087 0.217391304348 + + + 92.0 + + + 14.0 72.0 0.183257918552 4.0 5.0 10.0 + + + 0.0 0.989130434783 + + + 0.470837751856 + + + 0.682608695652 0.913043478261 0.15652173913 0.0 0.714285714286 + 0.958592132505 0.327122153209 0.231884057971 0.0630434782609 + 0.228260869565 0.889130434783 0.691304347826 0.0 0.273291925466 + 0.834368530021 0.56314699793 + + + 0.4 0.866666666667 0.918181818182 0.783333333333 0.327272727273 0.0 + 0.0 0.0 0.436363636364 0.983333333333 1.0 0.958333333333 + 0.327272727273 0.0 0.0 0.0 0.345454545455 0.975 0.981818181818 0.85 + 0.218181818182 0.0 0.0 0.0 0.479338842975 1.0 1.0 1.0 + 0.628099173554 0.439393939394 0.504132231405 0.386363636364 + 0.154545454545 0.1 0.145454545455 0.4 1.0 1.0 1.0 0.508333333333 + 0.0 0.0 0.0 0.341666666667 0.772727272727 0.783333333333 + 0.909090909091 0.391666666667 0.0 0.0 0.0 0.4 1.0 0.966666666667 + 1.0 0.416666666667 0.0 0.0 0.0743801652893 0.568181818182 + 0.818181818182 0.590909090909 0.727272727273 0.181818181818 + + + 0.359332688386 0.185176624571 0.0152393009874 0.0229724552311 + 0.0536296142187 0.317075787552 0.0590816046742 0.0121232703718 + 0.0336971427745 0.0112780933078 0.0553820000939 0.155955733975 + 0.0242338101309 0.0581528737895 + + + + + + + + + 2 1 43 2 42 3 41 3 36 1 4 5 33 2 4 13 25 2 4 19 3 1 15 2 4 20 2 7 1 2 + 5 3 4 20 1 19 4 20 1 19 4 19 3 18 4 19 2 19 4 20 1 19 4 40 4 40 4 40 + 3 41 3 42 1 88 2 41 3 41 3 40 4 41 3 41 3 41 3 41 4 40 4 40 4 4 1 35 + 4 4 1 26 1 8 4 31 1 8 4 40 4 40 5 38 6 38 6 38 6 38 6 7 2 17 1 11 6 7 + 2 17 2 11 5 27 1 2 3 6 6 38 6 38 6 38 6 37 7 37 7 15 2 20 7 2 11 2 2 + 20 8 1 18 17 33 11 42 2 43 1 2 0 + + + + 2288.0 + + + 0.846153846154 + + + 1667.0 + + + 0.146970605879 + + + 1.09044117647 + + + 0.514376194529 0.515179317078 0.0827480763917 0.0906389984115 + 0.0127122722071 -0.000249490165752 -7.039954701e-05 + -0.00205028079143 0.000995682211199 + + + 44.0 + + + 0.295454545455 0.519230769231 + + + 0.0909090909091 0.272727272727 0.272727272727 0.545454545455 1.0 + 0.0 0.461538461538 0.615384615385 + + + 52.0 + + + 7.0 24.0 0.172248803828 1.0 3.0 5.0 + + + 0.0 0.980769230769 + + + 0.728583916084 + + + 0.601398601399 0.86013986014 0.685314685315 0.370629370629 + 0.545454545455 1.0 0.986013986014 0.601398601399 0.405594405594 1.0 + 0.993006993007 0.741258741259 0.391608391608 0.888111888112 + 0.86013986014 0.727272727273 + + + 0.5 0.6 0.733333333333 0.657142857143 0.433333333333 0.257142857143 + 0.0666666666667 0.0 0.222222222222 1.0 1.0 1.0 0.944444444444 1.0 + 1.0 0.357142857143 0.133333333333 1.0 1.0 1.0 1.0 0.942857142857 + 0.933333333333 0.285714285714 0.0 0.928571428571 1.0 1.0 1.0 1.0 + 1.0 0.285714285714 0.0 0.657142857143 1.0 1.0 1.0 1.0 1.0 + 0.485714285714 0.0 0.833333333333 1.0 1.0 1.0 0.97619047619 + 0.916666666667 0.619047619048 0.0 0.742857142857 1.0 1.0 + 0.933333333333 1.0 0.9 0.714285714286 0.138888888889 0.595238095238 + 0.75 0.833333333333 0.833333333333 0.714285714286 0.805555555556 + 0.547619047619 + + + 0.460768752899 0.0379354248356 0.00767373718155 0.0165877192016 + 0.0477524582989 0.0333990633437 0.0717906365035 0.00504353321179 + 0.032673675626 0.00532395940149 0.189652672779 0.0315922894223 + 0.142353614945 0.0282186417213 + + + + + + + + + 11 1 20 1 19 3 16 5 16 6 15 1 1 3 16 6 15 6 15 6 15 6 16 5 15 5 16 6 + 14 7 15 6 15 6 16 4 17 4 18 2 19 3 17 4 17 4 18 3 17 5 16 5 15 6 15 6 + 15 6 15 6 15 6 15 6 15 6 16 5 16 5 15 6 16 5 16 5 16 5 16 5 16 5 16 5 + 16 5 16 5 15 5 16 4 1 1 15 6 15 6 16 5 16 3 1 1 16 5 16 5 16 5 15 6 + 16 5 16 5 16 5 16 5 15 6 15 6 15 6 15 6 16 5 15 6 15 6 15 6 15 6 16 5 + 16 5 15 6 15 6 15 6 16 6 15 6 15 6 15 5 16 5 16 6 15 6 15 6 16 4 17 4 + 17 5 16 5 16 5 16 6 14 7 14 7 14 7 14 7 14 7 14 6 15 6 15 6 15 7 13 8 + 14 6 15 7 14 7 14 7 13 8 14 7 14 7 14 7 15 6 15 6 15 5 16 5 16 5 16 6 + 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 7 14 7 14 7 + 14 7 15 5 15 7 14 7 14 7 15 6 15 6 15 7 14 7 14 7 14 7 14 7 14 7 14 6 + 15 6 16 5 16 6 15 5 16 4 17 5 16 5 16 5 16 5 16 6 15 6 15 6 15 7 14 6 + 15 6 15 6 15 6 4 3 8 7 2 4 8 7 2 4 8 6 4 2 8 8 3 2 8 8 13 8 12 10 11 + 10 12 9 12 8 13 8 16 2 2 1 20 1 20 1 20 1 18 1 1 1 17 2 1 1 16 3 1 1 + 16 3 1 1 17 2 19 2 19 4 17 4 18 4 17 4 17 4 17 4 17 4 17 4 18 3 18 3 + 18 3 18 4 17 4 17 4 18 3 19 1 1 0 + + + + 4011.0 + + + 0.109947643979 + + + 1055.0 + + + 0.484360189573 + + + 1.04974968711 + + + 0.618151658768 0.503447243702 0.00815791046368 2.51655121078 + 0.0794610579958 -0.000177209350024 0.0308822871396 0.0077030500337 + -0.352252081746 + + + 21.0 + + + 1.95238095238 0.0680628272251 + + + 0.0 2.66666666667 2.47619047619 2.66666666667 0.0418848167539 + 0.020942408377 0.0 0.20942408377 + + + 191.0 + + + 3.0 12.0 0.171568627451 3.0 20.0 1.0 + + + 0.0 0.994764397906 + + + 0.263026676639 + + + 0.0 0.0 0.0 0.0625 0.276595744681 0.229166666667 0.0375 0.0 + 0.714893617021 0.879166666667 0.9125 0.329166666667 0.0 + 0.0277777777778 0.25 0.534722222222 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.145833333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.111111111111 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.420289855072 + 0.5 0.5 0.263888888889 0.125 0.0 0.0 0.0 0.927536231884 + 0.986111111111 0.986111111111 1.0 1.0 0.708333333333 0.444444444444 + 0.0 0.217391304348 0.479166666667 0.5 0.916666666667 1.0 1.0 0.9375 + 0.0416666666667 0.0 0.0 0.0 0.111111111111 0.277777777778 + 0.722222222222 0.888888888889 0.486111111111 0.0 0.0 0.0 0.0 0.0 + 0.0 0.222222222222 0.541666666667 + + + 0.410026747019 0.271233482601 0.0501949164015 0.0187028707738 + 0.332953264525 0.381797369421 0.241489794251 0.029230669047 + 0.0334372293702 0.0324601775609 0.364001392587 0.341485181366 + 0.353677258134 0.220407380328 + + + + + + + + + 17 3 6 2 3 3 8 1 153 12 4 13 3 2 152 13 4 18 147 1 1 1 2 13 2 21 145 + 19 2 20 145 9 1 8 6 18 145 4 1 3 3 6 6 19 145 20 2 20 146 19 2 20 146 + 19 2 20 146 20 1 20 145 21 1 20 145 42 146 20 1 20 146 41 146 41 145 + 42 145 41 146 20 2 19 147 40 146 41 145 42 146 41 146 42 20 7 118 41 + 20 10 1 3 112 6 1 34 20 9 2 1 114 4 4 33 20 10 117 27 1 12 19 10 118 + 26 3 11 17 12 121 4 1 10 1 7 3 9 18 13 4 3 116 1 3 7 5 5 3 9 18 14 3 + 5 109 1 4 1 4 6 1 1 3 3 6 1 25 15 1 5 110 2 3 1 4 6 1 1 2 13 23 22 + 109 2 3 2 3 9 2 18 16 15 1 9 107 3 1 3 2 11 1 19 15 14 3 9 106 7 2 31 + 15 15 1 11 105 40 14 16 4 9 104 39 15 31 102 19 2 18 15 32 102 15 5 + 19 14 33 101 15 5 18 14 35 106 8 7 18 13 36 119 17 1 1 13 36 137 1 13 + 37 149 39 148 40 147 41 146 7 1 33 147 4 4 32 146 5 3 25 1 6 147 5 4 + 22 4 5 146 6 3 22 5 2 149 6 3 23 5 1 18 1 131 1 2 1 6 20 22 5 132 2 6 + 21 21 6 139 21 21 7 128 2 8 22 19 8 128 2 8 22 19 10 126 2 7 19 23 11 + 134 18 23 12 135 17 23 11 137 5 2 9 23 12 137 3 4 7 24 13 136 3 5 6 + 24 13 136 4 4 6 23 13 137 14 23 12 136 8 1 1 2 1 25 13 138 1 6 5 3 4 + 17 13 142 9 1 6 1 2 13 12 10 1 126 3 4 8 3 7 13 13 7 4 125 4 5 6 2 8 + 13 16 3 5 126 4 2 17 15 17 3 4 126 22 16 16 2 10 122 1 2 18 16 29 123 + 18 13 2 3 30 122 17 12 37 122 15 13 38 123 13 13 38 125 11 13 39 127 + 4 16 40 147 41 131 2 12 44 128 3 12 45 124 6 12 45 124 5 12 37 2 6 11 + 2 114 3 12 38 2 5 10 4 112 4 11 45 11 5 114 1 11 46 9 7 125 8 3 35 8 + 11 122 9 1 35 9 10 123 8 3 4 2 27 10 9 124 13 4 27 10 10 123 14 4 15 + 2 9 10 11 122 9 1 3 4 2 2 12 2 4 1 3 11 11 122 1 3 3 1 1 5 5 3 11 3 7 + 11 13 124 7 2 6 3 11 20 14 125 1 1 4 4 4 5 9 19 15 127 5 1 6 6 8 6 1 + 1 1 10 12 137 5 6 7 8 1 10 13 150 3 10 1 10 14 150 1 22 14 150 1 4 3 + 3 2 10 18 4 2 145 8 9 29 141 8 9 30 143 4 10 5 2 25 141 4 9 34 140 3 + 10 35 140 1 11 35 151 38 149 39 131 3 14 40 131 4 12 5 3 33 131 4 11 + 5 4 33 130 3 14 4 2 35 128 4 14 30 2 9 128 5 12 31 3 3 1 3 130 3 13 3 + 3 26 140 2 21 21 1 1 8 4 130 1 14 1 7 20 10 4 130 1 14 2 6 22 8 1 131 + 2 25 21 140 1 25 21 167 20 166 19 1 1 166 1 1 17 171 1 2 13 1 1 173 + 11 3 2 1 2 169 9 4 7 159 4 4 9 7 2 161 4 5 9 168 5 8 6 169 5 8 4 1 4 + 168 1 9 14 173 14 155 5 6 21 156 7 2 21 159 28 159 28 165 22 167 19 + 167 20 168 4 1 14 172 14 180 7 181 6 181 5 172 1 1 1 5 7 173 14 174 + 13 174 14 175 11 177 10 178 9 179 7 180 7 183 1 13 0 + + + + 29172.0 + + + 1.19871794872 + + + 5400.0 + + + 0.283888888889 + + + 1.94256175951 + + + 0.492444245321 0.426738351254 0.555033458308 0.289352652035 + 0.374845068206 -0.000470139720862 0.0314270396304 0.0229725168379 + 0.0332442423912 + + + 187.0 + + + 1.32620320856 1.66025641026 + + + 1.13368983957 1.39037433155 1.09090909091 1.68983957219 + 1.89743589744 1.87179487179 2.10256410256 0.769230769231 + + + 156.0 + + + 23.0 122.0 0.255235602094 38.0 1.0 3.0 + + + 0.0 0.99358974359 + + + 0.185109008638 + + + 0.782051282051 0.0624303232999 0.0 0.0 0.163666121113 + 0.500272776869 0.0212765957447 0.0 0.0 0.240589198036 + 0.451718494272 0.0038188761593 0.0 0.0 0.40043644299 0.33769776323 + + + 0.775743707094 0.797826086957 0.0869565217391 0.0 0.0 0.0 0.0 0.0 + 0.812356979405 0.74347826087 0.169336384439 0.0 0.0 0.0 0.0 0.0 0.0 + 0.375 0.524122807018 0.135416666667 0.0 0.0 0.0 0.0 0.0 + 0.260869565217 0.839816933638 0.534782608696 0.0892448512586 0.0 + 0.0 0.0 0.0 0.0 0.105263157895 0.567391304348 0.745995423341 + 0.0347826086957 0.0 0.0 0.0 0.0 0.0 0.279166666667 0.883771929825 + 0.172916666667 0.015350877193 0.0 0.0 0.0 0.0 0.0 0.299771167048 + 0.741304347826 0.256292906178 0.0673913043478 0.0 0.0 0.0 0.0 0.0 + 0.545833333333 0.537280701754 0.48125 + + + 0.379786805071 0.270879822687 0.0522106276988 0.0274555489115 + 0.183068699364 0.414712573373 0.208928570794 0.0583946442442 + 0.0596861932912 0.0526019039127 0.355535845008 0.168388630924 + 0.40772020596 0.147027305279 + + + + + + + + + 5 2 42 2 42 2 11 1 30 18 1 8 17 28 16 22 2 7 13 34 10 35 9 35 8 36 8 + 36 8 18 3 15 8 18 2 16 8 36 8 36 8 37 7 37 7 37 7 37 7 37 7 37 7 38 6 + 38 6 39 3 42 3 41 3 41 3 40 4 40 4 40 4 40 4 38 7 37 6 38 7 33 11 33 + 11 37 7 37 7 37 8 36 8 36 8 35 8 36 8 36 8 36 8 36 8 14 2 2 9 9 9 4 + 26 5 9 3 28 4 9 3 28 4 9 3 29 3 9 3 29 2 11 1 30 2 42 3 42 1 43 1 43 + 1 43 1 43 1 43 1 43 1 43 2 42 2 42 1 43 1 43 1 43 1 43 1 43 1 43 1 87 + 1 43 1 43 1 43 1 7 2 34 1 7 2 34 2 6 3 33 2 6 3 33 2 6 3 33 2 6 3 33 + 2 6 4 32 2 6 4 32 2 6 5 31 2 5 6 31 3 4 6 30 5 3 6 30 5 3 6 31 3 4 6 + 31 4 4 6 29 5 3 8 27 7 1 9 27 7 2 7 29 5 3 7 30 3 4 7 30 2 5 16 21 2 + 5 33 3 3 5 39 5 39 5 39 5 40 4 40 4 39 5 40 4 40 4 40 4 40 4 40 5 39 + 5 39 5 39 5 39 5 39 5 39 5 39 5 39 6 38 11 30 14 31 16 30 14 30 7 2 5 + 30 5 39 5 39 5 39 6 38 5 39 5 39 5 39 5 6 2 32 4 40 4 39 5 40 4 40 4 + 40 4 40 4 40 4 40 4 40 4 7 17 3 1 11 5 6 26 7 5 6 28 5 5 6 29 5 4 6 + 30 4 4 6 30 4 4 6 30 4 4 6 29 6 3 6 30 5 3 5 31 5 4 3 32 6 3 3 33 5 3 + 2 33 5 5 1 33 5 39 5 40 3 42 2 42 2 43 1 2 0 + + + + 6952.0 + + + 0.278481012658 + + + 3647.0 + + + 0.179873868933 + + + 0.968472736219 + + + 0.498989293526 0.480043801816 0.0384558978863 0.624347886531 + -0.000179303820878 2.27505615707e-05 0.00332766874198 + 0.00388057424479 -0.0463737870367 + + + 44.0 + + + 1.90909090909 0.329113924051 + + + 2.27272727273 1.0 1.45454545455 2.90909090909 0.126582278481 + 0.278481012658 0.455696202532 0.430379746835 + + + 158.0 + + + 8.0 30.0 0.226519337017 5.0 5.0 1.0 + + + 0.0 0.993670886076 + + + 0.524597238205 + + + 0.610722610723 0.181818181818 0.713286713287 0.509090909091 + 0.925407925408 0.195454545455 0.578088578089 0.525 0.902097902098 + 0.179545454545 0.564102564103 0.538636363636 0.629370629371 0.25 + 0.526806526807 0.595454545455 + + + 0.105263157895 0.3 0.05 0.1 0.747368421053 0.66 0.48 0.4 + 0.894736842105 1.0 0.541666666667 0.0 0.456140350877 0.975 + 0.816666666667 0.316666666667 0.842105263158 1.0 0.4 0.0 + 0.157894736842 1.0 1.0 0.05 0.850877192982 1.0 0.383333333333 0.0 + 0.114035087719 1.0 1.0 0.05 0.778947368421 1.0 0.35 0.0 + 0.105263157895 1.0 1.0 0.06 0.815789473684 1.0 0.366666666667 0.0 + 0.105263157895 1.0 1.0 0.0916666666667 0.715789473684 0.98 0.51 0.0 + 0.157894736842 1.0 1.0 0.18 0.254385964912 0.625 0.291666666667 0.2 + 0.5 0.45 0.55 0.65 + + + 0.312623542377 0.283886488779 0.0588478025274 0.0270891681393 + 0.176428469551 0.542969477053 0.16353856137 0.165741491177 + 0.0423632662043 0.0316086359455 0.237866022651 0.305132898098 + 0.392700350299 0.0727465670871 + + + + + + + + + 61 1 205 2 174 1 29 2 174 1 29 2 173 3 28 3 172 4 25 6 170 6 24 6 171 + 4 27 2 173 4 27 2 173 3 28 2 173 3 28 2 173 3 28 2 173 3 27 3 173 3 + 26 4 174 32 174 32 174 32 174 32 174 32 174 33 173 33 173 33 173 33 + 173 33 173 33 173 33 174 31 175 31 175 31 175 32 174 32 174 32 20 1 + 153 32 18 4 152 32 18 5 151 27 23 6 158 5 8 3 25 7 150 4 1 13 1 9 21 + 8 149 29 21 8 120 1 27 32 18 9 119 1 27 32 18 10 118 1 27 32 18 11 + 117 1 27 32 17 12 117 1 28 32 15 13 117 2 27 32 14 14 117 2 27 31 15 + 14 117 2 26 32 15 14 117 2 26 30 16 12 120 2 26 32 15 11 120 2 26 32 + 16 11 8 1 110 2 26 32 16 12 6 3 108 3 26 32 15 14 5 5 106 3 26 32 13 + 17 3 8 105 2 26 32 13 4 1 13 2 9 103 4 25 32 13 3 4 23 102 4 25 32 12 + 5 3 3 1 20 101 5 23 33 12 8 1 2 1 21 100 6 21 34 12 5 3 3 1 22 99 7 1 + 3 2 6 6 10 24 2 11 36 98 12 1 21 26 1 11 38 96 12 6 16 26 1 11 38 99 + 8 8 15 26 2 10 39 100 2 11 16 26 2 9 41 96 3 13 16 26 3 8 42 93 11 4 + 1 1 18 24 4 8 42 91 38 23 5 5 45 90 38 23 5 5 46 88 39 22 6 5 45 17 1 + 72 2 2 1 1 32 23 5 5 10 1 33 17 1 72 39 23 4 6 10 2 31 18 5 68 39 23 + 5 5 10 2 30 18 6 68 39 23 4 6 10 5 1 1 23 1 2 16 9 67 37 25 3 6 13 4 + 26 15 11 66 4 3 30 25 2 7 16 1 18 2 3 18 11 65 5 2 31 26 1 8 15 1 24 + 17 12 65 4 2 31 26 1 8 2 2 11 2 1 2 16 1 3 16 13 1 2 62 37 26 1 8 18 + 2 20 16 17 61 38 25 1 8 9 2 7 3 11 6 2 15 19 65 33 25 1 9 1 3 1 5 7 3 + 10 24 20 60 2 3 32 25 1 13 1 9 2 5 10 7 1 14 22 59 37 25 1 14 2 16 10 + 4 3 13 24 56 38 25 1 15 1 17 10 3 2 14 25 56 4 3 30 60 1 2 6 3 1 14 + 27 55 4 1 32 63 6 3 1 14 28 54 37 64 5 1 3 14 28 54 37 65 7 14 30 54 + 36 67 4 15 31 53 36 69 2 15 32 52 1 1 34 85 34 51 36 67 1 17 35 50 32 + 68 5 16 36 51 5 2 23 68 5 16 37 48 32 71 1 17 37 48 33 66 2 2 1 16 31 + 3 5 47 36 64 1 19 30 4 5 47 37 62 1 22 28 4 4 48 37 85 26 6 4 49 35 + 86 26 6 4 50 34 87 2 1 23 4 2 1 2 50 34 85 3 5 20 5 1 2 1 51 33 85 4 + 5 19 60 3 19 10 87 3 5 19 60 2 25 5 87 3 6 18 22 5 33 2 26 4 88 2 6 + 19 21 6 32 2 27 3 87 2 7 16 7 1 15 7 33 1 28 2 87 2 7 15 8 2 14 8 61 + 2 94 5 1 11 8 1 15 9 61 1 94 5 2 10 24 10 154 9 1 9 22 12 152 10 2 10 + 19 14 149 12 2 11 4 1 13 14 150 11 1 16 14 13 152 27 13 12 151 30 13 + 12 153 28 13 11 155 27 12 12 156 25 13 13 156 24 13 13 159 21 13 13 + 159 20 13 14 160 19 13 15 1 1 2 1 158 16 12 20 7 1 152 11 14 22 7 1 + 157 5 14 31 149 1 6 3 16 32 149 10 14 34 149 11 12 34 148 13 10 36 + 150 9 10 39 1 1 146 10 9 41 147 10 8 6 1 34 152 5 8 5 2 34 165 16 1 + 24 165 7 1 7 2 25 165 14 2 24 166 14 2 14 3 7 166 14 1 15 3 6 167 14 + 1 15 3 6 167 11 4 15 6 3 166 12 5 12 7 4 168 3 3 4 8 9 5 5 175 5 6 6 + 9 5 177 2 8 5 8 6 187 6 5 8 189 5 4 7 190 5 3 8 178 5 5 7 3 7 181 4 3 + 1 1 7 1 8 190 7 1 3 3 2 191 3 10 1 192 2 11 1 2669 3 203 3 203 4 201 + 5 201 5 201 5 200 5 201 5 202 3 204 2 204 1 14 0 + + + + 35638.0 + + + 1.19075144509 + + + 6691.0 + + + 0.251830817516 + + + 1.56319727698 + + + 0.438444069391 0.449742451679 0.525187533517 0.169104382291 + 0.204004936723 0.104135060495 0.0491613049543 0.121076669201 + 0.00938073555855 + + + 206.0 + + + 1.09708737864 1.91907514451 + + + 1.33980582524 0.932038834951 1.12621359223 0.95145631068 + 0.739884393064 3.81502890173 2.26589595376 0.85549132948 + + + 173.0 + + + 20.0 112.0 0.2533632287 32.0 4.0 7.0 + + + 0.0 0.994219653179 + + + 0.187749031932 + + + 0.268581851345 0.58869129047 0.234838121295 0.0 0.21511627907 + 0.495080500894 0.000894454382826 0.0 0.0 0.289101687187 + 0.414500683995 0.00490196078431 0.0 0.00134168157424 0.267889087657 + 0.240384615385 + + + 0.0 0.00909090909091 0.257142857143 0.914545454545 0.554545454545 + 0.0 0.0 0.0 0.326007326007 0.70979020979 0.641025641026 + 0.52972027972 0.367132867133 0.0 0.0 0.0 0.228937728938 + 0.458041958042 0.395604395604 0.187062937063 0.0 0.0 0.0 0.0 0.0 + 0.164335664336 0.785714285714 0.620629370629 0.0034965034965 0.0 + 0.0 0.0 0.0 0.0 0.198095238095 0.374545454545 0.145454545455 + 0.00190476190476 0.0 0.0 0.0 0.0 0.0 0.566433566434 0.832167832168 + 0.644688644689 0.0192307692308 0.0 0.0 0.0 0.0 0.00524475524476 + 0.194055944056 0.510989010989 0.288461538462 0.0 0.0 0.0 0.0 0.0 + 0.0174825174825 0.364468864469 0.601398601399 0.0716783216783 + + + 0.501879551268 0.176687542277 0.153555146995 0.0906498842676 + 0.216514975544 0.37820229864 0.086418431371 0.229111806333 + 0.11289611622 0.0932168684737 0.0428475434442 0.385956082744 + 0.1398185358 0.0660152756424 + + + + + + + + + 38 1 75 1 73 1 148 2 73 3 72 4 72 4 71 4 71 4 70 17 1 3 1 4 5 1 42 34 + 41 35 40 34 40 35 40 16 1 18 42 33 42 33 38 38 41 33 41 34 43 33 39 + 36 37 38 37 38 37 38 36 39 36 39 36 39 36 39 37 38 37 39 36 37 38 32 + 3 3 37 39 36 40 35 41 33 42 33 42 33 42 1 3 30 41 1 5 28 40 2 2 31 41 + 1 2 32 43 32 40 1 3 31 40 1 4 30 39 2 8 19 1 6 39 3 7 1 21 2 41 3 73 + 1 74 2 73 2 38 1 34 2 40 13 4 2 13 2 38 30 5 3 37 32 3 3 38 32 1 4 37 + 33 2 3 37 33 2 3 37 33 2 3 37 34 1 3 37 34 1 3 37 34 1 3 38 33 1 3 38 + 33 1 3 38 37 38 38 37 38 37 38 3 5 24 2 3 38 3 7 27 38 1 1 1 6 29 37 + 4 5 28 38 7 2 8 1 19 39 37 37 2 2 34 38 1 1 35 37 2 2 34 37 38 38 37 + 38 37 38 38 37 38 37 38 37 38 37 38 37 38 38 37 44 31 47 2 1 26 62 13 + 68 7 70 5 72 3 72 3 73 2 73 2 72 3 72 2 74 1 34 0 + + + + 7500.0 + + + 0.75 + + + 3255.0 + + + 0.153917050691 + + + 0.769112207152 + + + 0.500377797152 0.502257599032 0.1177696566 0.153992572181 + -0.0817607168185 -0.00127489223462 0.000388264359867 + 0.000553246109781 0.00171170781152 + + + 75.0 + + + 0.733333333333 0.42 + + + 0.96 0.533333333333 0.746666666667 0.533333333333 0.16 0.48 0.88 + 0.16 + + + 100.0 + + + 14.0 49.0 0.189759036145 5.0 5.0 4.0 + + + 0.0 0.99 + + + 0.434 + + + 0.0 0.137777777778 0.871111111111 0.453333333333 0.0463157894737 + 0.275789473684 0.993684210526 0.621052631579 0.644210526316 1.0 + 0.206315789474 0.181052631579 0.44 0.871578947368 0.187368421053 + 0.0 + + + 0.0 0.0 0.0 0.376068376068 0.907407407407 0.675213675214 + 0.648148148148 0.042735042735 0.0 0.0 0.0 0.153846153846 1.0 + 0.91452991453 1.0 0.179487179487 0.0 0.0 0.0 0.161538461538 1.0 + 0.992307692308 1.0 0.230769230769 0.00925925925926 0.179487179487 + 0.481481481481 0.495726495726 1.0 0.982905982906 1.0 0.316239316239 + 0.388888888889 0.991452991453 1.0 1.0 0.361111111111 0.230769230769 + 0.388888888889 0.376068376068 0.158333333333 0.992307692308 1.0 1.0 + 0.266666666667 0.0 0.0 0.0 0.138888888889 1.0 1.0 1.0 + 0.314814814815 0.0 0.0 0.0 0.05 0.546153846154 0.625 0.876923076923 + 0.433333333333 0.0230769230769 0.0 0.0 + + + 0.302190159948 0.201139679794 0.0131031038707 0.00438194146625 + 0.0817378240211 0.302088402298 0.0623714098982 0.0272558779898 + 0.00200635204147 0.0117526600353 0.0178498314024 0.146979960106 + 0.0669732288522 0.0450280576488 + + + + + + + + + 168 1 171 3 34 1 104 1 9 3 2 20 34 1 3 1 100 5 1 29 34 2 2 3 99 34 34 + 2 2 4 97 35 34 2 2 5 96 35 34 3 1 6 95 35 34 3 1 7 94 34 35 3 1 7 94 + 20 1 13 35 3 1 9 92 20 1 13 35 14 91 33 36 16 89 4 2 28 35 17 89 2 3 + 29 34 17 89 34 35 10 2 4 89 3 1 30 35 17 87 35 35 18 86 35 35 18 2 2 + 82 35 35 23 81 36 34 24 81 35 34 18 1 7 79 35 34 18 2 6 78 36 34 18 3 + 7 76 35 35 4 3 24 74 35 35 32 8 2 62 35 35 34 7 4 59 35 35 17 1 19 5 + 5 57 36 34 16 4 23 2 5 54 36 34 15 9 19 3 5 52 7 1 29 34 16 8 20 2 12 + 45 36 34 18 3 1 2 23 2 13 43 36 31 31 2 17 5 9 42 37 32 29 5 17 55 36 + 33 20 2 8 5 5 3 6 56 37 32 17 5 10 5 2 1 1 6 2 13 3 2 4 33 37 33 5 5 + 6 8 11 4 4 5 28 29 35 5 1 27 6 8 4 8 9 12 1 2 30 26 35 4 5 24 6 7 7 3 + 14 11 2 2 30 25 35 4 2 26 6 7 3 2 2 3 18 15 31 20 34 5 3 25 5 4 6 9 + 19 17 30 16 35 5 24 1 7 6 7 8 12 1 7 15 33 12 36 4 33 9 5 7 22 13 40 + 5 36 5 33 8 5 9 22 10 83 3 35 6 5 11 20 12 75 1 6 4 31 26 19 10 62 19 + 3 4 29 27 83 28 3 4 36 21 83 27 3 3 38 23 37 1 40 1 1 27 3 3 38 25 35 + 15 26 30 2 3 37 27 33 2 6 8 26 30 2 3 33 20 6 7 4 2 30 17 20 30 2 3 + 37 17 17 4 1 4 24 15 20 30 2 3 37 20 11 1 4 13 1 1 17 14 21 29 2 3 36 + 22 16 12 27 6 20 29 3 3 35 24 18 11 20 1 1 2 3 3 21 30 2 3 37 24 13 2 + 2 10 20 11 21 29 2 3 36 28 16 10 21 8 21 30 1 3 35 31 15 13 46 30 1 3 + 35 34 12 16 43 30 1 3 36 36 13 16 39 30 2 2 36 38 17 13 37 28 3 4 1 2 + 29 43 8 2 6 16 31 29 3 2 36 47 4 4 7 14 28 29 3 2 3 2 32 50 14 18 21 + 30 2 2 39 50 15 15 21 30 2 2 39 53 7 20 3 1 1 1 2 5 9 28 3 2 38 58 1 + 23 2 2 4 4 9 28 3 2 35 2 1 80 23 29 2 2 38 80 24 28 2 2 38 81 23 28 2 + 2 38 81 23 28 2 2 38 81 23 28 2 2 38 81 22 29 2 2 39 74 29 29 1 2 39 + 54 49 29 1 3 38 56 47 29 1 3 38 56 47 29 1 3 38 56 6 2 39 29 1 3 38 + 56 5 6 36 29 1 3 39 58 1 11 32 29 2 2 39 72 30 29 2 2 39 81 21 30 1 3 + 3 1 4 4 5 4 17 82 20 30 1 36 5 86 17 28 2 36 5 87 8 3 4 29 2 37 4 100 + 2 28 4 37 3 98 2 31 3 38 2 132 1 39 2 172 2 171 3 171 3 172 2 134 0 + + + + 16356.0 + + + 1.85106382979 + + + 6372.0 + + + 0.234934086629 + + + 0.696946709653 + + + 0.505111778772 0.495028653585 0.455799633758 0.070207625258 + -0.0556051644912 -0.0259854954186 0.00698202131869 + -0.00305309033018 -0.00166951998779 + + + 174.0 + + + 1.72413793103 2.85106382979 + + + 1.2183908046 2.48275862069 2.22988505747 0.873563218391 + 1.74468085106 3.78723404255 3.91489361702 1.87234042553 + + + 94.0 + + + 32.0 166.0 0.221743810549 18.0 4.0 7.0 + + + 0.0 0.989361702128 + + + 0.389581804842 + + + 0.222446916077 0.399224806202 0.842264914055 0.541666666667 + 0.0701581027668 0.585227272727 0.295454545455 0.0 0.0 + 0.373062015504 0.646107178969 0.283914728682 0.70256916996 + 0.785037878788 0.274703557312 0.213068181818 + + + 0.0 0.0 0.0 0.527777777778 0.995670995671 0.97619047619 + 0.97619047619 0.126984126984 0.256198347107 0.598484848485 + 0.568181818182 0.488636363636 0.702479338843 0.708333333333 + 0.810606060606 0.253787878788 0.0 0.268939393939 0.784090909091 + 0.598484848485 0.235537190083 0.0 0.0 0.0 0.0 0.0 0.473484848485 + 0.484848484848 0.731404958678 0.246212121212 0.0 0.0 0.0 0.0 + 0.047619047619 0.900793650794 0.848484848485 0.357142857143 + 0.238095238095 0.0 0.0 0.0 0.0 0.55303030303 0.694214876033 + 0.700757575758 0.791666666667 0.0909090909091 0.615702479339 + 0.776515151515 0.784090909091 0.795454545455 0.433884297521 + 0.462121212121 0.541666666667 0.189393939394 0.628099173554 + 0.776515151515 0.844696969697 0.715909090909 0.099173553719 + 0.102272727273 0.0681818181818 0.0530303030303 + + + 0.258303225641 0.265740130421 0.0431904316092 0.0349419014317 + 0.029489234999 0.331070463199 0.166197826741 0.0670375247645 + 0.0496198581224 0.0507138340884 0.152395195534 0.256288583764 + 0.200390747398 0.117259540398 + + + + + + + + + 64 3 35 2 33 3 35 4 30 4 35 2 72 1 72 1 72 1 72 1 72 10 12 3 10 1 37 + 31 2 3 37 36 38 35 38 35 38 35 38 35 38 36 37 36 37 36 37 36 37 36 37 + 36 38 35 38 35 38 36 37 36 7 2 28 36 8 1 28 36 7 1 29 36 7 2 28 36 7 + 2 29 35 7 2 29 35 7 1 30 6 3 27 6 1 30 35 7 1 30 35 7 1 31 35 6 1 30 + 36 6 1 30 36 6 3 29 35 6 3 29 35 6 4 28 35 6 4 28 35 6 3 29 35 7 2 29 + 35 7 3 28 35 7 3 28 35 7 8 23 35 7 14 17 36 6 23 7 37 6 22 2 43 6 18 + 3 1 3 42 6 23 1 43 6 18 2 15 3 9 2 1 6 11 6 19 1 15 5 1 22 4 5 17 3 + 17 27 5 4 16 4 17 1 3 23 5 4 17 3 21 24 5 2 19 1 21 23 7 2 40 25 7 1 + 40 25 6 1 41 25 6 1 41 25 47 26 7 1 41 24 49 23 50 24 7 1 41 25 6 2 + 39 25 1 1 5 3 38 26 6 4 37 27 3 6 36 29 2 6 4 4 28 29 2 6 4 5 27 29 2 + 6 4 6 27 28 2 6 5 1 1 3 27 28 2 6 37 29 1 6 37 28 3 5 37 28 3 5 37 28 + 3 5 37 28 3 6 36 27 4 6 37 26 4 6 36 27 5 5 36 28 4 5 8 1 27 28 2 1 1 + 6 6 3 26 28 1 9 36 27 2 8 36 27 2 8 1 3 32 26 3 8 2 10 1 4 19 37 2 16 + 18 61 12 66 7 69 4 70 3 71 2 31 0 + + + + 6935.0 + + + 0.768421052632 + + + 3301.0 + + + 0.183883671615 + + + 0.791572853007 + + + 0.510973105793 0.524808729785 0.109116183486 0.157751770981 + -0.0603569782655 -0.00120923225502 0.00313565869546 + 0.00454598018346 -0.00493691115434 + + + 73.0 + + + 0.890410958904 0.978947368421 + + + 0.876712328767 1.04109589041 0.712328767123 0.821917808219 + 0.210526315789 0.926315789474 1.47368421053 1.17894736842 + + + 95.0 + + + 6.0 60.0 0.230158730159 7.0 4.0 6.0 + + + 0.0 0.989473684211 + + + 0.475991348234 + + + 0.0 0.145833333333 0.884259259259 0.479166666667 0.212560386473 + 0.155092592593 0.930555555556 0.784722222222 0.623188405797 + 0.993055555556 0.416666666667 0.280092592593 0.425629290618 + 0.769736842105 0.396929824561 0.103070175439 + + + 0.0 0.0 0.12962962963 0.361111111111 0.75 0.814814814815 0.5 + 0.166666666667 0.0 0.0 0.0 0.0925925925926 1.0 0.972222222222 + 0.87962962963 0.37037037037 0.0 0.0 0.0 0.0 0.787037037037 1.0 1.0 + 0.490740740741 0.30303030303 0.537037037037 0.37962962963 + 0.240740740741 0.935185185185 1.0 1.0 0.648148148148 0.222222222222 + 1.0 0.972222222222 1.0 0.712962962963 0.564814814815 0.555555555556 + 0.564814814815 0.20202020202 1.0 1.0 1.0 0.388888888889 0.0 0.0 0.0 + 0.171717171717 1.0 1.0 1.0 0.37037037037 0.0 0.0 0.0 0.154545454545 + 0.366666666667 0.516666666667 0.608333333333 0.616666666667 + 0.558333333333 0.3 0.0916666666667 + + + 0.453144012966 0.122352723339 0.00733461855495 0.0266100061044 + 0.0211927162119 0.296367227742 0.0459312587278 0.0107474869755 + 0.0538388738172 0.00481094365042 0.169506030342 0.279111201421 + 0.108004272698 0.012197309583 + + + + + + + + + 1 4 1 0 + + + + 6.0 + + + 1.5 + + + 4.0 + + + 3.0 + + + 3.0 + + + 0.5 0.5 0.125 0.0625 -0.0625 0.0 0.0 0.0 0.0 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 2.0 + + + 1.0 1.0 0.0 0.0 1.0 1.0 + + + 0.0 0.5 + + + 0.666666666667 + + + 0.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + + + 0.168406867536 0.418642805657 3.73810107933e-17 4.37774349033e-16 + 0.746743688087 0.966447374396 0.756728940001 5.46658079555e-17 + 6.67575791336e-16 7.90705667828e-17 1.25368865617 0.708408651128 + 1.00229410915 1.05738101244 + + + + + + + + + 36 2 39 2 39 2 39 2 39 2 38 3 23 4 9 5 11 30 7 34 4 37 4 37 4 37 4 37 + 4 38 3 38 3 38 3 38 3 38 3 38 3 38 3 39 1 40 1 40 1 40 1 40 2 39 3 38 + 2 39 3 38 3 38 3 38 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 + 4 37 5 36 4 37 4 37 4 38 4 37 5 36 4 37 4 37 4 11 13 3 5 4 5 4 37 4 + 38 3 38 4 37 4 32 0 + + + + 2296.0 + + + 0.732142857143 + + + 1668.0 + + + 0.125299760192 + + + 1.03635291806 + + + 0.510716426859 0.513036843253 0.072399817625 0.0989501335805 + 0.000157006099828 -2.859114792e-05 0.000408440712988 + 4.25666665056e-05 0.00061899495083 + + + 41.0 + + + 0.0975609756098 0.0535714285714 + + + 0.390243902439 0.0 0.0 0.0 0.0714285714286 0.0 0.0 0.142857142857 + + + 56.0 + + + 0.0 6.0 0.178947368421 0.0 3.0 1.0 + + + 0.0 0.982142857143 + + + 0.726480836237 + + + 0.378571428571 0.921428571429 0.721428571429 0.535714285714 0.5 1.0 + 1.0 0.607142857143 0.528571428571 1.0 1.0 0.585714285714 + 0.487012987013 0.87012987013 0.909090909091 0.584415584416 + + + 0.0 0.6 0.8 0.885714285714 0.485714285714 0.4 0.257142857143 + 0.114285714286 0.0 0.914285714286 1.0 1.0 1.0 1.0 1.0 + 0.771428571429 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.285714285714 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.142857142857 0.114285714286 1.0 1.0 1.0 1.0 + 1.0 1.0 0.142857142857 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.2 + 0.0571428571429 1.0 1.0 1.0 1.0 1.0 1.0 0.171428571429 + 0.380952380952 0.52380952381 0.690476190476 0.833333333333 + 0.833333333333 0.833333333333 0.928571428571 0.238095238095 + + + 0.455210212698 0.0387179482401 0.00549838746231 0.0032355677286 + 0.0391194931311 0.0639131858626 0.0652143476493 0.00626363516731 + 0.00546147207714 0.0075025976022 0.194838756722 0.00350239649598 + 0.128984958326 0.0392701229167 + + + + + + + + + 0 2 1 1 3 4 3 4 3 4 4 3 4 4 3 1 1 2 1 1 3 4 3 4 + + + + 63.0 + + + 0.777777777778 + + + 34.0 + + + 1.14705882353 + + + 1.06666666667 + + + 0.43137254902 0.514705882353 0.0884388357419 0.193364543049 + 0.0879299816813 0.0089998718727 0.00894853790126 0.00994031022946 + -0.00221762756617 + + + 7.0 + + + 0.0 0.333333333333 + + + 0.0 0.0 0.0 0.0 0.444444444444 0.0 0.0 0.888888888889 + + + 9.0 + + + 2.0 2.0 0.357142857143 0.0 2.0 1.0 + + + 0.0 0.888888888889 + + + 0.539682539683 + + + 1.0 1.0 0.0 0.0 0.75 1.0 1.0 0.166666666667 0.5 0.5 0.75 1.0 0.0 + 0.0 0.0 0.833333333333 + + + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 + + + 0.283401411415 0.243995756253 0.10401979868 0.0650783593688 + 0.102349088698 0.219785347952 0.150360045877 0.0966438274503 + 0.00930510493325 0.058024143215 0.103313698096 0.0578474341101 + 0.0861892917852 0.115914031612 + + + + + + + + + 4 1 198 1 197 2 197 2 197 2 197 3 195 5 194 4 195 4 194 6 27 3 163 6 + 27 4 162 6 26 5 161 7 28 2 163 4 30 1 165 3 30 1 166 2 30 1 165 3 29 + 2 165 3 29 2 165 3 28 3 165 4 1 4 5 20 165 34 165 34 165 34 165 35 + 164 35 164 34 165 34 165 34 165 34 165 34 95 2 68 34 95 2 68 34 95 3 + 67 34 95 3 67 34 95 3 67 34 95 3 67 34 95 3 67 34 15 2 78 3 67 34 15 + 3 77 4 66 34 15 4 76 4 66 34 15 5 75 4 66 34 16 5 74 4 66 35 16 4 74 + 4 29 1 36 6 1 28 16 4 74 4 28 3 35 34 17 4 74 5 18 1 7 4 35 34 12 1 3 + 6 73 28 3 4 35 34 10 4 3 5 73 35 35 34 9 16 70 35 35 34 9 17 69 35 35 + 34 9 17 69 35 35 34 9 17 69 35 35 35 8 17 3 3 63 35 35 35 7 26 61 35 + 35 35 7 28 59 35 36 34 7 28 59 35 36 34 7 29 58 35 35 35 7 30 57 35 + 36 34 8 6 1 23 56 35 36 33 7 33 55 35 35 35 6 33 55 34 36 35 6 11 1 + 22 54 35 35 24 5 6 6 34 54 35 35 3 30 2 6 34 54 35 35 3 29 3 6 34 54 + 35 35 3 29 3 5 35 54 35 35 3 29 3 5 36 17 1 35 36 33 4 29 3 5 16 1 19 + 16 3 32 38 33 4 28 4 4 17 1 20 14 4 33 37 33 5 27 3 5 38 14 6 31 37 + 33 4 29 2 5 37 15 5 33 36 34 2 29 4 4 35 17 6 32 36 33 4 29 2 5 35 17 + 7 30 38 33 3 36 11 1 24 15 10 29 35 34 5 28 2 5 11 5 20 15 11 28 7 2 + 26 31 1 3 3 30 3 2 14 3 20 15 14 25 6 5 24 30 2 4 2 31 2 3 14 3 18 15 + 15 25 6 5 23 31 2 4 1 32 2 3 15 3 17 15 15 25 7 3 24 31 2 4 1 37 15 4 + 16 15 19 21 34 31 2 4 1 37 30 2 2 16 18 22 34 31 2 4 1 37 30 19 22 19 + 33 32 2 43 9 2 18 2 1 16 23 18 8 1 24 31 3 47 5 3 10 3 7 15 25 17 8 1 + 24 31 3 48 4 3 1 4 3 5 4 1 3 14 24 18 33 15 3 3 2 2 9 51 1 2 3 11 3 4 + 1 14 27 15 34 7 26 51 1 15 9 14 28 15 20 2 44 63 2 2 9 14 30 13 66 63 + 1 2 9 14 31 13 13 14 39 66 7 16 32 12 3 25 38 67 4 1 1 16 33 10 3 27 + 37 66 4 1 2 15 35 9 2 28 37 63 9 16 37 8 1 28 37 64 8 16 36 9 2 27 37 + 37 1 27 5 18 27 3 4 40 37 36 2 27 5 17 28 3 3 40 38 37 1 27 7 17 26 + 46 38 66 6 18 25 10 1 35 38 66 2 2 2 24 19 9 3 34 38 96 19 9 2 35 38 + 96 19 46 38 97 18 46 38 102 12 47 38 100 14 47 38 90 1 9 14 47 38 88 + 3 6 1 2 14 47 35 91 3 6 17 4 2 41 38 89 2 6 15 6 5 38 38 89 2 9 2 3 7 + 6 1 3 1 38 38 100 2 4 6 10 2 37 38 99 3 4 6 6 1 2 2 38 38 93 1 4 5 5 + 3 4 8 38 37 92 13 4 4 1 10 38 37 94 1 3 7 3 16 38 37 95 1 1 26 39 37 + 96 27 39 37 97 26 39 37 98 24 40 38 98 23 40 37 100 22 40 37 103 19 + 40 37 102 19 41 37 103 18 41 37 105 16 41 37 106 6 2 7 42 37 106 4 3 + 6 43 36 107 2 3 8 43 15 4 1 8 9 107 12 42 9 21 8 108 11 42 5 23 10 + 108 11 42 5 23 10 110 9 43 4 24 9 110 9 43 2 26 10 110 8 42 4 25 9 + 112 7 41 6 23 10 114 3 75 7 116 1 75 6 193 6 193 6 194 5 194 5 194 5 + 194 5 195 4 195 4 195 4 194 5 194 4 194 5 195 4 195 3 196 3 196 3 196 + 3 196 2 197 2 196 3 197 2 198 1 5 0 + + + + 30845.0 + + + 1.28387096774 + + + 7331.0 + + + 0.211430909835 + + + 1.66344605475 + + + 0.529680242612 0.482482324659 0.522988317168 0.11384716677 + 0.166235193446 -0.0648474336031 -0.00614108573842 -0.0350458448021 + 0.00266755204601 + + + 199.0 + + + 0.773869346734 2.01935483871 + + + 0.603015075377 1.06532663317 0.86432160804 0.502512562814 + 0.593548387097 3.32903225806 3.25161290323 0.748387096774 + + + 155.0 + + + 16.0 90.0 0.228494623656 25.0 7.0 13.0 + + + 0.0 0.993548387097 + + + 0.237672232128 + + + 0.393662728249 0.56043956044 0.0177917320774 0.0 0.00263157894737 + 0.441025641026 0.235897435897 0.000512820512821 0.0136842105263 + 0.332820512821 0.426666666667 0.101025641026 0.0 0.297435897436 + 0.718974358974 0.246666666667 + + + 0.146929824561 0.90350877193 0.90625 0.254385964912 + 0.00438596491228 0.0 0.0 0.0 0.0505263157895 0.484210526316 0.616 + 0.446315789474 0.0673684210526 0.0 0.0 0.0 0.0 0.0105263157895 0.54 + 0.953684210526 0.410526315789 0.0 0.0 0.0 0.0 0.0 0.006 + 0.282105263158 0.421052631579 0.13 0.00210526315789 0.0 0.0 0.0 0.0 + 0.0842105263158 0.713684210526 0.65 0.414736842105 0.0 0.0 + 0.0547368421053 0.554 0.698947368421 0.351578947368 0.002 0.0 0.0 + 0.0 0.0 0.488 0.688421052632 0.614736842105 0.56 0.303157894737 0.0 + 0.0 0.0 0.0 0.0189473684211 0.757894736842 0.94 0.557894736842 + 0.144 + + + 0.39808475162 0.230487347723 0.0923245651848 0.0462964933824 + 0.0936611428285 0.382254050075 0.159607771925 0.114279936822 + 0.0449030156367 0.0436947009865 0.0811967583243 0.203588605281 + 0.333567514006 0.101364347213 + + + + + + + + + 35 1 71 4 69 10 63 23 5 1 44 32 41 33 40 33 40 33 40 33 40 17 3 13 40 + 18 2 13 40 33 40 33 40 33 40 33 40 33 40 33 40 33 40 34 39 33 40 33 + 40 34 39 33 40 34 39 34 38 36 38 35 38 35 38 35 38 36 37 35 38 35 39 + 34 39 17 2 14 40 17 2 14 40 33 41 32 41 32 41 32 41 32 41 32 41 32 41 + 32 42 2 5 24 55 18 69 3 2015 8 64 13 3 5 51 15 2 10 4 2 40 15 1 17 40 + 15 1 17 37 1 2 14 3 17 35 18 1 18 37 2 4 11 1 18 36 5 1 32 36 37 36 + 37 36 37 35 39 34 41 32 40 33 40 33 40 32 41 32 41 35 38 35 37 36 37 + 36 37 36 37 3 1 32 37 3 1 32 8 1 28 3 1 35 4 2 28 2 3 36 2 4 26 2 4 + 31 1 2 3 3 28 1 21 14 6 4 27 2 21 4 2 7 37 2 22 2 5 4 38 2 71 2 71 2 + 71 2 71 2 49 1 21 2 38 2 6 1 1 2 21 3 3 3 11 1 2 3 47 2 5 1 16 3 5 2 + 3 4 32 2 30 2 1 9 29 3 30 1 1 13 26 2 32 23 16 2 33 30 8 2 33 34 4 2 + 34 35 2 2 34 39 35 38 36 37 36 37 36 37 3 2 31 38 3 5 27 37 6 2 28 37 + 36 37 36 37 36 37 36 37 36 37 37 36 37 36 37 36 37 37 36 37 36 37 36 + 37 36 37 36 37 37 37 36 37 1 7 28 37 1 21 14 37 1 26 9 65 8 66 9 63 + 10 65 8 66 8 64 8 65 1 1 6 68 4 70 3 70 3 71 2 72 1 32 0 + + + + 11534.0 + + + 0.462025316456 + + + 4367.0 + + + 0.150675520953 + + + 0.63746835443 + + + 0.564492532377 0.525208607113 0.0778240298948 0.442048735372 + -0.0943804013164 -0.00847994697137 -0.00121812509248 + 0.0179498183202 -0.130473987946 + + + 73.0 + + + 1.39726027397 0.373417721519 + + + 0.602739726027 1.20547945205 2.6301369863 1.09589041096 + 0.126582278481 0.151898734177 0.962025316456 0.20253164557 + + + 158.0 + + + 8.0 59.0 0.205298013245 3.0 6.0 9.0 + + + 0.0 0.993670886076 + + + 0.378619732963 + + + 0.0 0.0 0.390313390313 0.543055555556 0.0968660968661 + 0.00138888888889 0.428774928775 0.694444444444 0.924501424501 + 0.243055555556 0.846153846154 0.172222222222 0.654520917679 + 0.194736842105 0.883940620783 0.00263157894737 + + + 0.0 0.0 0.0 0.0 0.00584795321637 0.716666666667 0.727777777778 + 0.177777777778 0.0 0.0 0.0 0.0 0.0 0.8 0.983333333333 + 0.283333333333 0.0 0.0 0.0 0.0 0.0 0.694444444444 1.0 + 0.305555555556 0.216374269006 0.172222222222 0.0 0.00555555555556 + 0.356725146199 0.638888888889 1.0 0.472222222222 0.900584795322 1.0 + 0.216666666667 0.283333333333 0.976608187135 0.616666666667 + 0.227777777778 0.461111111111 0.812865497076 0.977777777778 + 0.272222222222 0.2 0.988304093567 0.816666666667 0.0 0.0 + 0.812865497076 1.0 0.3 0.222222222222 1.0 0.883333333333 0.0 0.0 + 0.315789473684 0.53 0.165 0.105 0.8 0.865 0.01 0.0 + + + 0.332706207565 0.24549849002 0.2140208685 0.11646927393 + 0.0717312112399 0.29797903983 0.17438320619 0.275553032708 + 0.130078939131 0.11885460321 0.104739461381 0.0203002464569 + 0.25943070358 0.116127486815 + + + + + + + + + 37 1 1 1 65 3 65 4 64 5 62 7 61 8 59 9 59 9 60 7 61 9 59 10 57 12 57 + 10 4 1 53 2 1 7 2 3 53 1 1 9 1 3 54 15 17 1 20 1 14 16 15 2 20 1 13 + 17 15 3 19 1 14 16 15 4 17 2 13 20 12 6 15 2 13 20 12 10 3 1 7 3 12 + 21 11 10 4 10 12 22 10 10 4 5 1 4 12 23 9 10 4 5 2 3 12 24 8 11 3 5 2 + 3 12 24 8 10 6 2 3 3 12 25 7 10 11 3 12 4 1 1 1 13 1 4 7 9 13 2 12 4 + 1 21 6 9 7 1 4 3 12 4 1 18 2 1 6 9 7 2 3 3 12 4 2 1 2 1 1 12 10 9 4 + 10 13 2 8 12 10 9 3 11 14 1 9 11 9 11 2 11 14 1 5 1 2 7 1 4 9 12 1 11 + 13 3 3 11 1 4 10 23 13 4 1 17 10 23 13 3 2 4 1 7 1 5 8 25 12 4 3 2 2 + 6 1 5 9 24 12 3 4 2 2 6 1 5 9 24 12 3 4 10 1 5 9 24 12 3 4 10 2 4 9 + 24 12 3 8 6 2 3 10 9 4 4 2 5 12 3 8 5 5 1 10 3 2 3 5 4 2 5 12 3 10 3 + 16 3 3 5 2 5 1 5 12 3 10 2 17 3 10 11 13 2 11 1 5 1 11 7 6 4 1 6 13 1 + 12 1 5 1 11 10 3 3 3 4 14 1 12 1 5 2 10 11 3 3 3 3 14 1 17 3 10 24 13 + 1 17 7 7 10 2 11 12 2 16 8 7 8 4 11 13 1 10 14 7 8 4 11 13 1 10 5 1 8 + 7 7 5 5 2 4 13 2 8 15 7 7 5 5 1 5 13 2 8 4 1 10 7 7 7 2 2 5 13 1 10 + 14 7 7 7 2 1 6 13 1 11 13 7 9 4 10 13 1 12 11 8 23 13 1 13 11 7 23 13 + 1 14 10 7 23 13 1 14 10 7 23 13 2 14 9 7 23 13 3 14 8 8 2 11 9 13 3 + 15 6 9 2 16 4 13 4 15 6 8 2 18 2 13 5 28 2 19 1 13 6 27 1 19 3 12 7 + 14 3 27 6 11 9 12 4 25 10 6 12 8 2 1 5 25 9 7 9 2 3 6 5 28 8 7 8 16 1 + 28 8 7 12 12 1 28 8 8 12 11 2 28 8 7 12 2 1 1 2 5 2 29 3 11 11 3 4 36 + 2 13 10 1 6 36 2 13 19 34 2 13 20 34 1 13 21 33 1 13 22 46 23 45 24 + 44 25 43 26 42 26 42 26 42 26 42 26 42 26 42 10 2 8 1 5 42 10 2 6 1 7 + 42 4 3 3 2 14 42 5 2 3 2 15 42 9 2 15 42 6 1 2 2 15 42 26 42 26 42 26 + 42 5 1 11 1 8 43 1 1 1 3 1 2 6 3 7 43 1 1 1 3 1 2 6 3 7 43 1 5 1 3 2 + 1 1 5 6 56 1 5 6 62 6 62 7 61 4 1 1 62 3 65 4 1 1 62 6 62 6 54 4 3 7 + 53 15 54 14 55 2 3 8 55 13 56 13 57 11 58 10 59 9 61 8 61 6 63 5 64 4 + 65 3 66 2 180 2 66 4 62 6 62 5 65 3 64 5 63 4 65 3 65 4 65 1 66 2 23 + 0 + + + + 9452.0 + + + 0.489208633094 + + + 2745.0 + + + 0.39927140255 + + + 1.09661779081 + + + 0.563401571378 0.416601990444 0.13689158967 0.343024479856 + 0.0938203687021 -0.0253619789727 0.0501904144402 -0.00332343039641 + 0.0798832987569 + + + 68.0 + + + 2.45588235294 1.68345323741 + + + 1.70588235294 1.11764705882 3.64705882353 3.35294117647 + 1.81294964029 3.30935251799 1.41007194245 0.115107913669 + + + 139.0 + + + 28.0 104.0 0.229276895944 22.0 0.0 5.0 + + + 0.0 0.992805755396 + + + 0.290414727042 + + + 0.294117647059 0.648739495798 0.0 0.0 0.121107266436 0.391596638655 + 0.104201680672 0.0 0.631487889273 0.275630252101 0.589915966387 + 0.0655462184874 0.217993079585 0.401680672269 0.618487394958 + 0.289075630252 + + + 0.00735294117647 0.860294117647 0.8125 0.551470588235 0.0 0.0 0.0 + 0.0 0.0 0.339869281046 0.777777777778 0.444444444444 0.0 0.0 0.0 + 0.0 0.00735294117647 0.507352941176 0.881944444444 0.757352941176 + 0.176470588235 0.0 0.0 0.0 0.0 0.0 0.0 0.0196078431373 + 0.248366013072 0.0 0.0 0.0 0.669117647059 0.602941176471 + 0.305555555556 0.286764705882 0.463235294118 0.270833333333 0.0 + 0.0138888888889 0.37908496732 0.875816993464 0.364197530864 + 0.143790849673 0.882352941176 0.703703703704 0.0 0.228395061728 + 0.0220588235294 0.830882352941 0.597222222222 0.580882352941 + 0.639705882353 0.861111111111 0.286764705882 0.0 0.0 + 0.0653594771242 0.104938271605 0.372549019608 0.267973856209 + 0.716049382716 0.738562091503 0.123456790123 + + + 0.576690049174 0.109845358417 0.0814981617426 0.0666789218639 + 0.322590047043 0.240546096255 0.0429974482419 0.100931287296 + 0.159695594742 0.0493223594573 0.0809903873596 0.234138703488 + 0.0698037142917 0.0236609350702 + + + + + + + + + 8 2 41 2 41 3 40 8 36 26 16 33 10 33 10 34 9 34 9 33 10 33 10 33 10 + 33 10 33 10 33 10 33 10 33 10 33 10 33 10 33 10 34 7 36 7 37 7 36 7 + 35 8 35 8 35 9 33 11 32 11 32 11 32 11 32 11 32 11 32 11 32 11 32 11 + 32 11 32 11 32 11 32 11 32 11 32 11 32 11 32 11 32 12 31 12 4 3 24 12 + 2 14 15 12 2 21 8 13 1 21 8 37 6 37 6 37 6 37 6 38 5 38 6 37 5 38 5 + 38 5 38 5 38 5 38 5 38 5 39 5 38 4 39 4 39 4 39 4 39 4 4 3 32 3 5 4 + 31 3 5 9 26 3 5 26 8 5 4 39 4 39 4 39 4 39 4 39 4 38 5 37 5 40 4 39 4 + 40 3 40 2 41 1 41 5 38 5 37 6 37 6 37 6 37 6 37 6 37 6 37 6 33 10 36 + 7 37 6 37 6 37 7 36 7 36 7 36 7 36 7 36 7 36 7 36 8 36 7 36 7 36 7 36 + 6 37 7 36 7 36 7 36 7 36 7 4 12 20 7 3 22 11 7 3 27 6 7 3 28 4 8 3 30 + 3 7 3 30 3 8 2 30 3 8 2 30 3 8 2 30 3 8 3 30 2 8 2 31 2 8 1 36 0 + + + + 5461.0 + + + 0.338582677165 + + + 3265.0 + + + 0.144563552833 + + + 0.953405017921 + + + 0.551505870342 0.492695495758 0.0354435285922 0.399824140256 + -0.011475972046 -0.000664745395306 -0.00112347220928 + 0.00283013987958 -0.0242155772536 + + + 43.0 + + + 1.11627906977 0.149606299213 + + + 0.744186046512 0.93023255814 0.93023255814 1.67441860465 0.0 + 0.125984251969 0.125984251969 0.346456692913 + + + 127.0 + + + 3.0 15.0 0.184210526316 3.0 4.0 1.0 + + + 0.0 0.992125984252 + + + 0.597875846914 + + + 0.212903225806 0.04375 0.60625 0.459375 0.891495601173 + 0.505681818182 0.721590909091 0.625 0.870967741935 0.517045454545 + 0.707386363636 0.661931818182 0.727272727273 0.678977272727 + 0.639204545455 0.610795454545 + + + 0.0 0.0 0.0 0.0 0.375 0.5375 0.2 0.0 0.386666666667 0.4625 0.175 + 0.0 0.5125 1.0 1.0 0.6375 0.811111111111 1.0 0.979166666667 + 0.0520833333333 0.447916666667 1.0 1.0 0.25 0.733333333333 1.0 + 0.9875 0.0 0.4375 1.0 1.0 0.25 0.733333333333 1.0 1.0 0.0 0.4375 + 1.0 1.0 0.3125 0.733333333333 1.0 1.0 0.0625 0.395833333333 1.0 1.0 + 0.333333333333 0.706666666667 1.0 1.0 0.375 0.3875 0.9875 1.0 + 0.4125 0.466666666667 0.760416666667 0.666666666667 0.677083333333 + 0.635416666667 0.5625 0.541666666667 0.520833333333 + + + 0.347514809035 0.254749951596 0.0511981133553 0.0260981654198 + 0.0487084267982 0.451039933422 0.140482458932 0.0941112799528 + 0.027909209567 0.0298735812626 0.106665782023 0.241300937 + 0.294302569382 0.0546811985086 + + + + + + + + + 5 1 79 3 79 2 79 2 79 2 78 3 76 6 9 4 2 15 44 7 6 7 3 15 43 20 3 18 + 40 20 2 20 39 20 2 19 40 20 2 19 40 20 1 20 40 41 40 40 41 20 1 20 40 + 3 1 16 1 20 41 1 2 4 1 1 1 30 40 41 40 41 40 41 40 41 40 41 40 41 40 + 41 40 41 40 41 40 37 1 3 40 36 45 40 41 41 40 41 40 41 40 41 39 43 39 + 42 39 41 40 41 39 42 40 41 40 40 41 40 41 40 41 19 1 20 42 39 42 39 + 42 39 42 39 42 39 42 17 2 21 6 1 34 17 3 5 1 2 6 25 4 3 16 3 31 37 3 + 2 6 2 31 43 5 1 33 42 39 42 39 42 39 42 39 21 1 20 39 20 2 20 39 20 1 + 20 40 20 1 21 39 42 39 42 39 42 39 42 39 42 38 42 39 43 38 43 39 42 + 39 20 1 20 46 14 1 20 49 11 1 12 57 10 2 12 47 21 1 21 38 4 1 1 3 12 + 2 20 38 4 1 16 1 21 38 21 1 21 38 43 38 21 1 21 38 21 1 21 38 21 1 21 + 38 20 3 20 38 21 1 20 39 21 2 19 39 21 1 20 39 21 1 21 38 21 2 20 39 + 20 2 20 39 19 2 21 39 18 4 20 39 18 4 20 39 17 6 19 39 17 6 19 39 18 + 5 2 4 13 38 3 31 9 37 5 31 9 38 3 33 7 38 3 32 8 38 1 37 5 38 1 37 5 + + + + 8181.0 + + + 0.80198019802 + + + 3616.0 + + + 0.150995575221 + + + 1.54805194805 + + + 0.497908600664 0.506581858407 0.139043087772 0.185208341315 + 0.117202734836 0.00132652250023 0.000477917272947 0.00115095317595 + 0.00125611181656 + + + 81.0 + + + 0.740740740741 0.643564356436 + + + 0.345679012346 0.592592592593 1.38271604938 0.641975308642 + 0.594059405941 0.158415841584 0.673267326733 1.10891089109 + + + 101.0 + + + 11.0 53.0 0.177966101695 3.0 1.0 2.0 + + + 0.0 0.990099009901 + + + 0.441999755531 + + + 0.704 0.94 0.046 0.0 0.72 0.988 0.118 0.126923076923 0.068 0.082 + 0.942 0.682692307692 0.0 0.0 0.872380952381 0.79304029304 + + + 0.516666666667 0.861538461538 0.908333333333 0.861538461538 + 0.107692307692 0.0 0.0 0.0 0.408333333333 0.992307692308 1.0 + 0.992307692308 0.0692307692308 0.0 0.0 0.0 0.383333333333 + 0.976923076923 1.0 0.984615384615 0.0538461538462 0.0 0.0 0.0 0.475 + 1.0 0.966666666667 1.0 0.230769230769 0.183333333333 0.3 + 0.207692307692 0.075 0.192307692308 0.191666666667 0.138461538462 + 1.0 0.85 0.961538461538 0.561538461538 0.0 0.0 0.0 0.0 + 0.961538461538 0.95 0.869230769231 0.338461538462 0.0 0.0 0.0 0.0 + 0.953846153846 1.0 1.0 0.484615384615 0.0 0.0 0.0 0.0 + 0.804195804196 0.75 0.888111888112 0.79020979021 + + + 0.412647284484 0.199776662023 0.00941603655688 0.00229467084447 + 0.00534013496802 0.396054243523 0.0843266388653 0.0104706909009 + 0.0216062634784 0.00940893641242 0.14063285078 0.291820856357 + 0.11388852166 0.0602867249166 + + + + + + + + + 1 1 40 1 41 2 39 2 39 6 35 17 17 2 4 27 5 5 4 37 4 37 4 38 3 38 4 36 + 5 37 4 37 3 38 3 37 4 37 4 37 4 38 3 38 3 38 3 38 3 38 3 38 2 39 3 39 + 2 40 1 39 1 40 1 40 2 39 2 39 3 37 4 37 4 37 4 37 4 37 4 37 4 38 3 38 + 3 38 3 38 3 38 3 38 3 38 3 38 3 38 4 15 1 21 4 3 11 23 27 14 39 2 39 + 2 1 0 + + + + 2132.0 + + + 0.788461538462 + + + 1659.0 + + + 0.125376732972 + + + 1.07331378299 + + + 0.496036769138 0.524955973951 0.0738105254556 0.096505890391 + 0.00947368182195 4.92759948184e-05 4.85023047684e-05 + 0.000110976907801 -0.000272167738217 + + + 41.0 + + + 0.170731707317 0.0769230769231 + + + 0.292682926829 0.0975609756098 0.0 0.292682926829 0.153846153846 + 0.0 0.0 0.153846153846 + + + 52.0 + + + 3.0 7.0 0.130769230769 0.0 4.0 11.0 + + + 0.0 0.980769230769 + + + 0.778142589118 + + + 0.623076923077 0.9 0.861538461538 0.569230769231 0.607692307692 1.0 + 1.0 0.707692307692 0.523076923077 1.0 1.0 0.8 0.405594405594 + 0.804195804196 0.874125874126 0.797202797203 + + + 0.4 0.742857142857 0.766666666667 0.828571428571 0.866666666667 0.6 + 0.6 0.285714285714 0.266666666667 1.0 1.0 1.0 1.0 1.0 1.0 + 0.457142857143 0.166666666667 1.0 1.0 1.0 1.0 1.0 1.0 + 0.428571428571 0.133333333333 1.0 1.0 1.0 1.0 1.0 1.0 + 0.485714285714 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.571428571429 0.0 + 0.942857142857 1.0 1.0 1.0 1.0 1.0 0.685714285714 0.0 + 0.914285714286 1.0 1.0 1.0 1.0 1.0 0.714285714286 0.0555555555556 + 0.571428571429 0.583333333333 0.690476190476 0.861111111111 + 0.690476190476 0.833333333333 0.690476190476 + + + 0.461352215236 0.0428395531353 0.00134603089022 0.00145816276318 + 0.0394805844633 0.0602988866244 0.0648721197784 0.0035606061499 + 0.00488549503564 0.0028095001833 0.196992013171 0.0221101318973 + 0.132726451794 0.0321686211454 + + + + + + + + + 3 1 75 2 229 2 74 4 72 5 111 1 68 2 3 4 41 2 18 16 41 2 2 32 40 37 40 + 37 40 37 40 37 40 37 40 37 40 37 40 37 40 36 41 36 41 36 41 37 40 37 + 41 36 40 37 40 37 40 37 41 35 41 36 42 35 42 36 41 2 6 28 41 36 40 37 + 41 36 41 36 40 37 40 37 40 37 40 37 41 7 1 28 41 36 41 36 41 36 41 36 + 41 36 41 36 41 36 41 36 41 36 41 8 1 7 62 1 76 1 76 1 76 1 76 1 75 2 + 76 1 339 3 74 3 75 3 74 2 74 4 74 2 383 1 76 2 75 2 6 10 3 8 1 6 41 + 36 41 36 41 36 40 37 40 37 40 37 40 38 39 38 39 38 39 38 39 38 39 38 + 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 47 22 2 1 52 30 40 2 + 3 32 40 1 4 32 39 38 38 39 40 37 41 36 39 38 38 39 38 39 38 39 38 39 + 38 39 38 39 38 39 39 38 38 39 38 39 38 40 37 40 37 12 6 5 1 2 5 9 37 + 8 30 2 37 7 32 1 37 7 70 7 70 7 32 1 36 9 31 1 37 7 31 2 37 6 32 2 37 + 7 31 3 35 8 31 3 36 1 3 3 32 2 + + + + 9856.0 + + + 0.6015625 + + + 3241.0 + + + 0.167849429189 + + + 1.73767798467 + + + 0.509382256938 0.50851904851 0.125688781143 0.396001563627 + 0.171697284591 -3.27602162081e-05 -0.0106589783345 + -0.00351435754786 -0.00845680971911 + + + 77.0 + + + 0.701298701299 0.1953125 + + + 0.831168831169 0.519480519481 0.987012987013 0.467532467532 0.09375 + 0.09375 0.125 0.46875 + + + 128.0 + + + 3.0 18.0 0.22131147541 10.0 8.0 0.0 + + + 0.0 0.9921875 + + + 0.328835227273 + + + 0.59375 0.501644736842 0.0 0.0 0.717105263158 0.598684210526 + 0.0296052631579 0.0855263157895 0.0707236842105 0.0690789473684 + 0.685855263158 0.710526315789 0.0 0.0 0.5921875 0.6125 + + + 0.340277777778 0.638888888889 0.569444444444 0.194444444444 0.0 0.0 + 0.0 0.0 0.375 1.0 0.975 0.24375 0.0 0.0 0.0 0.0 0.402777777778 1.0 + 1.0 0.194444444444 0.0 0.0 0.0 0.0 0.4625 1.0 1.0 0.2 0.01875 + 0.09375 0.11875 0.20625 0.10625 0.1625 0.2 0.0625 0.41875 0.95625 + 0.90625 0.65 0.0 0.0 0.0 0.0 0.368055555556 1.0 1.0 0.270833333333 + 0.0 0.0 0.0 0.0 0.3625 1.0 1.0 0.275 0.0 0.0 0.0 0.0 0.25625 0.75 + 0.8 0.375 + + + 0.373692755939 0.243452573495 0.0273169024583 0.0181607816174 + 0.130993437353 0.536924267514 0.107804638225 0.0640920144855 + 0.0268887778989 0.0211432838842 0.291868926294 0.417048516431 + 0.274408981101 0.0425744333878 + + + + + + + + + 4 1 26 2 1 2 25 6 25 5 26 5 23 10 20 14 16 13 16 13 17 11 19 11 19 13 + 18 15 15 13 1 2 14 16 13 11 19 11 1 2 5 1 10 22 9 22 7 24 6 26 4 27 3 + 28 2 29 1 180 1 29 1 58 1 29 2 28 1 29 1 30 1 28 2 28 2 24 2 1 3 24 2 + 2 2 9 3 6 2 5 1 2 3 2 3 1 6 5 2 5 1 2 2 7 6 4 3 5 1 1 3 9 3 13 1 1 3 + 25 5 29 1 29 1 29 1 35 1 23 1 37 4 28 2 18 1 5 1 1 6 4 2 10 1 5 10 14 + 1 5 9 15 1 5 10 13 2 5 9 15 1 5 9 15 1 5 10 1 5 7 2 6 18 4 1 7 10 3 3 + 6 1 7 3 1 8 9 2 11 10 8 1 11 14 3 2 9 1 1 19 9 22 8 23 7 8 2 12 11 2 + 1 1 3 12 20 10 21 10 17 1 1 1 1 8 24 6 25 5 27 3 29 1 29 1 29 1 29 1 + 29 1 59 1 29 1 11 1 16 2 28 2 28 2 21 1 6 2 27 3 28 2 29 1 29 2 28 2 + 28 3 27 6 6 3 3 3 8 23 3 2 1 25 1 60 1 29 4 19 1 5 6 3 2 2 5 4 4 1 9 + 3 11 1 5 1 9 3 7 1 2 2 16 3 27 2 28 2 28 2 28 2 6 4 17 3 6 4 17 3 7 4 + 16 3 6 7 14 4 4 9 14 2 7 7 14 2 7 7 14 3 5 10 12 2 6 11 10 2 7 8 1 1 + 9 3 8 7 6 4 5 2 5 1 1 23 6 25 5 25 4 27 2 28 3 119 3 24 6 24 6 24 6 + 25 5 25 5 26 4 26 3 22 0 + + + + 4140.0 + + + 0.217391304348 + + + 2604.0 + + + 0.262288786482 + + + 1.0806594741 + + + 0.474720589014 0.460807068295 0.0278172282699 0.438410304417 + 0.0132273541993 0.000579132640809 -0.0101372143531 + 0.000512781940875 0.0385882925678 + + + 30.0 + + + 4.9 0.514492753623 + + + 4.4 5.33333333333 4.53333333333 3.6 0.115942028986 1.01449275362 + 0.31884057971 0.608695652174 + + + 138.0 + + + 18.0 98.0 0.2 9.0 7.0 2.0 + + + 0.0 0.992753623188 + + + 0.628985507246 + + + 0.899159663866 0.85306122449 0.663865546218 0.54693877551 + 0.768382352941 0.55 0.779411764706 0.310714285714 0.525210084034 + 0.730612244898 0.764705882353 0.45306122449 0.378676470588 + 0.767857142857 0.665441176471 0.467857142857 + + + 0.686274509804 0.941176470588 0.705882352941 0.814814814815 + 0.647058823529 0.313725490196 0.294117647059 0.0925925925926 + 0.926470588235 1.0 0.941176470588 0.902777777778 1.0 0.602941176471 + 0.970588235294 0.666666666667 0.720588235294 1.0 0.882352941176 + 0.347222222222 0.970588235294 0.647058823529 0.573529411765 + 0.263888888889 0.352941176471 1.0 0.852941176471 0.152777777778 + 0.897058823529 0.602941176471 0.426470588235 0.0 0.0980392156863 + 1.0 1.0 0.5 0.941176470588 0.666666666667 0.78431372549 + 0.0555555555556 0.0147058823529 1.0 0.897058823529 0.555555555556 + 0.867647058824 0.602941176471 0.955882352941 0.0416666666667 0.0 + 0.867647058824 0.970588235294 0.736111111111 0.705882352941 + 0.779411764706 1.0 0.0138888888889 0.0 0.647058823529 + 0.661764705882 0.708333333333 0.544117647059 0.632352941176 + 0.852941176471 0.0555555555556 + + + 0.544164520811 0.181249518214 0.0481741366617 0.0192695116132 + 0.325656345576 0.416719702084 0.0991247175708 0.0447197212554 + 0.0220936975644 0.0313614878242 0.152460276872 0.41712665397 + 0.25767972678 0.0532101211752 + + + + + + + + + 52 2 72 1 134 2 29 4 34 21 1 2 4 3 2 6 36 38 36 38 36 38 36 38 36 38 + 36 39 35 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 + 38 36 38 36 38 36 38 36 33 41 37 37 38 36 38 36 38 36 38 36 35 1 2 37 + 37 37 37 37 37 36 38 36 7 3 28 36 38 36 38 36 38 4 1 31 38 4 3 29 38 + 4 8 24 38 4 26 5 39 4 69 4 70 5 36 4 1 10 5 3 2 4 4 5 35 32 1 5 36 38 + 36 38 17 1 18 38 36 38 36 38 36 38 36 38 36 38 37 35 40 31 2 1 40 32 + 1 1 39 33 1 2 38 33 1 1 39 33 1 3 37 32 1 4 36 34 1 3 36 39 35 38 36 + 38 36 38 36 38 36 39 35 39 35 39 35 39 36 38 36 38 36 38 36 38 36 38 + 36 38 36 38 36 38 37 37 37 38 36 38 3 4 28 39 2 16 4 1 12 39 1 27 7 + 39 1 30 4 39 1 30 4 39 1 30 4 39 1 31 4 70 4 71 3 71 3 72 1 73 1 35 0 + + + + + 7104.0 + + + 0.770833333333 + + + 3181.0 + + + 0.140207481924 + + + 0.687974683544 + + + 0.50739622674 0.466718509572 0.125048306762 0.17322852412 + -0.100300813392 0.000288888440614 0.00151042270548 + -0.000856160233285 0.00240329747369 + + + 74.0 + + + 0.364864864865 0.322916666667 + + + 0.162162162162 0.162162162162 0.540540540541 0.540540540541 + 0.166666666667 0.458333333333 0.333333333333 0.333333333333 + + + 96.0 + + + 6.0 23.0 0.20814479638 3.0 3.0 1.0 + + + 0.0 0.989583333333 + + + 0.447775900901 + + + 0.0 0.203703703704 0.902777777778 0.453703703704 0.0899122807018 + 0.274122807018 0.997807017544 0.600877192982 0.844907407407 + 0.921296296296 0.0763888888889 0.12037037037 0.785087719298 + 0.872807017544 0.0175438596491 0.0 + + + 0.0 0.0 0.0 0.37962962963 0.833333333333 0.777777777778 + 0.657407407407 0.0925925925926 0.0 0.0 0.0 0.435185185185 1.0 1.0 + 1.0 0.0648148148148 0.0 0.0 0.0 0.416666666667 0.990740740741 1.0 + 1.0 0.12037037037 0.141666666667 0.2 0.175 0.491666666667 1.0 1.0 + 1.0 0.275 0.685185185185 1.0 1.0 0.842592592593 0.166666666667 + 0.138888888889 0.240740740741 0.240740740741 0.694444444444 1.0 1.0 + 0.842592592593 0.0 0.0 0.0 0.0 0.62037037037 1.0 1.0 0.888888888889 + 0.0 0.0 0.0 0.0 0.625 0.9 0.841666666667 0.775 0.0333333333333 + 0.0333333333333 0.0 0.0 + + + 0.395719548921 0.193391898726 0.0088157904673 0.00809353836985 + 0.0321540476305 0.382703654371 0.0672028856396 0.0180112653696 + 0.00491459189675 0.012446750711 0.120339278505 0.253618514168 + 0.102499982053 0.040536029512 + + + + + + + + + 0 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 3 1 3 2 2 2 2 2 + + + + 48.0 + + + 0.333333333333 + + + 24.0 + + + 1.5 + + + 1.07142857143 + + + 0.458333333333 0.484848484848 0.0375434027778 0.488425925926 + 0.107638888889 0.000498349963945 0.0152974981525 0.00360288566526 + 0.0431558763839 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 12.0 + + + 0.0 2.0 0.333333333333 0.0 2.0 1.0 + + + 0.0 0.916666666667 + + + 0.5 + + + 1.0 0.666666666667 0.0 0.0 1.0 1.0 0.666666666667 0.0 0.0 + 0.666666666667 1.0 1.0 0.0 0.0 0.0 1.0 + + + 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 + + + 0.274859394844 0.323013061835 0.105014253571 0.0395336304247 + 0.345068931838 0.218013745701 0.324055547277 0.0278199637221 + 0.0959060603375 0.0672872552196 0.274853645094 0.245268609076 + 0.201167492597 0.309759657279 + + + + + + + + + 1 2 4 2 3 4 2 4 2 4 2 4 2 16 3 2 4 1 6 1 5 1 3 0 + + + + 78.0 + + + 0.461538461538 + + + 41.0 + + + 1.0487804878 + + + 0.8671875 + + + 0.360975609756 0.44512195122 0.0419030484178 0.202986027481 + 0.0105483089334 0.0047880757387 -0.00535108942328 0.00198207124474 + 0.00936723896854 + + + 6.0 + + + 0.166666666667 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 13.0 + + + 1.0 3.0 0.176470588235 0.0 5.0 2.0 + + + 0.0 0.923076923077 + + + 0.525641025641 + + + 0.333333333333 1.0 1.0 0.0 1.0 1.0 1.0 0.625 0.333333333333 1.0 1.0 + 0.0 0.0 0.0 0.666666666667 0.0 + + + 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 0.0 0.5 + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 + 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 + + + 0.531304700729 0.140515686618 0.0374154256554 0.0231806351738 + 0.372280909047 0.195258047819 0.11035062741 0.0889387221287 + 0.149546138463 0.0413846345856 0.0634586687459 0.188695767041 + 0.113446878471 0.103009211324 + + + + + + + + + 1 1 32 1 32 1 33 1 31 2 31 2 30 3 30 3 30 3 30 3 30 3 30 3 30 3 30 4 + 1 5 23 3 1 3 1 2 24 3 1 5 5 1 18 15 18 14 19 11 1 1 20 11 22 12 21 11 + 4 1 17 10 5 1 17 10 4 1 4 1 13 20 1 1 11 23 10 23 10 20 1 2 10 25 8 + 27 6 28 5 28 5 28 5 29 3 31 2 32 2 31 2 31 2 30 3 30 4 5 1 13 1 10 3 + 4 4 10 3 9 3 3 9 2 19 7 4 5 5 5 7 18 1 10 4 29 4 30 3 14 1 15 3 29 4 + 29 4 14 1 14 4 4 1 6 1 1 2 3 2 5 2 2 4 4 3 3 2 1 2 3 3 4 2 2 4 5 7 1 + 2 3 3 4 3 1 4 6 9 3 3 5 7 8 8 2 3 4 8 8 8 1 4 4 8 8 8 1 4 4 1 2 5 8 8 + 1 4 9 3 9 3 1 2 15 3 9 3 17 5 29 4 28 5 14 5 9 5 8 1 7 3 9 4 8 3 18 4 + 9 3 17 5 8 4 16 4 8 6 15 5 6 8 14 5 6 9 13 4 7 10 12 4 7 11 10 6 6 12 + 9 6 3 16 8 6 3 17 7 6 3 18 6 5 4 19 5 6 3 2 1 15 5 7 3 2 1 18 2 6 4 2 + 2 25 4 1 3 26 8 25 8 25 4 11 1 17 3 9 1 2 1 17 4 1 6 1 6 15 4 1 14 14 + 20 13 22 11 22 12 23 10 24 9 25 7 27 7 27 6 28 5 28 5 28 5 28 5 10 1 + 17 5 28 5 28 5 28 5 25 8 26 7 28 5 28 5 28 5 18 2 8 5 18 2 8 5 10 1 7 + 2 8 5 3 1 14 2 8 5 3 2 4 3 6 2 8 5 7 8 2 4 7 5 7 8 2 4 8 4 7 8 2 4 7 + 5 7 8 2 4 7 5 4 11 2 4 7 5 3 12 2 4 7 5 5 10 3 3 7 5 6 8 3 3 8 6 5 7 + 15 6 6 7 15 5 4 1 22 5 5 2 10 2 9 6 4 1 1 3 18 6 6 4 17 5 8 4 16 5 6 + 1 1 5 15 5 5 10 13 5 5 12 11 5 5 13 10 5 5 14 9 5 5 15 8 5 6 17 4 6 6 + 27 7 26 7 25 8 25 8 26 7 26 5 2 1 25 4 3 1 26 3 2 2 27 3 1 2 27 3 1 1 + 28 6 27 6 21 0 + + + + 4917.0 + + + 0.221476510067 + + + 2607.0 + + + 0.308016877637 + + + 1.15853926817 + + + 0.479070771001 0.508568407303 0.0304353997385 0.515484127245 + 0.0224723447486 0.000644209898011 -0.0145289183853 + -0.00012082216814 0.021382007753 + + + 33.0 + + + 4.48484848485 0.845637583893 + + + 3.0303030303 6.42424242424 4.84848484848 3.51515151515 + 0.322147651007 1.34228187919 0.510067114094 1.20805369128 + + + 149.0 + + + 22.0 97.0 0.252118644068 8.0 9.0 2.0 + + + 0.0 0.993288590604 + + + 0.530201342282 + + + 0.665540540541 0.699324324324 0.503378378378 0.450657894737 + 0.510135135135 0.608108108108 0.712837837838 0.358552631579 + 0.351351351351 0.722972972973 0.658783783784 0.345394736842 + 0.15015015015 0.705705705706 0.516516516517 0.558479532164 + + + 0.625 0.776315789474 0.541666666667 0.394736842105 0.263157894737 + 0.0138888888889 0.0 0.0263157894737 0.236111111111 1.0 + 0.861111111111 1.0 0.736842105263 1.0 0.894736842105 0.881578947368 + 0.194444444444 0.973684210526 0.75 0.578947368421 0.526315789474 + 1.0 0.631578947368 0.552631578947 0.111111111111 0.723684210526 + 0.791666666667 0.328947368421 0.368421052632 0.986111111111 0.25 + 0.0 0.0 0.710526315789 0.833333333333 0.605263157895 0.394736842105 + 1.0 0.644736842105 0.0131578947368 0.0 0.657894736842 + 0.680555555556 0.776315789474 0.328947368421 0.944444444444 + 0.592105263158 0.131578947368 0.0 0.447368421053 0.902777777778 + 0.960526315789 0.381578947368 1.0 0.907894736842 0.276315789474 0.0 + 0.168421052632 0.511111111111 0.536842105263 0.105263157895 + 0.677777777778 0.821052631579 0.242105263158 + + + 0.501048325615 0.202500226705 0.0278592970313 0.0180243771394 + 0.239389002917 0.442641057454 0.11485338189 0.0279080990101 + 0.0145328201552 0.035755248036 0.0854671113061 0.409069325146 + 0.285620505428 0.0607354857812 + + + + + + + + + 33 1 5 1 181 4 1 9 6 1 13 1 154 27 5 2 155 35 154 35 154 35 155 34 + 155 34 154 36 153 36 154 35 154 34 155 34 155 34 155 34 155 34 155 34 + 155 34 155 35 154 35 154 34 155 35 154 35 152 37 152 38 152 36 154 35 + 154 36 30 5 118 36 28 7 117 37 27 9 116 37 27 9 117 35 28 10 117 7 1 + 26 29 10 116 34 29 11 115 34 27 14 114 34 27 14 114 34 26 18 111 34 + 25 21 109 34 25 22 108 34 25 23 107 34 25 24 107 33 24 28 104 2 4 27 + 24 29 122 14 24 31 128 6 24 32 128 5 23 34 127 5 23 36 125 5 23 35 + 126 5 23 35 126 5 23 36 125 6 22 36 125 6 22 35 127 4 22 36 127 4 22 + 36 127 4 23 28 4 1 129 5 22 28 2 1 1 3 127 5 23 35 126 5 27 31 126 5 + 28 30 127 4 29 28 128 4 30 27 128 4 32 25 128 4 32 25 128 4 32 25 128 + 4 30 21 2 3 94 2 33 4 21 5 2 23 3 2 94 3 14 1 17 4 20 32 2 2 94 20 15 + 4 20 36 94 26 6 7 20 36 94 39 23 2 1 29 95 39 24 31 96 38 25 30 95 39 + 27 28 95 39 28 26 97 38 29 25 97 38 30 1 2 1 1 19 97 5 1 32 36 18 97 + 5 2 31 34 19 98 6 1 30 36 18 98 37 40 14 98 38 44 9 98 38 44 9 98 38 + 41 11 36 1 62 38 41 12 33 5 61 37 42 11 31 11 56 40 41 10 32 12 54 40 + 42 8 33 10 56 39 43 8 33 11 55 39 45 6 33 11 55 39 46 6 31 13 55 39 + 46 3 32 14 55 38 83 13 56 37 83 14 55 37 82 16 54 37 82 15 1 3 51 37 + 82 15 1 3 51 37 82 23 47 7 2 28 81 27 44 7 3 28 80 28 43 7 3 28 80 28 + 11 1 11 12 1 3 4 38 79 31 9 31 1 38 79 31 8 23 2 46 79 32 7 22 3 46 + 79 33 7 70 79 34 6 70 78 36 5 70 78 18 2 17 4 70 78 38 3 70 79 6 1 31 + 2 5 1 31 9 24 87 31 1 5 1 30 22 1 4 7 85 26 1 3 1 1 2 36 30 5 83 25 4 + 1 5 36 30 5 83 24 11 36 31 4 83 23 12 36 31 4 85 22 11 37 31 3 85 22 + 2 3 6 37 31 3 87 19 3 3 6 37 32 2 88 18 3 3 6 37 32 2 88 19 2 4 6 36 + 33 1 87 20 2 4 6 36 33 1 88 15 6 3 7 36 33 1 88 2 7 7 5 4 6 36 111 3 + 3 7 8 10 2 3 6 4 1 31 111 14 6 16 6 36 113 13 5 16 6 36 114 32 7 36 + 114 32 7 36 115 31 7 37 117 28 7 37 118 26 8 37 119 25 8 37 124 20 8 + 37 126 2 1 14 10 36 129 14 10 37 128 14 10 37 129 3 3 6 11 36 130 1 5 + 6 11 37 134 7 11 37 126 15 11 37 127 13 13 36 127 14 12 36 128 14 11 + 4 23 9 129 12 12 2 25 9 130 11 10 6 24 9 130 10 11 5 26 7 130 10 12 2 + 28 8 132 5 15 1 28 7 134 3 44 9 135 1 49 3 187 2 187 2 188 1 188 1 + 148 0 + + + + 29106.0 + + + 1.22727272727 + + + 7515.0 + + + 0.169793745842 + + + 1.11690728059 + + + 0.404963123399 0.527050474215 0.361571271877 0.203136368766 + 0.0245613767355 0.146683941672 -0.0235250593334 0.101562792393 + -0.0283678759522 + + + 189.0 + + + 0.846560846561 1.37012987013 + + + 0.994708994709 0.656084656085 0.571428571429 1.16402116402 + 0.441558441558 1.4025974026 1.92207792208 1.66233766234 + + + 154.0 + + + 10.0 88.0 0.264788732394 12.0 0.0 6.0 + + + 0.0 0.993506493506 + + + 0.258194186766 + + + 0.293952967525 0.124931805783 0.530235162374 0.58483360611 + 0.416573348264 0.270594653573 0.442329227324 0.00709219858156 + 0.0711086226204 0.597381342062 0.0806270996641 0.0 0.0 0.0 + 0.40350877193 0.31891025641 + + + 0.0 0.0 0.0 0.0 0.0 0.727688787185 0.9176201373 0.386956521739 + 0.56798245614 0.583333333333 0.129385964912 0.354166666667 + 0.635964912281 0.743421052632 0.638157894737 0.420833333333 + 0.778032036613 0.922196796339 0.421052631579 0.526086956522 + 0.977116704805 0.775743707094 0.0045766590389 0.0 0.0 + 0.00219298245614 0.105263157895 0.0458333333333 0.00657894736842 + 0.0460526315789 0.0241228070175 0.0 0.0 0.27850877193 + 0.986842105263 0.852083333333 0.206140350877 0.0 0.0 0.0 0.0 0.0 + 0.242562929062 0.282608695652 0.114416475973 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.324561403509 0.539473684211 0.302631578947 0.0 0.0 0.0 + 0.0 0.0 0.0416666666667 0.708333333333 0.688596491228 + 0.302083333333 + + + 0.422783772238 0.0781554291377 0.189665294574 0.175478130658 + 0.13048762344 0.124489268686 0.0675660320647 0.216529924299 + 0.30133959072 0.101588848766 0.0230630436763 0.229321943028 + 0.0874614604737 0.100405859522 + + + + + + + + + 2 1 130 3 129 4 128 4 33 4 90 6 31 4 92 5 30 6 91 4 32 4 93 1 35 2 94 + 1 35 2 94 1 35 2 94 1 22 2 4 3 4 2 93 2 11 3 1 17 1 4 94 6 1 1 1 29 + 94 38 94 38 94 38 94 38 93 39 94 38 94 38 94 39 93 38 94 38 94 38 94 + 38 94 38 94 38 94 38 94 38 24 3 67 38 24 4 66 38 24 5 65 39 22 6 65 + 39 22 7 64 39 22 8 63 39 21 10 62 39 21 10 62 39 22 9 62 39 22 11 60 + 39 21 14 58 39 21 14 59 38 21 12 1 1 58 11 1 27 21 14 58 39 21 14 59 + 38 20 15 59 38 20 12 1 4 2 1 54 38 20 22 52 38 20 19 1 3 51 38 20 24 + 49 39 20 25 48 39 19 23 1 3 47 18 3 4 3 1 2 8 19 22 53 9 1 1 21 6 19 + 19 2 6 48 3 30 5 18 27 1 1 47 2 32 4 18 24 86 4 18 25 6 1 77 5 18 27 + 2 1 2 1 76 3 20 17 1 13 1 2 75 4 19 15 3 17 75 3 18 16 3 17 76 3 17 + 17 2 18 72 6 15 38 11 3 59 6 16 17 1 19 10 5 60 4 16 36 11 5 60 4 16 + 6 1 13 2 14 11 6 59 3 17 5 5 10 2 15 9 6 59 3 18 5 9 3 1 8 2 1 3 4 11 + 5 59 2 36 4 1 4 21 5 103 6 18 5 103 3 20 7 103 2 19 9 123 10 122 12 + 120 12 107 1 12 13 104 3 11 16 102 2 12 19 94 2 2 3 12 21 92 7 12 24 + 89 6 12 26 88 2 2 2 11 27 89 1 15 28 87 2 15 28 87 2 15 28 85 4 15 29 + 83 6 13 4 3 16 3 3 85 6 12 4 3 17 1 5 84 6 12 3 4 24 84 6 11 3 3 16 2 + 9 84 3 12 3 3 27 85 2 12 3 4 27 84 1 13 4 1 29 84 1 13 13 2 19 84 1 + 12 14 2 19 84 1 13 34 98 33 100 31 105 27 117 15 117 5 2 8 117 15 104 + 4 7 17 102 10 1 18 102 30 103 29 103 29 102 30 103 28 105 27 107 24 + 108 24 109 23 110 23 110 21 114 17 116 5 2 8 117 5 3 7 120 2 3 7 121 + 2 1 8 122 10 122 11 123 8 125 7 125 7 127 5 126 6 7 0 + + + + 16500.0 + + + 1.056 + + + 3748.0 + + + 0.23826040555 + + + 2.27141133896 + + + 0.487105591175 0.458138964437 0.466168144903 0.243356584955 + 0.296600288934 0.0188112257818 0.0450210928565 0.0417104308477 + 0.0416059058171 + + + 132.0 + + + 0.780303030303 1.112 + + + 0.242424242424 0.393939393939 1.27272727273 1.21212121212 0.576 + 1.824 1.792 0.256 + + + 125.0 + + + 19.0 77.0 0.237179487179 13.0 4.0 6.0 + + + 0.0 0.992 + + + 0.227151515152 + + + 0.628543499511 0.606060606061 0.0 0.0 0.169110459433 0.368523949169 + 0.0420332355816 0.0 0.0058651026393 0.462365591398 0.186705767351 + 0.00284090909091 0.0 0.00782013685239 0.579667644184 0.585227272727 + + + 0.3125 0.87890625 0.854166666667 0.32421875 0.0 0.0 0.0 0.0 + 0.278431372549 1.0 1.0 0.283088235294 0.0 0.0 0.0 0.0 0.225 + 0.44140625 0.5 0.34765625 0.0625 0.0 0.0 0.0 0.0 0.0220588235294 + 0.227450980392 0.404411764706 0.0992647058824 0.0 0.0 0.0 0.0 + 0.0234375 0.520833333333 0.94921875 0.25390625 0.0416666666667 0.0 + 0.0 0.0 0.0 0.00392156862745 0.382352941176 0.238970588235 0.2 + 0.0110294117647 0.0 0.0 0.0 0.0 0.03125 0.58984375 0.891666666667 + 0.71484375 0.23828125 0.0 0.0 0.0 0.0 0.0882352941176 0.8 + 0.841911764706 0.533088235294 + + + 0.343081664611 0.273215946536 0.12163505667 0.0552973032301 + 0.00775996653415 0.470126990186 0.179911727245 0.127371664561 + 0.0395638453644 0.0689280269054 0.077837971149 0.209284640918 + 0.383607731936 0.111662896652 + + + + + + + + + 42 1 45 2 45 2 45 2 45 2 7 1 37 2 7 1 37 2 7 10 28 2 7 19 3 2 14 2 7 + 19 3 13 2 3 6 21 2 18 6 20 3 18 6 20 3 18 7 19 3 19 6 20 2 19 6 20 1 + 20 6 20 1 20 5 21 1 20 5 42 5 42 4 44 2 45 2 140 1 46 2 45 3 44 3 44 + 4 3 4 1 1 34 4 4 2 36 6 3 5 33 6 4 5 32 7 2 4 34 7 3 4 33 7 40 7 40 7 + 41 6 40 7 40 7 40 8 39 8 39 8 40 7 31 2 2 12 38 1 1 7 40 7 40 7 40 7 + 40 8 3 1 35 8 1 9 29 36 11 40 6 43 2 4 0 + + + + 2585.0 + + + 0.854545454545 + + + 1790.0 + + + 0.154748603352 + + + 1.07256990679 + + + 0.524228807384 0.54237533623 0.0837931158036 0.0912909252618 + 0.0114655925308 -0.001314907958 0.00121215118846 -0.00219971482159 + 0.000769954455927 + + + 47.0 + + + 0.468085106383 0.472727272727 + + + 0.68085106383 0.340425531915 0.0 0.765957446809 0.727272727273 + 0.363636363636 0.509090909091 0.290909090909 + + + 55.0 + + + 3.0 22.0 0.25 2.0 2.0 4.0 + + + 0.0 0.981818181818 + + + 0.692456479691 + + + 0.370629370629 0.87012987013 0.493506493506 0.318181818182 + 0.371794871795 0.994047619048 0.970238095238 0.75 0.269230769231 + 0.958333333333 1.0 0.785714285714 0.301282051282 0.833333333333 + 0.857142857143 0.77380952381 + + + 0.0333333333333 0.457142857143 0.485714285714 0.942857142857 + 0.342857142857 0.0 0.0 0.0 0.0 0.857142857143 1.0 1.0 + 0.595238095238 0.928571428571 0.833333333333 0.333333333333 0.0 + 0.761904761905 1.0 1.0 0.904761904762 0.97619047619 1.0 + 0.428571428571 0.0 0.619047619048 0.97619047619 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.428571428571 0.833333333333 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.52380952381 1.0 1.0 1.0 1.0 0.952380952381 + 0.761904761905 0.305555555556 0.333333333333 0.5 0.833333333333 + 0.738095238095 0.690476190476 0.642857142857 0.738095238095 + + + 0.456703896646 0.0343267079435 0.00995819734468 0.0205586499568 + 0.0408033929788 0.0423285689938 0.0680557768818 0.0200485685092 + 0.0430886040987 0.00498372284212 0.185342213361 0.0331136777734 + 0.139167052607 0.0278075989976 + + + + + + + + + 89 1 87 6 30 1 87 12 2 1 14 3 1 4 87 19 1 17 87 37 87 37 88 36 88 36 + 88 5 1 30 89 2 3 29 95 29 91 1 3 29 91 1 4 28 91 1 5 28 90 1 5 28 89 + 3 3 29 89 35 88 36 89 35 89 35 89 35 90 34 90 34 90 34 90 34 90 34 90 + 5 3 26 90 35 89 35 89 35 88 38 86 37 87 37 87 37 87 21 7 10 86 21 3 + 13 88 18 1 1 1 14 89 17 2 16 90 5 1 3 2 23 90 5 2 18 3 6 90 1 7 2 1 + 23 89 4 20 1 3 1 4 3 6 18 6 1 30 1 25 6 28 34 29 2 23 8 28 34 30 6 12 + 14 28 34 30 11 1 20 29 32 31 32 29 32 31 32 29 32 31 32 28 34 30 32 + 28 34 30 32 29 33 30 32 29 32 31 32 29 33 31 4 2 25 29 33 31 4 2 25 + 29 33 31 31 29 33 31 31 29 33 31 32 28 33 31 32 28 33 31 32 28 33 31 + 32 28 33 31 18 2 12 28 33 31 32 28 33 31 32 28 33 32 32 27 33 32 32 + 27 33 32 13 1 18 27 33 32 32 28 33 31 32 27 34 31 32 27 34 32 31 27 + 33 33 31 28 33 32 31 28 33 31 32 28 33 31 32 28 33 31 32 28 33 31 33 + 27 33 32 32 27 33 1 1 29 33 27 33 1 1 28 34 27 33 1 1 26 36 27 12 6 + 15 1 3 5 3 11 41 27 4 27 2 1 20 2 41 27 1 31 1 1 13 2 1 3 44 62 13 6 + 16 6 5 4 5 1 7 60 13 8 14 28 1 60 3 4 7 7 14 28 1 60 5 1 8 6 15 28 1 + 60 14 6 16 27 1 60 17 2 17 88 37 87 37 87 37 87 37 87 36 87 38 88 35 + 89 35 89 16 2 17 90 34 90 34 90 34 90 4 1 2 1 26 90 3 4 27 90 4 1 29 + 91 33 91 33 91 34 90 34 90 13 1 20 90 34 90 34 90 34 90 18 1 7 1 7 90 + 17 5 4 2 6 90 17 2 12 2 1 91 33 91 33 91 16 2 16 90 34 90 19 3 12 90 + 5 1 10 10 8 90 2 28 4 91 1 29 3 91 1 30 2 91 1 31 1 123 2 122 2 123 1 + 123 1 123 1 123 1 84 0 + + + + 16368.0 + + + 0.939393939394 + + + 5255.0 + + + 0.160418648906 + + + 0.713290771909 + + + 0.4962737772 0.473387032343 0.214826090987 0.181212257223 + -0.103744211732 0.0111601389753 -0.0303012095986 0.0394546726545 + -0.00254472176868 + + + 124.0 + + + 0.766129032258 0.939393939394 + + + 1.06451612903 1.09677419355 0.806451612903 0.0967741935484 + 0.393939393939 1.42424242424 1.36363636364 0.575757575758 + + + 132.0 + + + 14.0 101.0 0.208469055375 8.0 2.0 5.0 + + + 0.0 0.992424242424 + + + 0.321053274682 + + + 0.0 0.0312805474096 0.468230694037 0.578690127077 0.187683284457 + 0.695992179863 0.644183773216 0.168132942326 0.836754643206 + 0.287390029326 0.0684261974585 0.0 0.0 0.718475073314 + 0.451612903226 0.0 + + + 0.0 0.0 0.0 0.0 0.0375 0.894117647059 0.729166666667 0.294117647059 + 0.0 0.0 0.05078125 0.0698529411765 0.046875 0.845588235294 + 0.96484375 0.349264705882 0.0 0.0 0.2625 0.98431372549 + 0.979166666667 0.490196078431 0.429166666667 0.270588235294 + 0.3203125 0.404411764706 0.53125 0.963235294118 1.0 0.158088235294 + 0.0 0.0 0.825 0.992156862745 0.4375 0.0078431372549 0.0916666666667 + 0.043137254902 0.0 0.0 0.6796875 0.849264705882 0.52734375 + 0.191176470588 0.140625 0.00367647058824 0.0 0.0 0.0 0.0 + 0.479166666667 1.0 0.925 0.0 0.0 0.0 0.0 0.0 0.43359375 + 0.933823529412 0.93359375 0.00367647058824 0.0 0.0 + + + 0.398044785881 0.147780661184 0.100330861408 0.127271815481 + 0.00688608526686 0.253441815477 0.042445394513 0.126251849793 + 0.245714032366 0.0914921179655 0.070743140546 0.11340760814 + 0.0558113768208 0.0408360486802 + + + + + + + + + 41 1 65 1 64 3 63 4 62 5 62 1 63 1 1 2 60 10 47 4 6 9 48 2 9 7 48 3 7 + 9 46 4 6 8 49 4 4 8 3 1 47 2 7 6 3 3 45 1 8 7 1 4 45 1 8 7 1 5 44 1 9 + 12 43 2 8 14 42 2 8 13 18 9 16 2 8 16 15 14 11 2 8 2 1 13 15 27 8 16 + 15 27 8 17 14 27 8 17 13 28 8 17 13 28 7 19 12 29 6 20 11 3 3 1 1 2 2 + 17 6 21 11 1 12 15 6 21 15 2 6 16 6 22 9 9 4 16 6 20 11 29 7 19 16 1 + 5 18 6 17 14 29 6 17 14 29 6 8 3 2 18 29 6 4 2 2 23 29 6 4 2 2 13 1 9 + 29 6 4 17 1 8 30 6 4 10 1 6 1 7 31 6 4 10 1 6 1 8 30 6 4 10 2 5 2 28 + 9 7 2 11 3 3 3 8 1 20 4 11 2 11 3 3 3 7 4 15 10 9 2 10 4 1 5 5 6 1 3 + 7 1 1 12 7 3 10 4 2 4 5 10 4 17 7 3 10 3 3 4 6 7 1 1 3 18 7 3 9 5 2 4 + 7 4 1 1 1 1 3 5 1 12 7 3 8 6 2 4 7 8 2 6 3 10 7 3 8 6 2 3 8 8 2 6 3 + 10 6 4 8 6 2 3 8 29 7 3 9 4 3 2 9 3 1 4 2 19 7 3 9 4 3 2 14 2 3 19 7 + 3 9 4 3 3 18 6 2 7 2 2 7 3 9 4 3 3 18 6 3 6 11 4 8 4 3 4 7 3 2 4 1 6 + 3 6 11 3 9 5 2 5 6 9 1 6 3 6 11 3 4 3 2 5 3 4 6 17 3 8 8 3 5 2 1 6 2 + 5 6 28 8 3 5 8 2 6 6 28 8 3 6 15 6 28 8 3 7 14 6 28 8 3 8 13 6 28 8 3 + 10 11 6 2 5 21 8 3 10 11 6 2 11 15 8 3 10 11 28 6 8 3 10 11 30 4 8 3 + 11 10 31 3 8 3 11 3 2 5 31 3 8 3 12 2 3 4 3 1 28 2 8 3 12 2 4 2 5 4 + 24 2 8 5 11 1 4 3 8 1 22 4 7 6 10 8 31 4 6 9 7 10 30 4 6 9 8 9 30 4 6 + 6 2 2 9 5 33 2 8 4 14 5 33 2 8 8 11 5 32 2 8 7 13 3 34 1 9 7 48 2 9 9 + 1 3 7 1 19 1 15 1 9 3 3 8 6 2 19 1 13 2 9 4 2 9 6 2 33 1 9 17 4 1 18 + 1 25 17 24 1 24 17 24 1 24 19 47 21 45 22 44 23 43 24 42 25 41 26 40 + 26 40 26 40 25 41 25 41 4 3 3 2 7 1 5 41 4 2 4 3 5 3 1 44 10 3 6 1 3 + 43 24 42 25 41 25 41 4 1 12 1 7 42 3 2 11 2 6 43 2 2 12 1 6 47 12 1 6 + 48 11 2 5 49 1 3 4 3 6 54 3 4 6 59 6 56 1 4 5 48 2 6 1 4 5 49 1 6 1 4 + 5 49 1 3 1 1 2 4 5 48 3 2 4 4 5 20 3 19 1 4 4 2 3 5 3 1 1 20 3 19 2 3 + 10 4 5 20 2 20 3 3 10 3 5 43 1 3 12 2 6 42 1 4 19 48 18 49 17 50 16 + 51 15 53 13 54 12 55 11 56 10 57 9 58 8 60 5 132 1 4 3 56 3 3 7 33 1 + 19 3 2 8 32 2 19 6 2 3 34 2 20 1 1 3 40 1 22 2 65 2 280 3 60 1 2 4 55 + 10 64 2 60 6 58 8 56 4 2 3 58 9 57 9 57 9 57 3 1 5 62 4 64 2 64 2 44 + 0 + + + + 10362.0 + + + 0.420382165605 + + + 3104.0 + + + 0.441365979381 + + + 1.10554937722 + + + 0.570925852498 0.404870473169 0.107249616215 0.411009275348 + 0.0689548560674 -0.0109854734051 0.00520263838001 0.00827615460636 + 0.150228447856 + + + 66.0 + + + 3.83333333333 1.67515923567 + + + 4.72727272727 2.9696969697 3.09090909091 4.36363636364 + 1.35031847134 3.51592356688 1.37579617834 0.458598726115 + + + 157.0 + + + 23.0 99.0 0.223509933775 29.0 0.0 4.0 + + + 0.0 0.993630573248 + + + 0.299556070257 + + + 0.336538461538 0.391025641026 0.00801282051282 0.0828125 + 0.473604826546 0.58371040724 0.0196078431373 0.0941176470588 + 0.495192307692 0.253205128205 0.391025641026 0.0296875 + 0.211161387632 0.478129713424 0.660633484163 0.277941176471 + + + 0.0 0.5 0.480263157895 0.21875 0.0 0.0 0.125 0.04375 0.0 0.8125 + 0.592105263158 0.2875 0.03125 0.0 0.025 0.1375 0.0 0.90625 + 0.710526315789 0.35 0.0 0.0394736842105 0.0125 0.3875 + 0.152046783626 0.794444444444 0.771929824561 0.505555555556 + 0.0388888888889 0.0 0.0 0.0 0.210526315789 0.33125 0.263157894737 + 0.26875 0.125 0.0328947368421 0.0 0.0 0.605263157895 0.825 + 0.151315789474 0.325 0.925 0.467105263158 0.1125 0.00625 + 0.111842105263 0.6875 0.519736842105 0.425 0.85625 0.644736842105 + 0.39375 0.0 0.0 0.0722222222222 0.374269005848 0.588888888889 0.5 + 0.66081871345 0.7 0.0 + + + 0.616982423419 0.108767287422 0.120868527636 0.0325620158411 + 0.486311566842 0.285507649125 0.0267214900023 0.193972870352 + 0.0969181389777 0.016306490803 0.130771966034 0.388175851626 + 0.0988949208497 0.0310863344476 + + + + + + + + + 38 2 39 4 38 4 39 2 41 1 40 2 40 2 7 4 19 12 2 20 1 19 2 40 2 40 2 40 + 2 40 2 40 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 + 3 39 3 39 3 39 12 23 11 1 5 25 11 39 3 39 3 4 1 34 3 39 3 39 3 39 3 + 39 3 39 3 39 4 38 4 38 4 38 4 38 4 38 4 38 4 38 4 38 4 38 4 38 5 37 5 + 4 3 19 5 6 5 3 29 5 5 2 31 4 5 1 33 4 39 2 5 1 34 2 4 3 33 2 5 2 32 3 + 5 2 32 3 39 3 39 4 38 3 39 2 40 2 2 0 + + + + 2730.0 + + + 0.646153846154 + + + 1755.0 + + + 0.161253561254 + + + 1.01299545159 + + + 0.514001806685 0.46213497151 0.0753047038158 0.10765965931 + 0.00624541587716 -0.00047918095164 0.0040178581967 + 0.000475902457347 0.00285925495449 + + + 42.0 + + + 0.571428571429 0.2 + + + 1.14285714286 0.0 0.0 1.04761904762 0.123076923077 0.0615384615385 + 0.0615384615385 0.553846153846 + + + 65.0 + + + 3.0 18.0 0.18115942029 3.0 2.0 2.0 + + + 0.0 0.984615384615 + + + 0.642857142857 + + + 0.5125 0.8 0.74375 0.223529411765 0.494318181818 1.0 1.0 + 0.229946524064 0.51875 1.0 1.0 0.229411764706 0.556818181818 + 0.744318181818 0.909090909091 0.401069518717 + + + 0.0 0.95 0.8 0.6 0.6 0.4 0.225 0.111111111111 0.1 1.0 1.0 0.8 0.975 + 1.0 0.525 0.0666666666667 0.0 1.0 1.0 1.0 1.0 1.0 0.475 0.0 0.0 + 0.979166666667 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 + 0.0 0.075 1.0 1.0 1.0 1.0 1.0 0.475 0.0 0.125 1.0 1.0 0.85 1.0 1.0 + 0.4 0.0 0.4375 0.666666666667 0.666666666667 0.520833333333 + 0.833333333333 0.833333333333 0.729166666667 0.444444444444 + + + 0.555823101459 0.0378268891598 0.0226718623696 0.0196043749572 + 0.248447436899 0.0717399084392 0.0512747471867 0.0101767033688 + 0.00947778216694 0.0154987170866 0.130010573803 0.0611828340425 + 0.138103064006 0.0372972876179 + + + + + + + + + 21 1 70 2 51 22 1 3 46 33 39 38 34 38 35 37 35 37 35 37 35 36 36 36 + 36 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 + 37 35 38 32 17 1 22 33 39 33 39 33 39 33 39 33 39 34 37 35 37 35 37 + 35 37 35 37 35 37 35 8 1 28 35 37 35 17 2 18 36 17 1 18 36 36 36 35 + 37 35 37 35 37 35 37 19 1 15 59 13 67 5 69 3 1604 12 48 25 38 1 3 30 + 38 34 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 + 35 36 37 33 39 34 38 34 38 34 8 3 27 34 37 36 36 36 36 36 36 36 7 1 + 28 36 4 5 27 36 5 1 30 36 4 2 2 1 28 35 37 36 36 36 35 37 35 37 7 3 + 25 37 7 3 25 37 35 37 34 38 34 38 34 38 34 38 8 1 26 37 8 2 25 37 35 + 37 35 37 4 1 30 37 23 9 3 37 14 58 7 65 4 67 4 68 4 68 4 69 3 69 4 68 + 3 69 3 69 3 69 2 70 2 71 1 71 1 34 0 + + + + 9360.0 + + + 0.553846153846 + + + 3220.0 + + + 0.133540372671 + + + 1.85325443787 + + + 0.507860204706 0.449944629014 0.117295256748 0.427201312229 + 0.174098027248 -0.000200776853489 -0.0021679106371 + -0.00137412298448 0.0122786861401 + + + 72.0 + + + 0.458333333333 0.146153846154 + + + 0.166666666667 0.333333333333 1.22222222222 0.111111111111 + 0.0615384615385 0.123076923077 0.153846153846 0.246153846154 + + + 130.0 + + + 10.0 44.0 0.165441176471 0.0 11.0 0.0 + + + 0.0 0.992307692308 + + + 0.344017094017 + + + 0.850694444444 0.363636363636 0.0 0.0 0.921875 0.442760942761 + 0.03125 0.00841750841751 0.154513888889 0.0723905723906 + 0.769097222222 0.617845117845 0.0 0.0 0.796875 0.498316498316 + + + 0.708333333333 0.826388888889 0.631944444444 0.0 0.0 0.0 0.0 0.0 + 0.875 0.993055555556 0.868055555556 0.0 0.0 0.0 0.0 0.0 + 0.888888888889 1.0 0.861111111111 0.0 0.0 0.0 0.0 0.0 + 0.798611111111 1.0 0.958333333333 0.00653594771242 0.0 0.125 + 0.0138888888889 0.0196078431373 0.236111111111 0.381944444444 + 0.284722222222 0.0130718954248 0.527777777778 0.930555555556 0.9375 + 0.444444444444 0.0 0.0 0.0 0.0 0.618055555556 1.0 0.979166666667 + 0.150326797386 0.0 0.0 0.0 0.0 0.659722222222 1.0 1.0 + 0.0915032679739 0.0 0.0 0.0 0.0 0.604166666667 0.923611111111 + 0.881944444444 0.0718954248366 + + + 0.30308983877 0.279015207373 0.0211527960932 0.0111022332221 + 0.203486657363 0.538456660571 0.144441288034 0.0223985131772 + 0.0121116529251 0.019792314157 0.239788613503 0.316273965409 + 0.331122538344 0.059293814675 + + + + + + + + + 6 2 10 2 10 2 10 1 11 1 11 1 23 2 10 3 1 1 7 5 7 6 5 7 7 4 7 4 7 5 8 + 4 8 5 6 6 7 5 6 6 6 6 6 5 7 6 6 6 5 7 5 6 7 5 7 5 6 6 7 5 7 5 7 5 7 5 + 7 4 7 5 7 5 7 6 6 6 6 6 6 6 6 5 7 5 7 5 7 5 6 6 7 5 7 5 7 5 7 4 7 5 8 + 4 8 4 8 4 8 4 8 4 8 5 7 5 6 6 6 5 7 5 7 6 6 5 7 4 8 4 8 4 8 4 7 5 7 5 + 8 4 8 4 7 5 6 6 6 7 5 7 6 6 7 4 7 5 8 4 8 3 9 3 9 3 10 1 10 3 8 5 7 5 + 6 7 5 6 6 6 6 6 6 5 7 5 7 5 7 6 6 6 6 6 6 6 6 6 6 6 7 6 6 5 6 6 6 6 6 + 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 7 5 7 5 7 5 7 5 + 7 4 8 4 7 6 7 5 6 7 5 6 6 5 1 1 6 6 7 5 6 6 6 6 7 5 7 5 5 7 6 6 6 5 7 + 5 7 5 8 4 8 3 10 2 9 4 9 3 9 2 9 4 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 7 5 7 4 9 3 9 3 9 3 9 3 9 3 5 0 + + + + 2028.0 + + + 0.0710059171598 + + + 839.0 + + + 0.522050059595 + + + 0.94133023526 + + + 0.42431466031 0.516267949373 0.00569697692282 2.61605804553 + -0.0693280761293 9.34069931524e-05 0.0681526885854 + -0.00276831461795 -0.181453779561 + + + 12.0 + + + 3.5 0.0118343195266 + + + 4.0 4.33333333333 4.66666666667 1.0 0.0236686390533 0.0 0.0 + 0.0236686390533 + + + 169.0 + + + 2.0 10.0 0.19209039548 1.0 28.0 1.0 + + + 0.0 0.994082840237 + + + 0.413708086785 + + + 0.0 0.0952380952381 0.666666666667 0.426356589147 0.293650793651 + 0.880952380952 0.984126984127 0.93023255814 0.888888888889 + 0.555555555556 0.246031746032 0.31007751938 0.34126984127 0.0 0.0 + 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.142857142857 0.0952380952381 0.0 0.0 0.0 0.0 + 0.285714285714 0.928571428571 1.0 0.690476190476 0.545454545455 0.0 + 0.0 0.380952380952 0.952380952381 1.0 1.0 1.0 0.772727272727 + 0.119047619048 0.761904761905 1.0 0.97619047619 1.0 0.952380952381 + 0.904761904762 1.0 0.904761904762 1.0 1.0 0.761904761905 + 0.857142857143 0.52380952381 0.52380952381 1.0 0.714285714286 1.0 + 0.714285714286 0.0714285714286 0.047619047619 0.0 0.0 + 0.159090909091 0.571428571429 0.761904761905 0.0 0.0 0.0 0.0 0.0 + 0.0 0.285714285714 0.0714285714286 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.407876137905 0.272721960874 0.0270989918344 0.0123157749931 + 0.267760441841 0.424335543767 0.233568349541 0.0351270024748 + 0.0129856902858 0.0200659489309 0.392060656455 0.281440176677 + 0.425549462421 0.199968204583 + + + + + + + + + 1 1 39 4 33 1 2 11 3 7 4 2 9 2 2 13 1 24 2 38 2 38 2 38 2 38 2 38 2 + 38 2 38 2 38 3 37 3 37 3 37 2 38 1 39 1 39 1 80 2 38 2 38 2 37 3 3 2 + 1 2 29 3 3 6 28 3 3 1 2 2 29 3 7 1 29 3 4 5 28 3 3 4 30 3 37 3 37 3 + 37 3 37 3 37 3 36 4 36 4 7 2 27 4 7 2 27 4 6 4 27 3 7 2 28 3 37 3 37 + 4 6 1 29 4 36 4 36 4 7 1 28 4 2 18 16 4 1 30 5 4 1 33 1 5 1 36 0 + + + + 2000.0 + + + 0.8 + + + 1624.0 + + + 0.146551724138 + + + 1.03191489362 + + + 0.515062523683 0.482783753896 0.0727297070057 0.102482267754 + 0.00560207973395 -0.000972036386686 -0.000279374776834 + -0.000757846416784 0.00149460638115 + + + 40.0 + + + 0.45 0.44 + + + 1.3 0.4 0.0 0.1 0.4 0.16 0.48 0.64 + + + 50.0 + + + 4.0 22.0 0.140127388535 2.0 3.0 2.0 + + + 0.0 0.98 + + + 0.812 + + + 0.791666666667 0.8 0.691666666667 0.523076923077 0.8 0.992307692308 + 0.983333333333 0.653846153846 0.783333333333 1.0 1.0 0.746153846154 + 0.7 0.930769230769 0.875 0.730769230769 + + + 0.7 0.8 0.766666666667 0.714285714286 0.6 0.6 0.566666666667 + 0.314285714286 0.666666666667 1.0 1.0 0.742857142857 0.6 + 0.966666666667 0.833333333333 0.428571428571 0.533333333333 1.0 1.0 + 0.971428571429 0.966666666667 0.966666666667 0.866666666667 0.4 + 0.666666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.428571428571 + 0.566666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.485714285714 + 0.566666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.571428571429 0.5 1.0 1.0 + 1.0 1.0 1.0 1.0 0.6 0.5 0.8 0.8 0.914285714286 0.8 0.7 + 0.766666666667 0.6 + + + 0.384723209247 0.0517320636535 0.0123382669639 0.0106785506971 + 0.038736261891 0.0705251759272 0.0831794506087 0.018771074357 + 0.0205733172996 0.00899176520193 0.142382219132 0.0118025290712 + 0.119885765231 0.0461950344523 + + + + + + + + + 34 3 35 4 35 2 34 4 34 1 1 2 34 3 35 3 36 2 35 3 36 1 35 3 34 4 33 5 + 33 5 33 5 33 5 33 4 33 5 34 4 34 4 33 4 34 4 34 4 34 3 35 3 35 3 35 3 + 34 4 33 4 34 4 33 6 33 4 34 4 34 3 36 2 36 1 62 2 34 5 36 1 33 5 33 5 + 32 6 32 7 29 9 28 11 26 12 4 4 17 13 3 4 17 17 1 3 17 21 17 22 15 21 + 17 21 16 22 16 11 2 9 16 5 1 4 3 9 16 12 3 6 35 2 213 2 36 2 36 1 33 + 5 33 5 36 2 36 1 188 1 33 7 30 15 1 2 20 18 21 16 22 5 4 7 20 18 20 + 18 21 11 2 4 21 11 1 4 22 16 23 9 4 2 23 14 23 17 21 17 21 17 22 16 + 26 11 30 7 31 7 31 6 34 4 35 1 25 0 + + + + 3686.0 + + + 0.39175257732 + + + 696.0 + + + 0.514367816092 + + + 0.531691370172 + + + 0.40839546443 0.603867337165 0.126516220195 0.91676456865 + -0.264790567108 0.029586231399 0.205688643047 -0.087820686842 + -0.356249858437 + + + 38.0 + + + 1.36842105263 0.134020618557 + + + 1.68421052632 2.73684210526 0.315789473684 0.631578947368 + 0.0412371134021 0.0824742268041 0.20618556701 0.20618556701 + + + 97.0 + + + 9.0 30.0 0.308219178082 6.0 2.0 3.0 + + + 0.0 0.989690721649 + + + 0.188822571894 + + + 0.0 0.0277777777778 0.282407407407 0.56 0.0 0.291666666667 0.35 + 0.62 0.0 0.0694444444444 0.268518518519 0.0 0.3625 0.141666666667 + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0833333333333 0.0 0.541666666667 0.346153846154 + 0.0 0.0 0.0 0.1 0.683333333333 0.266666666667 0.733333333333 + 0.584615384615 0.0 0.0 0.0 0.516666666667 0.733333333333 + 0.0333333333333 0.583333333333 0.861538461538 0.0 0.0 0.0 0.65 + 0.633333333333 0.0 0.533333333333 0.492307692308 0.0 0.0 0.0 + 0.0208333333333 0.770833333333 0.0 0.0 0.0 0.0 0.0 0.116666666667 + 0.116666666667 0.35 0.0 0.0 0.0 0.05 0.666666666667 0.566666666667 + 0.0 0.0 0.0 0.0 0.0 0.533333333333 0.2 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.596895314551 0.163232053914 0.146214591925 0.0576815024204 + 0.52733938193 0.348045740343 0.109310698558 0.154571434207 + 0.0988303125568 0.0817401754153 0.322038746053 0.463967877639 + 0.199639595099 0.0905542693487 + + + + + + + + + 57 1 129 2 129 2 129 2 129 2 97 1 31 2 97 1 30 3 97 2 30 3 96 2 30 2 + 97 2 29 3 97 2 19 2 8 4 96 4 1 22 4 4 96 29 1 5 96 35 96 35 61 2 33 + 35 61 3 32 35 61 3 33 17 1 16 25 3 33 3 33 16 2 16 24 17 20 3 33 17 1 + 16 24 17 4 10 5 5 31 35 24 16 5 12 2 6 32 34 24 17 5 11 1 7 32 34 24 + 17 5 19 32 34 24 16 6 19 32 34 24 16 6 19 10 1 21 34 24 17 5 20 9 2 + 20 34 24 19 3 20 9 2 20 34 24 19 2 21 9 2 20 34 24 19 2 20 9 3 20 34 + 24 20 1 20 9 3 20 34 24 20 1 20 9 3 20 35 22 21 1 20 9 3 20 35 23 20 + 1 20 8 4 20 35 23 41 8 3 21 35 22 41 9 1 3 1 19 34 23 20 2 19 9 5 19 + 34 22 21 1 20 9 5 20 33 22 21 1 21 8 6 19 34 21 45 5 7 17 36 22 20 1 + 23 6 6 18 35 22 11 11 21 7 5 19 35 22 8 15 20 7 7 17 35 22 14 8 22 6 + 7 17 21 1 14 21 20 2 22 6 7 17 21 1 12 23 8 1 4 1 5 3 7 1 14 5 7 19 + 20 2 11 24 6 3 2 10 7 1 14 6 5 20 33 24 11 11 2 1 3 2 13 7 4 20 34 23 + 15 6 22 7 4 20 35 1 36 6 21 8 4 20 64 15 19 10 2 21 4 1 1 3 55 2 5 10 + 5 3 9 10 3 19 5 5 54 3 3 10 7 2 10 10 3 19 5 6 53 16 18 11 27 11 4 6 + 41 12 19 11 27 24 37 13 19 11 26 26 40 9 19 10 29 25 35 1 2 10 19 10 + 30 24 34 16 1 4 12 10 30 25 32 27 7 10 30 25 32 29 5 10 31 24 32 29 5 + 10 31 24 32 30 4 10 30 25 32 30 4 10 29 26 32 31 3 10 31 24 32 31 4 9 + 31 24 32 31 3 10 31 24 32 31 3 10 31 24 32 31 3 10 31 24 32 31 3 10 + 31 24 27 3 2 31 3 10 31 24 32 31 3 10 31 24 32 31 3 10 31 24 32 31 3 + 9 32 24 32 31 3 14 6 4 4 1 6 30 32 31 3 9 32 24 32 31 3 9 14 1 17 24 + 32 34 1 8 4 2 5 4 18 23 32 34 1 8 4 2 5 4 18 23 33 33 1 8 33 23 33 43 + 31 24 33 30 4 9 31 24 33 30 5 8 31 24 33 30 5 9 31 23 33 30 5 8 32 23 + 33 30 5 8 32 23 33 30 5 7 33 24 32 31 4 7 33 23 33 31 5 6 33 23 32 32 + 5 7 32 24 31 32 5 7 32 24 31 32 5 7 33 23 4 1 3 12 11 32 6 6 33 23 2 + 19 1 6 3 32 6 6 32 24 2 27 2 31 7 6 32 24 1 28 2 38 1 5 32 24 1 28 2 + 44 7 14 11 24 1 28 2 44 6 21 5 24 1 28 2 44 5 23 4 25 1 27 2 34 3 6 6 + 24 4 23 2 27 2 34 5 4 6 24 4 52 2 36 4 4 4 26 2 53 3 35 3 5 4 26 3 53 + 2 35 3 5 4 25 4 97 5 25 4 53 2 42 5 24 6 52 1 40 2 1 4 28 1 93 4 2 3 + 122 4 128 2 1 0 + + + + 14279.0 + + + 1.20183486239 + + + 5928.0 + + + 0.202091767881 + + + 0.829372447085 + + + 0.454212083463 0.499547033538 0.216925832238 0.0971108945302 + -0.0314848015495 0.0181669509944 -0.0052651794922 0.00587859204248 + 0.00318179325066 + + + 131.0 + + + 1.09160305344 2.43119266055 + + + 1.40458015267 0.641221374046 1.06870229008 1.19083969466 + 1.50458715596 3.4128440367 2.3119266055 2.49541284404 + + + 109.0 + + + 20.0 81.0 0.204978038067 19.0 2.0 11.0 + + + 0.0 0.990825688073 + + + 0.415155122908 + + + 0.15162037037 0.357638888889 0.902777777778 0.592633928571 + 0.506172839506 0.838383838384 0.273849607183 0.164502164502 + 0.154882154882 0.525252525253 0.741863075196 0.310606060606 + 0.200897867565 0.683501683502 0.159371492705 0.107142857143 + + + 0.0 0.0133928571429 0.230769230769 0.34375 0.866071428571 + 0.802884615385 0.883928571429 0.325892857143 0.120192307692 + 0.459821428571 0.432692307692 0.419642857143 0.96875 0.971153846154 + 1.0 0.160714285714 0.162895927602 0.983193277311 1.0 0.886554621849 + 0.0252100840336 0.0678733031674 0.117647058824 0.126050420168 + 0.197115384615 0.625 0.653846153846 0.799107142857 0.53125 0.5 + 0.392857142857 0.0267857142857 0.0 0.0 0.0 0.428571428571 1.0 1.0 + 0.736607142857 0.0 0.0 0.579831932773 0.927601809955 0.701680672269 + 0.525210084034 0.470588235294 0.428571428571 0.0840336134454 0.0 + 0.40625 0.9375 0.580357142857 0.151785714286 0.0 0.0 0.0 0.0 + 0.36974789916 0.597285067873 0.638655462185 0.323529411765 + 0.140271493213 0.289915966387 0.126050420168 + + + 0.510846613082 0.0957030669996 0.0383670647354 0.0299420095738 + 0.16399648327 0.195224100933 0.0452884764224 0.0452931121223 + 0.0682448416266 0.0118323217503 0.0838973612684 0.095149897214 + 0.17206673527 0.0288712705168 + + + + + + + + + 44 1 71 2 69 4 68 5 67 5 68 3 68 3 69 3 68 4 2 2 64 3 3 3 63 4 1 4 63 + 10 37 3 23 10 36 4 21 10 63 9 63 9 3 1 59 13 59 16 56 17 55 15 57 16 + 56 19 53 20 52 21 9 1 41 22 8 1 1 4 36 23 6 3 1 5 34 24 5 9 9 2 23 25 + 4 10 8 3 21 26 4 10 1 6 1 3 22 26 3 10 1 6 1 8 16 28 2 10 3 4 1 8 17 + 28 1 10 4 3 2 6 18 28 1 9 11 4 19 28 1 9 11 3 20 1 3 4 1 19 1 9 11 3 + 20 3 1 18 4 2 1 10 10 5 18 22 4 13 3 3 3 6 18 18 2 2 5 11 6 1 3 7 17 + 18 2 3 4 14 3 1 4 5 18 1 1 16 2 5 2 1 1 12 2 13 16 8 1 17 3 27 16 8 1 + 17 3 27 16 7 2 10 1 7 2 17 1 7 23 1 4 8 2 7 2 17 3 5 28 9 1 3 1 1 1 1 + 2 17 2 8 26 8 2 3 4 1 1 17 4 2 31 7 11 9 1 6 5 3 30 6 12 16 3 8 28 5 + 12 17 1 10 29 3 12 3 2 1 9 3 1 7 32 1 13 3 12 3 2 6 32 1 5 1 7 6 10 1 + 3 8 36 2 6 6 7 5 2 8 35 5 4 7 3 8 2 8 25 3 1 2 3 8 2 7 3 18 24 19 1 7 + 1 20 25 18 1 6 8 14 26 17 2 3 1 1 8 3 3 8 27 16 2 6 3 8 2 8 28 15 2 + 17 1 9 28 15 2 6 4 17 29 14 2 2 8 1 2 2 3 9 30 13 2 6 3 3 1 1 5 8 31 + 12 2 1 3 2 4 1 8 8 32 11 2 6 8 13 33 10 3 3 1 1 7 14 16 1 16 10 3 5 8 + 13 16 1 17 9 3 5 11 10 16 2 17 8 3 2 9 15 16 2 22 3 3 1 12 13 16 2 22 + 3 21 8 16 2 20 5 22 7 16 2 20 6 17 12 14 5 17 7 18 10 16 4 19 5 19 9 + 16 5 19 4 17 10 17 5 19 3 26 3 16 6 18 4 26 2 16 7 47 2 16 10 44 2 16 + 11 43 2 16 12 42 2 16 14 41 1 16 15 57 16 56 18 54 18 54 19 53 21 51 + 21 51 22 50 24 48 25 47 25 47 25 47 25 48 24 47 25 47 4 1 12 55 4 1 + 10 57 10 3 2 57 12 1 2 6 1 50 25 47 25 47 25 47 25 47 25 47 25 49 23 + 50 22 52 6 3 2 1 8 54 1 7 1 3 6 54 1 7 1 4 5 53 3 6 1 3 6 48 10 3 3 2 + 6 48 24 48 25 47 25 47 25 47 24 48 24 49 23 49 3 2 18 49 2 5 16 50 1 + 6 15 50 2 7 13 50 2 8 12 50 2 9 11 50 2 10 10 50 2 11 10 49 2 12 9 50 + 1 14 1 2 4 50 1 15 6 66 6 49 3 15 5 49 3 16 4 50 1 18 3 49 4 17 1 50 + 3 70 3 21 0 + + + + 10080.0 + + + 0.514285714286 + + + 3023.0 + + + 0.367184915647 + + + 1.13021778584 + + + 0.606388579575 0.467257024681 0.146568809768 0.378448988081 + 0.0821014308012 -0.0390919301076 0.0512465234862 -0.0184778289089 + 0.0823326489555 + + + 72.0 + + + 2.91666666667 1.45 + + + 3.27777777778 1.83333333333 2.44444444444 4.11111111111 + 0.942857142857 3.31428571429 0.8 0.742857142857 + + + 140.0 + + + 27.0 101.0 0.265486725664 25.0 0.0 7.0 + + + 0.0 0.992857142857 + + + 0.299900793651 + + + 0.177777777778 0.663492063492 0.00952380952381 0.0 0.0666666666667 + 0.433333333333 0.12380952381 0.0 0.477777777778 0.152380952381 + 0.468253968254 0.265079365079 0.338095238095 0.596825396825 + 0.447619047619 0.577777777778 + + + 0.0 0.530864197531 0.928104575163 0.598765432099 0.00653594771242 + 0.0 0.0 0.0 0.0130718954248 0.148148148148 0.614379084967 + 0.524691358025 0.0326797385621 0.0 0.0 0.0 0.0326797385621 + 0.228395061728 0.705882352941 0.901234567901 0.418300653595 0.0 0.0 + 0.0 0.0 0.0 0.00653594771242 0.111111111111 0.0915032679739 0.0 0.0 + 0.0 0.235294117647 0.228395061728 0.0980392156863 0.0246913580247 + 0.117647058824 0.104938271605 0.0196078431373 0.0 0.450980392157 + 0.981481481481 0.464052287582 0.037037037037 0.653594771242 + 0.987654320988 0.803921568627 0.253086419753 0.0196078431373 + 0.895061728395 0.718954248366 0.475308641975 0.222222222222 + 0.888888888889 0.78431372549 0.333333333333 0.0 0.401234567901 + 0.392156862745 0.796296296296 0.241830065359 0.413580246914 + 0.679738562092 0.530864197531 + + + 0.44381600695 0.138303642025 0.0903580177892 0.109812126115 + 0.0480362997898 0.220077272486 0.0622226159465 0.0754159530265 + 0.238232765989 0.0946786495248 0.237283253958 0.0828502295164 + 0.0629476958341 0.0480220159916 + + + + + + + + + 2 2 9 3 8 3 7 5 6 5 6 4 8 3 7 4 7 4 7 4 8 3 8 3 7 4 7 4 7 4 7 4 7 4 7 + 4 7 5 6 4 7 4 7 4 6 5 6 5 7 4 7 4 6 6 6 5 6 4 7 1 1 2 7 1 1 2 7 1 1 2 + 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 7 4 6 3 1 1 6 2 2 1 10 2 9 1 10 1 + 10 1 10 2 5 1 1 1 1 2 5 5 7 5 6 4 8 3 8 3 7 4 7 4 7 4 7 4 8 3 7 4 7 4 + 7 4 7 4 7 3 7 5 7 4 7 4 7 5 6 5 6 5 5 6 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 + 5 6 4 7 4 7 4 7 4 7 5 6 5 6 5 6 5 7 4 6 5 6 5 6 5 6 5 6 3 1 1 6 6 5 6 + 5 5 6 5 6 6 5 6 4 7 4 7 4 7 4 7 5 5 6 4 7 5 6 3 1 1 6 3 1 1 6 3 8 2 9 + 3 8 6 5 6 5 6 5 3 1 2 5 3 8 6 5 6 5 6 6 5 7 2 1 1 161 1 10 2 8 4 7 4 + 8 3 8 1 26 1 7 4 7 4 5 6 7 4 7 4 7 4 7 4 7 5 6 5 6 5 7 3 8 4 7 4 10 1 + 30 3 8 3 8 4 7 4 8 3 8 3 23 3 7 4 7 3 8 3 8 4 7 4 7 4 8 3 7 4 7 4 7 4 + 7 4 7 3 1 1 6 4 7 4 9 2 9 1 8 0 + + + + 2035.0 + + + 0.0594594594595 + + + 685.0 + + + 0.696350364964 + + + 1.05573770492 + + + 0.319562043796 0.464574738178 0.00628224596156 3.81468809611 + 0.0484148228578 0.000427083975068 0.017283927046 0.00811765761822 + 1.59638696666 + + + 11.0 + + + 4.90909090909 0.0702702702703 + + + 5.81818181818 4.0 5.81818181818 1.09090909091 0.108108108108 + 0.0432432432432 0.108108108108 0.0216216216216 + + + 185.0 + + + 14.0 39.0 0.15306122449 10.0 30.0 1.0 + + + 0.0 0.994594594595 + + + 0.336609336609 + + + 0.565217391304 0.45652173913 0.347826086957 0.297872340426 + 0.920289855072 0.942028985507 0.601449275362 0.297872340426 + 0.0434782608696 0.166666666667 0.297101449275 0.304964539007 0.0 + 0.0 0.0 0.255319148936 + + + 0.0434782608696 0.565217391304 0.130434782609 0.0434782608696 + 0.173913043478 0.0 0.0 0.541666666667 0.739130434783 0.913043478261 + 0.695652173913 0.95652173913 1.0 0.217391304348 0.0 0.625 1.0 + 0.782608695652 0.847826086957 1.0 0.978260869565 0.326086956522 + 0.152173913043 0.625 0.95652173913 1.0 0.95652173913 1.0 + 0.739130434783 0.260869565217 0.173913043478 0.0416666666667 + 0.130434782609 0.130434782609 0.173913043478 0.826086956522 + 0.826086956522 0.217391304348 0.565217391304 0.0 0.0 0.0 0.0 0.0 + 0.239130434783 0.130434782609 0.586956521739 0.0625 0.0 0.0 0.0 0.0 + 0.0 0.0 0.652173913043 0.208333333333 0.0 0.0 0.0 0.0 0.0 0.0 + 0.152173913043 0.1875 + + + 0.450122450686 0.25165492635 0.111512758029 0.0364359458926 + 0.420005774027 0.358789205823 0.223432379425 0.0102673947882 + 0.114572747309 0.0652003867302 0.551109261014 0.277068798931 + 0.351675129478 0.200331291261 + + + + + + + + + 37 2 63 6 61 7 59 2 1 4 60 2 2 4 59 6 61 5 62 6 61 7 60 7 60 8 59 9 + 58 11 56 12 23 4 28 13 22 7 25 15 20 8 12 2 9 18 18 10 1 1 7 3 9 20 + 16 9 2 1 6 4 9 22 14 10 1 11 9 24 12 9 4 9 9 26 10 10 1 11 9 28 8 10 + 1 11 9 29 7 10 1 10 11 26 9 6 7 1 3 1 13 16 2 9 9 5 27 2 1 12 5 6 9 6 + 26 15 5 6 12 4 12 1 11 16 4 4 2 1 14 1 13 2 10 17 3 8 12 4 9 4 10 8 3 + 6 3 8 8 2 2 9 4 4 11 7 4 5 4 6 8 15 3 5 9 17 4 4 1 1 8 16 1 2 1 2 10 + 18 3 3 11 16 4 3 9 26 9 24 8 29 6 23 9 29 6 23 9 29 6 23 8 30 6 23 9 + 29 20 9 10 28 20 9 9 3 2 24 12 3 6 1 1 6 9 3 1 25 10 6 3 10 9 29 10 6 + 2 11 9 29 9 6 4 9 10 29 9 19 10 29 8 20 10 29 5 11 4 8 10 29 5 6 1 3 + 3 10 10 29 5 23 10 29 7 21 10 28 7 22 10 28 7 9 2 11 10 17 2 9 8 7 4 + 10 10 16 4 9 7 8 1 12 10 16 4 9 7 1 2 18 10 6 4 6 4 9 6 1 6 15 10 6 7 + 4 3 9 14 14 10 7 6 6 1 9 15 13 11 7 5 17 16 11 10 8 6 15 18 10 10 7 9 + 13 19 9 10 7 10 12 19 9 10 7 10 12 19 9 11 6 10 8 1 3 19 10 10 6 9 8 + 1 4 21 1 2 5 11 6 10 4 2 3 27 3 12 6 13 1 32 3 12 8 10 2 32 3 12 9 10 + 1 32 3 11 11 10 1 31 2 12 13 40 2 12 14 39 2 12 15 38 2 12 17 36 2 12 + 15 2 2 34 2 12 13 5 1 34 2 13 3 1 10 5 1 32 2 13 18 1 2 31 2 13 21 31 + 3 12 22 31 1 13 24 29 1 14 24 27 2 14 18 4 3 26 2 14 18 5 3 25 2 14 + 18 5 4 25 1 17 1 1 12 7 3 25 1 17 1 3 10 6 4 25 1 16 2 3 9 7 4 24 1 + 17 2 3 9 7 1 2 1 46 12 4 5 41 1 4 13 2 6 41 1 4 13 1 7 41 3 3 20 41 4 + 2 11 1 8 41 10 1 6 2 7 41 7 5 5 2 7 41 1 1 5 2 1 2 6 1 7 41 11 1 6 1 + 7 41 26 41 27 40 27 40 27 41 26 41 17 1 8 41 26 41 26 41 26 41 26 41 + 3 1 22 41 2 3 21 41 2 8 7 1 8 42 1 8 6 2 8 42 1 9 15 42 1 10 15 41 1 + 10 15 41 1 11 4 2 8 41 2 11 13 41 2 12 13 19 5 16 3 12 12 20 5 14 6 + 11 10 22 2 16 6 12 9 21 3 16 5 13 10 20 2 17 5 13 11 19 2 17 5 17 7 + 19 5 14 5 18 5 21 4 15 3 22 2 21 3 64 2 66 1 66 1 66 1 66 1 66 2 64 3 + 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 2 65 3 64 2 + 65 2 65 2 65 2 65 2 65 2 65 2 66 1 65 2 65 2 66 1 44 0 + + + + 10586.0 + + + 0.424050632911 + + + 3363.0 + + + 0.33125185846 + + + 1.01438583549 + + + 0.580037664783 0.382807661494 0.0855097604927 0.327438944848 + 0.0535002295173 -0.0144495546906 0.0092851400406 -0.00583265241214 + 0.0952320099879 + + + 67.0 + + + 2.83582089552 1.37341772152 + + + 2.80597014925 1.85074626866 3.10447761194 3.28358208955 + 1.56962025316 2.12658227848 1.36708860759 0.405063291139 + + + 158.0 + + + 18.0 100.0 0.285714285714 13.0 21.0 3.0 + + + 0.0 0.993670886076 + + + 0.317683733233 + + + 0.416666666667 0.3265625 0.0 0.0 0.174962292609 0.327941176471 + 0.0226244343891 0.130882352941 0.755656108597 0.772058823529 + 0.556561085973 0.0558823529412 0.277526395173 0.472058823529 + 0.674208144796 0.0970588235294 + + + 0.184210526316 0.70625 0.5 0.0 0.0 0.0 0.0 0.0 0.0789473684211 + 0.66875 0.7125 0.09375 0.0 0.0 0.0 0.0 0.0526315789474 + 0.588888888889 0.8 0.438888888889 0.0877192982456 0.0 + 0.277777777778 0.216666666667 0.0 0.00625 0.0 0.0 0.0 0.0 0.0 0.0 + 0.802631578947 0.96875 0.9375 0.81875 0.407894736842 0.3125 0.1375 + 0.0 0.321637426901 0.938888888889 0.888888888889 0.466666666667 + 0.859649122807 0.611111111111 0.0888888888889 0.0 0.0592105263158 + 0.8 0.90625 0.45625 0.677631578947 0.925 0.08125 0.0 0.0 + 0.261111111111 0.433333333333 0.138888888889 0.415204678363 + 0.694444444444 0.294444444444 0.0 + + + 0.685622125442 0.0862592605775 0.0682520557244 0.0305905327528 + 0.598909559685 0.258276436796 0.0195855131524 0.172779947988 + 0.0973370815806 0.009347104574 0.271486663663 0.364510273116 + 0.0688758241234 0.0122880613492 + + + + + + + + + 41 1 76 4 75 4 73 6 77 1 77 2 76 3 75 4 52 2 1 3 8 1 7 5 49 7 3 20 38 + 1 4 36 37 42 37 42 37 21 1 20 37 42 38 41 37 41 38 41 38 42 38 41 38 + 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 5 1 + 35 38 4 5 32 41 1 6 31 39 4 3 33 39 40 34 1 4 40 34 1 4 40 34 1 4 40 + 34 1 4 40 34 1 4 4 1 35 34 2 3 5 2 33 33 2 4 6 3 31 33 2 4 40 33 1 6 + 39 25 1 6 2 6 39 18 16 6 73 7 72 7 72 7 72 6 74 6 72 7 6 2 2 11 2 11 + 38 7 4 31 37 8 1 33 37 8 1 32 38 8 1 33 37 42 37 43 34 44 36 42 40 38 + 42 37 42 37 42 37 42 38 39 42 36 43 37 42 38 41 37 42 38 41 38 41 38 + 41 37 42 37 42 38 41 38 41 37 42 37 42 37 42 37 43 37 41 38 41 38 41 + 38 41 39 40 33 1 4 41 18 1 10 5 1 45 12 2 3 5 1 56 9 29 0 + + + + 7110.0 + + + 0.877777777778 + + + 3366.0 + + + 0.137254901961 + + + 1.5078229772 + + + 0.501919648978 0.531594864708 0.135474712767 0.148714475139 + 0.0970398102825 -0.000439620897074 0.00241867238275 + 0.000975483238394 0.000984945759765 + + + 79.0 + + + 0.506329113924 0.411111111111 + + + 0.759493670886 0.253164556962 0.303797468354 0.506329113924 + 0.266666666667 0.711111111111 0.355555555556 0.222222222222 + + + 90.0 + + + 6.0 34.0 0.222614840989 4.0 2.0 4.0 + + + 0.0 0.988888888889 + + + 0.473417721519 + + + 0.547846889952 0.864988558352 0.294258373206 0.0 0.6 1.0 0.35 0.0 + 0.140909090909 0.15 0.956818181818 0.915217391304 0.0 + 0.0326086956522 0.877272727273 0.834782608696 + + + 0.040404040404 0.959595959596 0.838383838384 0.648148148148 + 0.494949494949 0.010101010101 0.0 0.0 0.181818181818 1.0 + 0.990909090909 0.966666666667 0.663636363636 0.0 0.0 0.0 + 0.172727272727 0.990909090909 1.0 1.0 0.654545454545 0.0 0.0 0.0 + 0.236363636364 1.0 1.0 1.0 0.654545454545 0.0909090909091 0.0 0.0 + 0.281818181818 0.281818181818 0.3 0.3 0.936363636364 0.981818181818 + 0.9 0.875 0.0 0.0 0.0 0.0 0.909090909091 1.0 1.0 0.891666666667 0.0 + 0.0 0.0 0.00833333333333 0.990909090909 1.0 1.0 0.841666666667 0.0 + 0.0 0.0 0.116666666667 0.709090909091 0.809090909091 0.854545454545 + 0.658333333333 + + + 0.343632662206 0.209219831793 0.0127181862567 0.0120786609596 + 0.0487231358083 0.340637342386 0.081601150933 0.019236238345 + 0.0167171095009 0.0149488662281 0.0473684727515 0.175539176786 + 0.0686100124204 0.0610037893161 + + + + + + + + + 101 1 75 1 27 2 72 11 9 6 3 4 72 34 69 36 69 35 70 35 71 34 72 33 70 + 34 71 20 1 13 71 34 71 35 70 34 71 35 70 35 70 35 70 35 70 35 70 35 + 70 35 70 35 71 34 71 34 70 35 71 34 71 34 71 35 70 35 69 36 69 37 68 + 37 68 36 70 35 70 35 71 33 72 33 71 34 72 33 72 33 72 33 41 1 30 33 + 38 14 20 33 37 16 1 3 1 3 1 3 5 35 37 68 37 38 26 4 37 37 30 1 38 37 + 29 1 37 38 29 1 37 38 29 1 38 37 29 1 38 37 29 1 37 38 29 1 37 38 29 + 1 38 37 29 1 38 37 29 2 37 37 29 2 37 37 29 2 37 37 29 2 37 38 28 2 + 37 37 29 2 37 37 29 3 36 38 28 3 36 38 28 3 37 36 29 3 37 37 28 2 37 + 38 28 2 37 38 28 4 35 38 29 2 36 38 29 1 38 37 29 1 38 37 29 1 38 37 + 28 3 37 37 28 3 37 37 29 2 22 6 1 4 1 40 29 2 4 2 1 5 3 5 1 53 29 2 4 + 23 2 45 29 1 5 23 3 44 34 71 34 71 34 71 34 71 34 72 33 36 11 25 33 + 37 14 21 33 39 19 14 33 39 21 3 5 4 33 40 20 3 7 2 31 41 22 3 5 2 33 + 41 29 2 32 42 29 1 33 41 30 2 33 40 30 2 34 40 29 2 35 38 30 2 35 38 + 67 38 67 3 5 31 65 40 66 38 67 39 66 38 67 39 66 39 66 39 66 39 66 39 + 67 39 66 39 65 40 66 39 66 39 65 40 65 41 64 40 66 39 66 18 1 20 66 3 + 31 5 67 1 32 5 67 1 32 6 66 2 31 5 67 1 33 4 102 1 104 3 103 3 102 3 + 102 3 61 0 + + + + 13440.0 + + + 0.8203125 + + + 4799.0 + + + 0.143988330902 + + + 0.560626445556 + + + 0.507719957683 0.496238553636 0.164085615371 0.220133492869 + -0.154226880708 -0.00072440744405 0.00973187709392 + -0.00233112423946 -0.015385336727 + + + 105.0 + + + 0.542857142857 0.5625 + + + 0.380952380952 0.87619047619 0.571428571429 0.342857142857 0.125 + 0.78125 1.125 0.21875 + + + 128.0 + + + 3.0 29.0 0.203703703704 4.0 1.0 3.0 + + + 0.0 0.9921875 + + + 0.357068452381 + + + 0.0 0.0 0.581730769231 0.604567307692 0.0 0.455528846154 + 0.707932692308 0.477163461538 0.382211538462 0.638221153846 + 0.606971153846 0.0 0.827546296296 0.403935185185 0.0335648148148 + 0.0 + + + 0.0 0.0 0.0 0.0 0.182692307692 0.879807692308 0.735576923077 0.3125 + 0.0 0.0 0.0 0.0 0.264423076923 1.0 1.0 0.370192307692 0.0 0.0 + 0.139423076923 0.326923076923 0.456730769231 0.995192307692 1.0 + 0.394230769231 0.0 0.0 0.355769230769 1.0 1.0 0.379807692308 + 0.230769230769 0.283653846154 0.0 0.0 0.288461538462 1.0 1.0 + 0.432692307692 0.0 0.0 0.711538461538 0.817307692308 0.711538461538 + 0.552884615385 0.610576923077 0.384615384615 0.0 0.0 0.826923076923 + 1.0 0.8125 0.0 0.0 0.0 0.0 0.0 0.678571428571 0.816964285714 + 0.678571428571 0.125 0.129464285714 0.0 0.0 0.0 + + + 0.406515963227 0.223739751146 0.0490485276284 0.0255627913084 + 0.118796205964 0.377241551209 0.134547713945 0.0549344127418 + 0.0268769546099 0.0351289169167 0.223837545871 0.115730683245 + 0.274247488759 0.0759726135747 + + + + + + + + + 11 1 11 1 10 2 10 1 8 5 7 5 6 6 6 6 6 5 7 5 6 6 6 6 6 6 7 6 5 7 5 7 5 + 7 5 7 5 6 6 6 6 6 6 5 6 6 7 5 7 5 8 3 9 2 11 1 9 4 7 5 8 4 7 5 8 3 9 + 3 8 3 46 2 10 1 82 2 11 3 21 2 11 1 56 1 10 2 10 3 9 4 8 3 9 3 9 3 9 + 3 9 3 9 3 9 3 8 4 8 4 8 4 8 4 9 3 8 4 8 6 6 6 6 6 6 7 5 6 6 6 6 6 6 5 + 8 4 7 5 7 5 6 6 6 6 6 6 6 4 10 2 44 5 7 6 6 6 6 6 6 6 7 5 7 5 7 5 6 5 + 7 5 7 6 6 6 6 6 6 6 7 5 7 5 6 6 6 6 6 6 6 5 7 6 6 6 6 6 6 6 6 6 6 6 6 + 6 6 5 8 5 7 5 7 5 7 4 8 3 9 4 7 4 8 6 6 7 5 7 6 6 5 7 5 7 5 7 6 6 6 7 + 5 7 5 6 6 6 6 6 6 5 7 5 7 5 7 4 8 5 8 4 8 3 10 2 10 3 8 4 8 4 7 5 7 5 + 7 5 7 5 7 5 8 4 9 3 10 1 7 0 + + + + 1896.0 + + + 0.0759493670886 + + + 662.0 + + + 0.610271903323 + + + 0.867086066122 + + + 0.370502609173 0.540843227433 0.0103372175431 3.21766622801 + -0.119407497502 0.000690795504011 0.197453624469 -0.0121647013974 + -2.01712802761 + + + 12.0 + + + 3.83333333333 0.0 + + + 3.66666666667 7.66666666667 3.33333333333 0.666666666667 0.0 0.0 + 0.0 0.0 + + + 158.0 + + + 6.0 15.0 0.20979020979 4.0 3.0 1.0 + + + 0.0 0.993670886076 + + + 0.349156118143 + + + 0.0 0.291666666667 0.820512820513 0.625 0.222222222222 + 0.491666666667 0.854700854701 0.9 0.726495726496 0.1 0.0 + 0.116666666667 0.444444444444 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.473684210526 0.85 0.4 0.0 0.0 0.0 0.075 0.8 + 0.789473684211 1.0 1.0 0.675 0.0 0.0 0.2 1.0 0.842105263158 1.0 1.0 + 0.95 0.210526315789 0.45 0.2 0.675 0.710526315789 0.925 0.825 0.9 + 0.684210526316 0.8 0.15 0.35 0.0 0.0 0.55 0.05 0.789473684211 0.65 + 0.025 0.025 0.0 0.0 0.05 0.0 0.789473684211 0.3 0.0 0.0 0.0 0.0 0.0 + 0.0 0.763157894737 0.05 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.403703330753 0.274606020561 0.208222866599 0.0703667739223 + 0.31412110198 0.389403946599 0.244416609464 0.201411310448 + 0.107699422493 0.106177429967 0.492819636039 0.228983418173 + 0.410297502649 0.214908398745 + + + + + + + + + 39 2 139 4 137 5 708 1 106 8 1 27 101 1 2 38 101 41 101 41 101 41 101 + 41 101 41 101 41 101 41 101 41 101 21 1 19 102 40 102 40 102 40 102 + 40 102 40 102 40 102 16 1 1 2 20 19 1 82 16 4 20 18 3 81 16 4 20 17 5 + 80 17 1 1 1 15 22 7 77 4 5 20 29 8 77 5 2 22 28 8 77 5 2 29 21 9 76 3 + 6 27 2 2 17 9 76 3 5 32 17 9 76 40 16 11 75 40 16 11 75 40 16 10 76 + 40 16 10 76 40 16 12 74 40 15 13 74 36 19 14 73 6 3 27 20 11 7 3 65 8 + 1 9 1 21 18 10 6 4 64 8 2 7 3 20 12 2 4 21 63 18 1 21 12 2 5 21 62 18 + 2 20 12 2 2 28 58 40 12 3 1 30 56 40 12 36 55 38 13 36 55 38 13 38 53 + 38 13 39 52 2 12 4 15 5 12 41 51 1 49 42 50 2 48 42 50 2 48 42 100 42 + 18 1 82 41 16 4 80 42 16 5 79 42 16 5 78 42 17 4 78 43 16 6 77 8 1 35 + 15 9 75 6 3 34 12 17 70 5 6 31 13 13 1 2 71 5 6 1 2 1 2 25 13 13 74 4 + 15 22 14 13 75 4 15 21 13 14 76 2 1 2 4 3 6 20 14 15 1 4 69 2 8 4 5 + 20 14 15 1 4 68 4 9 2 6 15 1 3 14 15 5 2 66 3 6 1 12 13 2 3 15 11 8 3 + 66 1 7 1 13 12 2 3 14 12 5 7 71 4 13 11 2 3 14 25 88 10 3 2 15 25 88 + 9 3 2 12 29 87 2 1 11 12 29 87 2 4 7 13 31 91 3 2 2 12 33 89 8 12 34 + 88 8 12 35 87 8 12 36 86 7 12 37 89 1 15 38 88 1 15 5 4 31 81 6 15 5 + 5 30 80 7 25 30 80 4 30 1 2 15 9 2 80 2 27 2 1 18 93 1 27 6 1 14 123 + 4 2 13 124 2 3 14 6 1 116 1 4 15 4 3 119 17 3 4 118 17 2 1 1 4 115 19 + 2 5 116 25 117 25 122 9 3 9 122 8 6 5 124 7 8 3 124 7 9 2 125 1 1 3 + 11 1 127 3 137 5 3 2 130 7 2 4 4 1 124 6 3 5 3 1 122 8 3 9 116 4 3 18 + 116 4 3 9 1 9 118 2 5 17 119 23 120 22 121 20 123 19 124 18 125 17 + 126 16 127 15 128 4 3 7 138 2 137 5 133 10 133 9 133 9 134 8 135 7 + 136 5 140 1 9 0 + + + + 18176.0 + + + 1.109375 + + + 4200.0 + + + 0.253571428571 + + + 1.98066037736 + + + 0.472266126309 0.432827146607 0.448037434186 0.193484352392 + 0.256840285606 0.032153998718 0.0378620346918 0.0412825059871 + 0.0326794056969 + + + 142.0 + + + 1.07746478873 1.2578125 + + + 0.845070422535 1.01408450704 0.422535211268 2.02816901408 0.59375 + 1.6875 2.21875 0.53125 + + + 128.0 + + + 14.0 79.0 0.262955854127 23.0 1.0 7.0 + + + 0.0 0.9921875 + + + 0.231073943662 + + + 0.701785714286 0.5625 0.0 0.0 0.152777777778 0.521701388889 + 0.0416666666667 0.0 0.0 0.382142857143 0.286607142857 0.0 0.0 + 0.0572916666667 0.636284722222 0.356770833333 + + + 0.470588235294 0.922794117647 0.878676470588 0.194852941176 0.0 0.0 + 0.0 0.0 0.5 0.913194444444 0.975694444444 0.197916666667 0.0 0.0 + 0.0 0.0 0.208333333333 0.260416666667 0.298611111111 0.135416666667 + 0.0381944444444 0.0 0.0 0.0 0.0 0.142361111111 0.6875 + 0.965277777778 0.128472222222 0.0 0.0 0.0 0.0 0.0 0.268382352941 + 1.0 0.6875 0.125 0.0 0.0 0.0 0.0 0.00347222222222 0.284722222222 + 0.253472222222 0.09375 0.0 0.0 0.0 0.0 0.0 0.229166666667 + 0.885416666667 0.677083333333 0.298611111111 0.121527777778 0.0 0.0 + 0.0 0.0 0.302083333333 0.680555555556 0.53125 0.475694444444 + + + 0.422076577771 0.238090904492 0.111575135707 0.0446393982908 + 0.146976056677 0.447033725683 0.146411606302 0.0663618136836 + 0.0497991992073 0.0613152095174 0.17569556523 0.281234605695 + 0.334472735387 0.0873079738332 + + + + + + + + + 37 2 36 2 37 1 38 1 37 2 37 2 114 1 37 2 37 2 36 3 36 2 36 3 36 2 37 + 2 37 2 36 2 37 2 36 3 36 2 36 3 36 3 36 2 35 4 34 6 35 3 20 3 13 2 20 + 5 11 3 20 5 11 3 19 7 9 5 18 7 9 4 18 8 8 4 17 11 7 4 17 11 6 4 16 14 + 5 4 15 1 1 15 2 3 19 14 2 1 1 3 18 14 3 3 18 15 3 4 16 16 3 4 17 21 + 18 20 17 21 18 21 18 21 19 20 19 9 4 6 19 11 2 7 19 10 4 6 34 3 21 5 + 33 6 33 6 33 7 32 4 1 1 34 2 37 4 35 4 34 2 1 2 35 4 35 4 35 4 35 3 + 34 6 34 6 33 6 2 3 3 1 24 11 2 3 24 14 25 5 2 4 1 2 25 5 3 2 29 13 27 + 13 26 12 27 11 29 10 29 10 30 8 31 8 31 9 30 8 33 5 32 7 33 6 34 5 35 + 3 28 0 + + + + 3354.0 + + + 0.453488372093 + + + 686.0 + + + 0.540816326531 + + + 0.677056277056 + + + 0.3334739911 0.571239924541 0.105260568776 0.51473322137 + -0.150260598142 0.0315809470973 0.0705472395171 -0.0583643222457 + 0.0304034100756 + + + 39.0 + + + 1.23076923077 0.313953488372 + + + 2.35897435897 1.64102564103 0.717948717949 0.205128205128 0.0 + 0.744186046512 0.232558139535 0.279069767442 + + + 86.0 + + + 6.0 21.0 0.30534351145 8.0 2.0 1.0 + + + 0.0 0.988372093023 + + + 0.204531902206 + + + 0.0 0.232323232323 0.555555555556 0.535353535354 0.0 0.586363636364 + 0.295238095238 0.409090909091 0.0 0.336363636364 0.12380952381 0.0 + 0.180952380952 0.0454545454545 0.0 0.0 + + + 0.0 0.0 0.0 0.0454545454545 0.425 0.568181818182 0.545454545455 0.0 + 0.0 0.0 0.0 0.8 0.82 0.4 0.8 0.690909090909 0.0 0.0 0.381818181818 + 1.0 0.6 0.0 0.672727272727 0.745454545455 0.0 0.0 0.109090909091 + 0.854545454545 0.64 0.0 0.218181818182 0.0 0.0 0.0 0.0 + 0.418181818182 0.52 0.0 0.0 0.0 0.0 0.0 0.509090909091 + 0.418181818182 0.0 0.0 0.0 0.0 0.02 0.418181818182 0.181818181818 + 0.0 0.0 0.0 0.0 0.0 0.24 0.0363636363636 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.689423667461 0.108755372058 0.0429438448677 0.0369364629588 + 0.685514115809 0.288995818003 0.0499759077291 0.147254084071 + 0.115874962594 0.0426323671765 0.488392893598 0.415287677631 + 0.120728966279 0.0331419359975 + + + + + + + + + 9 1 8 2 7 3 7 3 7 3 6 4 7 2 8 2 8 2 7 3 8 2 8 1 9 2 7 3 7 3 7 3 7 2 8 + 2 8 2 8 2 8 2 8 2 8 2 7 4 7 2 8 2 8 2 7 3 7 4 5 4 7 3 7 3 7 2 8 2 8 3 + 7 3 7 3 7 3 7 2 8 1 9 1 494 3 7 2 19 1 9 1 9 1 9 1 8 2 8 2 9 1 8 0 + + + + 1000.0 + + + 0.1 + + + 114.0 + + + 1.24561403509 + + + 0.778985507246 + + + 0.66081871345 0.29496721602 0.0427580956084 6.22763616875 + -0.481208792989 -0.0119937449944 -1.96318067419 0.154415088203 + 24.6663773642 + + + 10.0 + + + 0.9 0.0 + + + 0.8 0.0 1.2 1.6 0.0 0.0 0.0 0.0 + + + 100.0 + + + 1.0 3.0 0.176470588235 3.0 4.0 1.0 + + + 0.0 0.99 + + + 0.114 + + + 0.0 0.0 0.0 0.26 0.0 0.0133333333333 0.0 0.0133333333333 0.3 0.56 + 0.0 0.0 0.586666666667 0.16 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.307692307692 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.692307692308 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0769230769231 0.0 + 0.0 0.0416666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0769230769231 + 0.833333333333 0.307692307692 0.0 0.0 0.0 0.0 0.166666666667 + 0.923076923077 1.0 0.153846153846 0.0 0.0 0.0 0.0 0.833333333333 + 1.0 0.833333333333 0.0769230769231 0.0 0.0 0.0 0.0 0.666666666667 + 0.192307692308 0.0416666666667 0.0 0.0 0.0 0.0 0.0 + + + 0.681596176003 0.136425158273 0.327953818515 0.109350037333 + 1.12502665587 0.0822009093089 0.149876988458 0.385129061094 + 0.135027571454 0.158152614743 1.176671483 0.354339101764 + 0.00798701184416 0.176048650439 + + + + + + + + + 11 1 12 1 12 1 11 2 11 2 11 2 11 2 11 2 11 2 11 2 10 3 10 4 9 3 10 3 + 10 3 11 2 74 4 9 4 9 4 9 4 9 4 8 5 9 4 8 5 8 5 8 5 8 4 9 4 9 4 9 4 9 + 4 10 3 9 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 9 4 + 9 4 10 3 9 4 9 4 10 3 10 3 9 4 9 4 10 2 10 3 10 3 10 3 10 3 10 3 10 3 + 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 2 11 2 11 2 11 2 10 4 10 3 10 3 + 10 3 9 4 10 2 10 5 8 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 9 4 9 + 4 10 3 10 3 9 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 + 3 10 3 10 3 10 3 10 3 10 3 9 4 9 4 9 3 10 3 10 3 10 3 10 3 10 3 9 4 9 + 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 3 9 4 9 5 8 4 9 4 9 4 9 4 9 3 9 5 9 4 + 10 3 9 4 9 4 8 4 9 4 9 3 10 3 10 3 10 3 10 4 9 4 9 4 9 4 9 3 10 3 10 + 3 10 2 11 2 11 2 11 3 10 2 11 0 + + + + 2093.0 + + + 0.0807453416149 + + + 505.0 + + + 0.748514851485 + + + 0.852878464819 + + + 0.484323432343 0.525754950495 0.0171243160979 3.99733215051 + -0.244131064611 -0.000342877292427 -0.00245310637236 + 0.00266707732972 -0.535170686595 + + + 13.0 + + + 1.53846153846 0.0 + + + 0.923076923077 1.84615384615 2.15384615385 1.23076923077 0.0 0.0 + 0.0 0.0 + + + 161.0 + + + 2.0 9.0 0.163522012579 3.0 10.0 1.0 + + + 0.0 0.993788819876 + + + 0.241280458672 + + + 0.0 0.0 0.0 0.682926829268 0.0 0.00833333333333 0.6 0.50406504065 + 0.258333333333 0.858333333333 0.441666666667 0.0 0.5 0.1125 0.00625 + 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.05 0.857142857143 0.0 0.0 0.0 0.0 0.0 0.0 + 0.7 0.880952380952 0.0 0.0 0.0 0.0 0.0 0.35 1.0 0.428571428571 0.0 + 0.0 0.0 0.025 0.625 1.0 0.75 0.0714285714286 0.0 0.3 0.675 1.0 0.9 + 0.375 0.0 0.0 0.0 0.95 1.0 0.8 0.1 0.0 0.0 0.0 0.45 0.875 0.45 0.0 + 0.025 0.0 0.0 0.0 0.425 0.25 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.420585290736 0.266878535013 0.0374239456852 0.0127254549331 + 0.239019575999 0.455497348302 0.219311845961 0.0218321174205 + 0.0476473775096 0.0247949333274 0.287500785291 0.353369568641 + 0.429018701428 0.183928996238 + + + + + + + + + 36 3 40 3 33 1 42 1 34 1 42 2 33 2 41 2 31 4 40 2 33 2 42 1 33 2 42 1 + 33 2 41 3 18 3 9 4 41 3 12 22 41 37 41 37 41 37 41 38 40 38 40 38 40 + 38 39 39 39 39 40 38 40 38 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 35 47 34 45 34 47 31 46 31 46 33 39 1 1 37 39 6 2 31 39 39 + 40 1 1 36 43 3 1 31 48 30 43 35 39 1 4 34 39 39 39 39 39 39 39 39 39 + 39 39 38 40 36 42 34 44 2 1 14 65 5 2 1 71 3 498 1 75 3 76 3 74 5 73 + 5 74 1 568 12 1 2 55 5 1 17 49 29 46 33 40 38 39 39 40 38 40 38 40 38 + 40 38 40 38 40 3 1 34 40 38 40 38 40 38 40 38 39 39 39 39 39 39 39 39 + 39 39 39 37 42 38 40 39 39 39 39 3 1 34 40 38 40 38 40 38 40 38 40 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 27 5 7 39 19 16 4 39 10 3 4 21 1 39 6 73 3 34 1 40 2 33 3 39 4 74 5 + 32 3 38 3 34 3 38 3 36 1 38 4 36 0 + + + + 9672.0 + + + 0.629032258065 + + + 3294.0 + + + 0.163023679417 + + + 1.8121516165 + + + 0.498308613063 0.505740913511 0.141296591991 0.364951513112 + 0.178096892216 -0.00059340883333 -0.00527837338276 + -0.00219217282851 -0.00667285976953 + + + 78.0 + + + 0.730769230769 0.241935483871 + + + 1.28205128205 0.512820512821 0.358974358974 0.410256410256 + 0.322580645161 0.225806451613 0.0967741935484 0.322580645161 + + + 124.0 + + + 5.0 28.0 0.209677419355 6.0 1.0 0.0 + + + 0.0 0.991935483871 + + + 0.340570719603 + + + 0.691001697793 0.597623089983 0.0 0.0 0.733870967742 0.638709677419 + 0.0516129032258 0.0467741935484 0.0 0.00169779286927 0.640067911715 + 0.769100169779 0.0 0.0 0.625806451613 0.651612903226 + + + 0.42962962963 0.944444444444 0.607407407407 0.423611111111 0.0 0.0 + 0.0 0.0 0.353333333333 1.0 1.0 0.36875 0.0 0.0 0.0 0.0 0.42 1.0 1.0 + 0.3125 0.0 0.0 0.0 0.0 0.513333333333 0.96875 0.993333333333 + 0.29375 0.0666666666667 0.1375 0.1 0.0875 0.0 0.0 0.0 + 0.00694444444444 0.214814814815 0.993055555556 0.992592592593 + 0.666666666667 0.0 0.0 0.0 0.0 0.3 1.0 1.0 0.45625 0.0 0.0 0.0 0.0 + 0.386666666667 1.0 1.0 0.35625 0.0 0.0 0.0 0.0 0.293333333333 + 0.7875 0.86 0.425 + + + 0.347836549831 0.252185628416 0.0202085134752 0.00965580080957 + 0.167776245291 0.530494652857 0.115001106616 0.0338258532594 + 0.00751491520967 0.0111932493126 0.292845500664 0.376202704075 + 0.269986271354 0.0502252538842 + + + + + + + + + 3 1 114 2 113 2 113 2 114 1 113 2 113 2 113 3 114 1 112 3 21 2 30 2 7 + 4 2 5 39 3 16 10 15 1 3 1 2 25 4 1 33 5 4 5 1 18 12 33 2 2 33 34 10 + 38 33 34 10 38 33 34 10 37 34 34 10 4 1 32 33 35 10 4 1 32 33 35 10 + 37 33 35 10 4 1 33 32 35 10 38 32 35 10 38 32 35 10 4 1 32 33 35 10 + 37 33 35 10 37 33 35 10 37 33 35 10 37 34 34 10 37 33 35 9 38 33 36 8 + 39 32 37 6 40 31 37 10 38 30 37 9 39 31 36 8 40 31 16 1 19 8 16 1 23 + 31 38 6 40 31 23 1 5 1 7 7 39 32 22 1 9 1 2 9 38 34 21 2 5 1 2 12 4 4 + 1 3 26 34 20 3 3 18 2 6 15 1 1 1 11 34 7 2 9 6 2 18 3 6 8 1 19 34 7 2 + 18 18 2 1 2 1 29 35 7 2 17 19 2 1 32 35 8 1 19 2 1 13 3 1 12 3 17 35 + 32 12 3 1 13 1 18 35 32 12 36 35 8 2 19 1 4 11 1 1 33 35 7 3 19 3 2 + 11 36 18 3 13 7 4 4 3 11 3 3 12 35 2 1 7 16 1 2 4 7 2 6 4 10 17 14 3 + 48 5 15 3 5 20 16 2 4 2 1 9 33 4 16 3 2 23 3 6 1 25 32 4 12 1 3 28 1 + 34 32 4 2 77 32 83 32 83 31 84 24 1 6 84 30 85 32 83 32 83 32 83 32 + 82 33 82 33 82 33 82 33 82 33 82 33 82 33 82 33 84 1 3 27 82 33 82 32 + 83 32 83 32 83 32 84 31 83 33 82 33 82 33 82 33 40 2 40 33 40 2 40 33 + 40 2 40 33 40 2 40 33 41 1 40 33 41 1 40 33 41 1 40 33 41 1 40 8 6 4 + 3 5 2 5 40 3 39 3 28 2 40 3 39 1 30 2 40 4 38 2 29 3 39 4 40 1 27 4 + 39 3 70 2 40 4 68 5 39 3 68 4 40 3 67 6 39 3 112 3 113 2 113 2 113 2 + 113 2 113 2 113 2 113 2 113 2 113 2 114 2 113 1 73 0 + + + + 12535.0 + + + 1.05504587156 + + + 4157.0 + + + 0.191484243445 + + + 1.45212383009 + + + 0.52145187361 0.393261255 0.268111279202 0.121602726894 + 0.105709945085 -0.0276500006631 0.0184919904751 0.0142919640601 + 0.022472440932 + + + 115.0 + + + 0.747826086957 1.24770642202 + + + 0.695652173913 1.18260869565 0.730434782609 0.278260869565 + 1.17431192661 2.89908256881 0.110091743119 0.807339449541 + + + 109.0 + + + 16.0 96.0 0.202404809619 9.0 6.0 10.0 + + + 0.0 0.990825688073 + + + 0.33163143199 + + + 0.595238095238 0.793650793651 0.0 0.0 0.393358876117 0.464878671775 + 0.00255427841635 0.0788177339901 0.579821200511 0.77650063857 + 0.190293742018 0.0603448275862 0.0 0.234993614304 0.918263090677 + 0.253694581281 + + + 0.230769230769 0.908163265306 0.912087912088 0.658163265306 0.0 0.0 + 0.0 0.0 0.186813186813 1.0 0.923076923077 0.698979591837 0.0 0.0 + 0.0 0.0 0.102564102564 0.533333333333 0.482051282051 0.17619047619 + 0.0 0.0102564102564 0.161904761905 0.142857142857 0.142857142857 + 0.765306122449 0.730769230769 0.510204081633 0.0 0.0 0.0 0.0 + 0.258241758242 1.0 0.983516483516 0.658163265306 0.0 0.0 0.0 0.0 + 0.2 0.819047619048 0.861538461538 0.628571428571 0.366666666667 + 0.369230769231 0.233333333333 0.0 0.0 0.0 0.0 0.464285714286 1.0 + 1.0 0.459183673469 0.0 0.0 0.0 0.0 0.442857142857 0.842857142857 + 0.841025641026 0.52380952381 0.0285714285714 + + + 0.426090048618 0.17452432773 0.0866755148186 0.0652702403213 + 0.0587371924867 0.32757364356 0.0952663220559 0.234338336571 + 0.147479977966 0.0597765792043 6.82474324581e-05 0.113821631677 + 0.238435185737 0.0359546959846 + + + + + + + + + 12 1 48 1 48 2 47 2 47 2 47 3 41 1 3 5 40 12 37 19 29 20 3 2 24 20 3 + 3 13 2 8 20 4 6 8 3 8 20 3 18 8 20 3 18 8 20 3 18 9 19 3 18 9 19 2 19 + 8 20 2 19 8 20 2 19 8 20 2 19 8 19 3 19 8 19 3 19 8 19 3 19 8 19 3 19 + 8 19 3 19 8 18 4 19 8 19 3 19 8 20 1 20 7 42 8 42 6 44 5 44 6 42 7 42 + 7 42 7 41 8 20 1 20 8 41 9 40 9 40 9 40 8 18 3 19 9 18 3 19 10 19 1 + 19 10 39 10 39 10 39 10 39 10 39 10 38 12 37 12 1 4 12 1 19 17 1 7 3 + 3 18 36 14 39 10 42 7 42 7 42 7 42 6 43 7 42 7 43 1 2 3 43 1 3 2 43 1 + 3 1 44 1 48 1 47 2 48 1 48 1 48 1 48 1 48 1 48 1 48 1 48 1 10 1 47 2 + 36 1 11 8 6 1 22 2 10 19 19 1 10 18 5 4 10 2 10 19 3 10 5 2 10 20 1 + 13 1 5 9 19 2 19 9 17 1 1 2 19 9 17 1 1 2 19 9 19 2 19 9 19 1 19 10 + 40 8 40 9 41 8 41 8 42 6 44 7 42 7 41 9 39 10 38 11 38 11 39 10 39 10 + 39 10 38 11 38 11 38 11 30 1 7 10 26 3 1 2 7 11 38 11 38 11 38 11 38 + 11 38 11 6 5 27 11 4 6 28 11 5 5 16 1 11 12 37 12 37 12 37 12 7 1 29 + 12 37 13 36 13 3 6 27 13 2 11 23 13 2 12 1 2 19 13 2 24 10 13 2 29 5 + 13 2 32 2 14 1 33 1 48 1 48 1 8 0 + + + + 6321.0 + + + 0.37984496124 + + + 3472.0 + + + 0.171370967742 + + + 0.935619047619 + + + 0.501740111367 0.50347422235 0.0415877860317 0.387762019003 + -0.0150642237251 0.000124441398169 -0.00315358016595 + -0.00129342910978 0.00848177710012 + + + 49.0 + + + 1.5306122449 0.511627906977 + + + 1.4693877551 1.38775510204 2.04081632653 1.22448979592 + 0.682170542636 0.341085271318 0.527131782946 0.496124031008 + + + 129.0 + + + 8.0 52.0 0.178666666667 6.0 4.0 1.0 + + + 0.0 0.992248062016 + + + 0.549280177187 + + + 0.393229166667 0.268229166667 0.510416666667 0.532828282828 + 0.807291666667 0.6328125 0.5078125 0.765151515152 0.5625 + 0.635416666667 0.505208333333 0.813131313131 0.552884615385 + 0.692307692308 0.271634615385 0.356643356643 + + + 0.0 0.03125 0.0 0.0 0.15625 0.71875 0.510416666667 0.225490196078 + 0.552083333333 0.989583333333 0.916666666667 0.15625 0.166666666667 + 1.0 0.96875 0.450980392157 0.71875 1.0 1.0 0.25 0.135416666667 1.0 + 0.979166666667 0.490196078431 0.510416666667 1.0 1.0 0.28125 + 0.0520833333333 0.84375 1.0 0.617647058824 0.229166666667 + 0.677083333333 0.916666666667 0.270833333333 0.0416666666667 1.0 + 0.979166666667 0.637254901961 0.34375 1.0 1.0 0.354166666667 0.0 + 0.979166666667 0.958333333333 0.696078431373 0.25 1.0 1.0 0.65625 + 0.1875 0.927083333333 0.864583333333 0.686274509804 0.223214285714 + 0.758928571429 0.678571428571 0.473214285714 0.0 0.0535714285714 + 0.0 0.0 + + + 0.305743969309 0.262700580322 0.0209888703044 0.0140300202595 + 0.128604705397 0.445048675386 0.132029177598 0.0301208718718 + 0.0120512312436 0.0186794992823 0.164599736416 0.210468503365 + 0.247099809518 0.0471680769659 + + + + + + + + + 35 1 38 1 38 1 5 1 32 1 4 12 21 2 4 26 7 2 4 35 4 36 3 36 3 35 4 36 3 + 36 3 36 3 36 3 36 4 35 4 35 3 36 3 36 3 116 1 9 1 28 1 37 3 36 3 36 3 + 36 3 5 1 1 2 27 4 4 1 2 1 27 4 3 8 24 4 3 9 23 4 3 5 27 4 3 5 27 4 35 + 4 4 1 30 4 35 4 35 5 34 5 34 5 34 5 34 5 7 2 17 1 7 5 7 2 17 2 6 5 34 + 6 33 6 34 5 34 5 34 5 4 2 28 21 2 8 8 35 4 38 1 + + + + 2028.0 + + + 0.75 + + + 1540.0 + + + 0.153246753247 + + + 1.10505687793 + + + 0.522983595352 0.511522790935 0.0698955593024 0.109129349631 + 0.0121289821875 -0.000924621594417 0.000217795000384 + -0.00111478107563 0.00207694755204 + + + 39.0 + + + 0.487179487179 0.365384615385 + + + 0.512820512821 1.02564102564 0.0 0.307692307692 0.230769230769 + 0.0769230769231 0.692307692308 0.461538461538 + + + 52.0 + + + 4.0 26.0 0.159340659341 2.0 3.0 3.0 + + + 0.0 0.980769230769 + + + 0.759368836292 + + + 0.623931623932 0.871794871795 0.538461538462 0.384615384615 + 0.646153846154 0.992307692308 0.861538461538 0.723076923077 0.6 1.0 + 1.0 0.784615384615 0.476923076923 0.884615384615 0.9 0.8 + + + 0.291666666667 0.75 0.666666666667 0.75 0.333333333333 + 0.178571428571 0.0 0.0 0.333333333333 1.0 1.0 1.0 0.633333333333 + 0.885714285714 0.966666666667 0.457142857143 0.3 1.0 1.0 + 0.971428571429 0.5 0.942857142857 0.866666666667 0.514285714286 + 0.166666666667 1.0 1.0 1.0 0.966666666667 1.0 1.0 0.571428571429 + 0.166666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.628571428571 0.1 1.0 1.0 + 1.0 1.0 1.0 1.0 0.571428571429 0.0 1.0 1.0 1.0 1.0 1.0 0.9 + 0.657142857143 0.266666666667 0.542857142857 0.6 0.914285714286 0.8 + 0.8 0.8 0.857142857143 + + + 0.411134269457 0.070056954667 0.0091469419488 0.0144196159339 + 0.0104059049465 0.0993956265638 0.0667286685438 0.0325617454827 + 0.0337446724936 0.00548558903884 0.158229766464 0.0174817806682 + 0.103862006274 0.0531334767537 + + + + + + + + + 74 1 78 4 77 2 77 4 76 4 76 4 75 5 75 5 76 3 76 4 75 5 47 33 42 38 42 + 38 42 38 42 38 42 39 41 39 41 38 42 38 42 39 41 39 41 39 41 39 41 39 + 41 39 41 39 41 39 41 39 41 39 41 39 41 39 41 4 1 27 48 34 46 39 41 39 + 41 39 41 39 41 39 41 39 42 38 41 39 41 39 41 39 41 39 41 39 7 2 1 2 + 28 18 1 21 6 10 18 1 4 18 2 21 7 50 3 20 7 50 1 1 1 20 7 73 6 74 6 74 + 6 74 7 44 12 1 6 5 1 4 7 39 32 3 5 39 33 2 6 39 33 2 6 39 33 2 6 38 + 34 2 6 39 33 2 6 39 33 3 5 39 33 3 4 40 32 4 2 44 30 5 2 43 30 5 3 42 + 30 5 3 42 30 5 4 4 3 33 31 6 3 40 31 5 4 39 33 3 6 38 33 3 6 38 34 2 + 5 40 33 1 7 39 33 2 6 39 33 2 6 39 33 2 6 39 33 2 6 39 33 1 7 39 33 1 + 7 40 40 40 40 40 40 39 41 39 41 39 41 40 40 40 40 40 40 40 40 4 8 28 + 40 3 28 9 40 2 33 5 40 2 34 4 40 2 35 3 40 2 36 2 41 1 36 2 78 2 78 2 + 36 0 + + + + 7920.0 + + + 0.808080808081 + + + 3494.0 + + + 0.140812821981 + + + 0.740049627792 + + + 0.513687116431 0.520895879817 0.129370229237 0.149151675014 + -0.0880906702869 -0.000540708040265 0.00380544744068 + 0.00150220432545 -0.00347520863697 + + + 80.0 + + + 0.4 0.464646464646 + + + 0.3 0.05 0.5 0.75 0.0 0.282828282828 0.969696969697 0.525252525253 + + + 99.0 + + + 4.0 24.0 0.212927756654 2.0 2.0 2.0 + + + 0.0 0.989898989899 + + + 0.441161616162 + + + 0.0 0.06 0.848 0.552 0.05 0.142 1.0 0.692 0.535416666667 0.986 0.31 + 0.164 0.53125 0.826 0.316 0.02 + + + 0.0 0.0 0.0 0.141666666667 0.666666666667 0.723076923077 0.6 + 0.307692307692 0.0 0.0 0.0 0.108333333333 1.0 1.0 1.0 + 0.338461538462 0.0 0.0 0.0 0.0833333333333 1.0 1.0 1.0 + 0.384615384615 0.0 0.2 0.2 0.291666666667 1.0 1.0 1.0 + 0.430769230769 0.0583333333333 1.0 0.992307692308 1.0 + 0.583333333333 0.284615384615 0.325 0.330769230769 0.0833333333333 + 1.0 1.0 0.95 0.4 0.0 0.0 0.0 0.0833333333333 1.0 1.0 1.0 0.45 0.0 + 0.0 0.0 0.391666666667 0.65 0.607692307692 0.7 0.45 0.384615384615 + 0.0833333333333 0.0 + + + 0.470269121688 0.154251211573 0.0126720594536 0.015919348487 + 0.0740652697603 0.34492348724 0.0593859764802 0.0192123330423 + 0.0318937965971 0.0197304821353 0.155302626938 0.304369456778 + 0.0969807556607 0.0403419670548 + + + + + + + + + 0 1 2 1 1 1 2 1 1 9 1 4 1 5 3 2 + + + + 35.0 + + + 0.714285714286 + + + 24.0 + + + 1.41666666667 + + + 1.0 + + + 0.46875 0.534722222222 0.0809461805556 0.124927662037 + 0.0219184027778 -0.0012292632444 0.00562212588954 + -0.000225180354079 -0.00786408548043 + + + 5.0 + + + 0.2 0.285714285714 + + + 0.0 0.0 0.0 0.0 0.571428571429 0.571428571429 0.0 0.0 + + + 7.0 + + + 4.0 5.0 0.0 0.0 1.0 2.0 + + + 0.0 0.857142857143 + + + 0.685714285714 + + + 1.0 1.0 1.0 0.5 0.0 0.5 1.0 0.5 0.0 0.5 1.0 0.5 0.5 0.75 0.5 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 + + + 0.28503280304 0.10102929585 0.0781928315468 0.0551328935303 + 0.107583747819 0.0873482294667 0.153199780033 0.0795582378141 + 0.12542424085 0.037005647976 0.110131749303 0.00782552642393 + 0.147735796249 0.197840180724 + + + + + + + + + 1 2 59 3 59 3 59 4 58 4 58 4 58 5 57 5 57 6 57 3 59 3 59 3 59 3 59 3 + 59 22 40 31 31 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 + 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 31 31 + 32 3 1 26 31 4 1 26 31 31 31 31 31 31 31 31 31 31 31 31 31 19 1 11 31 + 17 3 11 31 31 31 18 1 12 32 30 32 30 25 1 6 30 24 2 6 30 24 2 6 31 23 + 2 6 56 6 56 6 2 14 40 6 2 22 32 6 2 24 30 6 2 24 30 6 2 24 19 1 10 6 + 2 24 17 3 10 6 2 24 18 2 10 6 2 24 30 5 3 24 30 4 5 23 30 5 4 23 31 5 + 2 24 32 30 33 4 2 22 34 3 3 23 32 4 3 22 34 3 3 23 17 3 12 5 2 23 18 + 3 10 6 2 24 17 3 9 7 2 24 16 3 11 6 2 24 4 1 12 2 11 32 4 1 3 4 18 32 + 4 3 1 4 18 32 9 2 7 1 11 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 + 30 32 30 32 9 3 6 1 11 32 30 32 30 32 30 33 30 31 31 31 31 31 11 5 15 + 31 6 11 2 6 6 31 5 21 5 32 4 21 5 31 5 21 5 31 4 22 4 32 4 21 3 35 3 + 22 2 35 3 22 3 34 3 22 3 34 3 22 3 35 2 24 1 61 3 57 5 57 5 57 5 58 4 + 58 4 58 4 58 4 58 4 58 3 2 0 + + + + 7316.0 + + + 0.525423728814 + + + 2801.0 + + + 0.18707604427 + + + 1.36007733204 + + + 0.495630951475 0.478177818056 0.106902619547 0.238994192274 + 0.115644651024 0.000185770366916 0.00177538025462 0.00168997473021 + 0.00891945219504 + + + 62.0 + + + 0.758064516129 0.5 + + + 0.645161290323 0.387096774194 0.645161290323 1.16129032258 0.0 + 0.372881355932 1.08474576271 0.508474576271 + + + 118.0 + + + 6.0 47.0 0.181058495822 5.0 8.0 3.0 + + + 0.0 0.991525423729 + + + 0.382859486058 + + + 0.6 0.786666666667 0.0988505747126 0.0 0.5 0.927083333333 + 0.0991379310345 0.0270833333333 0.0620689655172 0.28 0.965517241379 + 0.364444444444 0.0 0.15 0.831896551724 0.441666666667 + + + 0.520408163265 0.857142857143 0.752380952381 0.561904761905 + 0.357142857143 0.0761904761905 0.0 0.0 0.0 1.0 1.0 0.8 0.0 0.0 0.0 + 0.0 0.0 1.0 1.0 0.791666666667 0.0 0.0 0.0 0.0 0.0 0.933333333333 + 1.0 0.916666666667 0.267857142857 0.133333333333 0.108333333333 0.0 + 0.0 0.257142857143 0.285714285714 0.533333333333 1.0 0.952380952381 + 0.819047619048 0.133333333333 0.0 0.0 0.0 0.333333333333 1.0 + 0.916666666667 0.533333333333 0.0 0.0 0.0 0.0 0.333333333333 + 0.919642857143 0.9 0.608333333333 0.0 0.0 0.0 0.0 0.266666666667 + 0.767857142857 0.741666666667 0.716666666667 0.441666666667 + + + 0.556703804032 0.153323047513 0.0192881878247 0.00382695797086 + 0.295650494647 0.366380859695 0.0758518295058 0.0177709427377 + 0.0229592047092 0.00817322047178 0.0276007583328 0.421463576567 + 0.16481464375 0.0501464236656 + + + + + + + + + 66 1 100 5 99 4 100 2 67 1 33 2 67 3 30 3 67 3 30 3 67 3 29 5 66 4 29 + 3 67 20 12 4 67 36 67 36 67 36 68 35 68 35 68 34 68 36 68 35 68 35 68 + 35 68 35 68 36 68 35 68 35 68 35 68 36 67 36 67 36 67 35 68 35 68 35 + 69 34 69 34 69 34 69 34 69 34 69 34 69 34 69 34 69 35 26 1 41 35 26 1 + 9 2 30 34 27 2 9 2 29 20 2 12 27 2 9 2 29 34 27 2 10 1 30 33 27 2 9 3 + 29 34 26 2 9 6 25 35 25 3 9 11 2 4 14 35 25 3 10 26 2 38 19 1 4 3 9 + 68 6 20 9 94 9 36 4 54 9 36 18 40 9 36 26 32 9 36 27 32 8 14 3 19 27 + 32 8 1 1 14 3 18 26 18 3 11 11 34 27 17 3 11 7 38 27 18 2 11 6 40 26 + 31 6 40 26 31 5 39 28 31 4 42 26 26 9 43 1 3 20 20 1 6 1 5 4 44 22 35 + 2 44 22 35 7 38 24 5 1 28 9 36 24 5 1 5 1 21 5 3 7 3 2 26 25 32 4 42 + 25 32 4 42 25 13 1 1 5 12 4 42 25 16 4 12 5 40 26 31 6 40 26 32 6 39 + 26 11 1 20 6 39 26 32 7 38 26 32 7 38 26 32 7 38 26 32 8 37 26 32 9 + 36 26 33 8 36 26 33 8 36 26 33 8 36 26 33 7 37 26 33 7 37 27 32 7 38 + 26 32 7 38 26 32 8 37 25 33 8 4 1 32 25 33 9 2 4 1 7 2 1 2 1 16 25 33 + 9 2 30 4 25 33 9 2 31 4 24 9 1 6 13 5 7 3 32 3 24 4 27 3 8 3 31 2 26 + 2 29 2 8 2 60 2 29 2 9 1 61 1 29 2 9 2 60 1 29 1 10 2 60 1 39 3 60 1 + 39 3 100 2 102 1 102 1 102 1 102 1 102 2 101 1 93 0 + + + + 11124.0 + + + 0.953703703704 + + + 4606.0 + + + 0.159357359965 + + + 1.03469232717 + + + 0.498663295105 0.528347827498 0.161004778643 0.116280979279 + 0.00465207460415 0.00591599607826 0.00154857631617 0.0266761127954 + -0.0156628148393 + + + 103.0 + + + 0.757281553398 1.02777777778 + + + 1.16504854369 0.621359223301 0.504854368932 0.73786407767 + 0.222222222222 0.925925925926 1.66666666667 1.2962962963 + + + 108.0 + + + 8.0 61.0 0.190775681342 7.0 2.0 5.0 + + + 0.0 0.990740740741 + + + 0.414059690759 + + + 0.0 0.231111111111 0.837037037037 0.299259259259 0.481481481481 + 0.663817663818 0.685185185185 0.280626780627 0.468660968661 + 0.719373219373 0.333333333333 0.149572649573 0.0 0.179487179487 + 0.861823361823 0.423076923077 + + + 0.0 0.0 0.0 0.422619047619 0.769230769231 0.613095238095 + 0.365384615385 0.14880952381 0.0 0.0 0.0 0.467032967033 + 0.96449704142 0.983516483516 0.710059171598 0.0 0.224852071006 + 0.362637362637 0.254437869822 0.538461538462 1.0 1.0 0.763313609467 + 0.0 0.307692307692 1.0 1.0 0.857142857143 0.325443786982 + 0.412087912088 0.390532544379 0.010989010989 0.236686390533 1.0 1.0 + 0.879120879121 0.0 0.0 0.0 0.0 0.260355029586 0.346153846154 + 0.396449704142 0.598901098901 0.721893491124 0.615384615385 + 0.573964497041 0.043956043956 0.0 0.0 0.0 0.351648351648 + 0.94674556213 0.934065934066 0.887573964497 0.0 0.0 0.0 + 0.00591715976331 0.335164835165 0.715976331361 0.846153846154 + 0.828402366864 0.0384615384615 + + + 0.398774423715 0.0458118011629 0.0546932917768 0.131135658285 + 0.0702862505332 0.0876342672744 0.0174513540934 0.109470043625 + 0.303479423824 0.0163064211894 0.234586682331 0.075206419652 + 0.0547260811402 0.0275727251558 + + + + + + + + + 2 4 5 2 24 7 25 5 25 8 23 11 22 7 25 3 2 2 25 2 3 2 6 1 18 3 2 5 2 3 + 18 3 1 10 18 13 1 1 17 17 14 19 13 20 12 21 11 22 10 23 9 24 7 26 7 + 25 7 26 5 27 5 27 5 27 5 27 5 5 6 16 5 3 9 4 5 1 10 25 7 27 5 27 4 29 + 3 28 4 28 6 26 8 24 10 5 3 3 4 3 3 1 11 2 6 1 5 3 29 3 10 1 18 3 10 1 + 19 3 8 2 19 6 5 4 2 2 6 1 5 7 3 11 1 1 1 5 2 8 4 12 1 15 4 4 3 3 1 1 + 1 14 5 4 3 5 2 2 3 8 6 2 1 9 1 1 6 6 5 6 3 7 4 8 5 5 4 18 4 6 5 16 5 + 6 6 15 5 7 7 2 1 9 7 5 13 8 7 1 1 2 13 8 5 6 13 8 5 6 13 8 5 6 14 7 5 + 4 1 1 15 5 6 6 16 4 6 7 15 4 6 7 16 4 5 9 14 4 4 10 16 1 5 9 24 8 24 + 9 23 5 29 3 28 4 1 2 25 4 1 8 19 14 18 15 18 15 17 16 16 17 15 19 13 + 20 12 21 11 22 10 24 8 25 7 27 5 3 2 23 4 3 2 23 4 28 4 28 4 28 4 4 1 + 23 4 1 1 2 3 10 3 8 4 16 4 4 8 25 7 27 5 28 4 28 4 28 4 29 3 29 3 29 + 3 1 1 26 4 2 2 4 3 17 3 5 1 2 4 7 2 8 3 8 4 7 2 9 2 10 2 7 1 10 3 29 + 3 28 4 28 4 8 3 17 4 9 2 17 4 28 4 29 3 5 1 23 3 4 4 20 3 5 5 19 3 5 + 7 17 3 5 8 16 4 4 9 15 4 4 10 14 4 4 12 11 5 4 13 10 5 4 16 8 4 4 16 + 8 4 4 16 9 2 8 11 2 1 8 2 8 15 7 2 8 16 5 3 8 18 3 3 8 26 2 2 1 31 2 + 30 1 23 0 + + + + 4160.0 + + + 0.246153846154 + + + 2387.0 + + + 0.298282362798 + + + 1.06748078745 + + + 0.480776247686 0.518834254018 0.0295117317993 0.535122462134 + 0.0199834150345 0.00047413824279 -0.0011948618073 0.00291787869778 + -0.0615687863448 + + + 32.0 + + + 4.78125 0.723076923077 + + + 5.875 5.625 4.375 3.25 0.338461538462 1.35384615385 0.276923076923 + 0.923076923077 + + + 130.0 + + + 26.0 104.0 0.209051724138 7.0 9.0 2.0 + + + 0.0 0.992307692308 + + + 0.573798076923 + + + 0.60546875 0.617424242424 0.60546875 0.560606060606 0.78515625 + 0.340909090909 0.875 0.450757575758 0.640625 0.481060606061 0.6875 + 0.636363636364 0.265625 0.42803030303 0.44140625 0.768939393939 + + + 0.203125 0.46875 0.4375 0.720588235294 0.375 0.25 0.3125 + 0.308823529412 0.8125 0.9375 0.46875 0.823529411765 0.90625 + 0.890625 0.90625 0.720588235294 0.8125 0.875 0.625 0.102941176471 + 0.796875 0.96875 0.78125 0.205882352941 0.5 0.953125 0.484375 + 0.176470588235 0.734375 1.0 0.8125 0.0441176470588 0.421875 0.96875 + 0.453125 0.220588235294 0.53125 0.984375 1.0 0.235294117647 0.21875 + 0.953125 0.6875 0.573529411765 0.328125 0.90625 0.921875 + 0.426470588235 0.015625 0.875 0.78125 0.779411764706 0.125 0.984375 + 1.0 0.661764705882 0.0 0.171875 0.140625 0.0147058823529 0.0 + 0.65625 0.84375 0.588235294118 + + + 0.411815999834 0.243928436167 0.0800796481665 0.0320560009691 + 0.117596019239 0.445031037145 0.158738611295 0.122222967599 + 0.0402994151656 0.0472114454287 0.0740387754195 0.297549541234 + 0.327677839199 0.0985146423404 + + + + + + + + + 65 1 106 2 34 1 89 5 5 2 5 1 87 20 77 30 70 3 2 32 68 37 1 2 67 40 67 + 40 67 40 67 40 67 40 67 40 67 40 67 40 68 39 68 39 68 39 68 39 68 39 + 68 40 67 40 68 39 68 7 2 29 69 37 70 39 68 8 1 30 69 38 68 39 68 7 2 + 30 69 4 5 30 69 1 7 30 77 30 34 24 19 1 4 2 1 22 35 20 1 2 27 19 36 + 17 2 6 22 3 3 17 3 1 34 24 3 3 16 27 34 31 14 3 3 22 34 17 1 14 1 2 + 16 22 35 3 2 3 3 4 3 2 7 8 5 6 5 21 34 4 1 12 2 3 6 8 4 10 1 22 34 25 + 1 6 8 33 34 22 6 3 11 31 34 34 11 3 1 24 35 34 10 28 35 33 11 3 1 2 1 + 22 34 35 24 4 6 4 34 37 23 5 5 4 33 39 21 4 5 4 34 40 20 5 4 4 35 39 + 21 3 1 8 35 38 23 11 35 38 23 6 1 4 35 38 24 4 3 3 35 38 31 3 34 38 + 32 4 33 40 30 3 35 39 31 2 36 5 2 31 31 2 35 39 32 1 35 39 32 1 35 38 + 71 38 33 1 35 37 34 3 33 38 33 3 33 38 33 4 32 38 34 4 7 1 2 7 7 3 3 + 38 35 4 4 18 1 37 2 6 35 26 1 46 34 41 1 31 34 73 34 73 34 73 34 40 1 + 32 34 39 2 1 3 16 1 1 1 10 33 39 30 5 33 39 31 4 33 39 32 3 33 39 33 + 2 34 38 34 1 34 39 68 38 69 38 69 40 67 39 68 39 68 39 68 39 68 39 68 + 6 4 29 68 6 4 23 3 3 68 40 67 40 67 40 67 40 68 40 67 40 67 40 67 39 + 68 39 68 39 68 39 68 39 68 40 67 40 68 39 67 40 67 40 68 40 67 3 8 2 + 8 1 5 6 1 6 67 2 34 5 66 3 15 1 17 4 67 3 15 2 17 3 67 3 34 3 66 5 33 + 3 67 3 33 4 67 3 34 3 67 2 35 3 67 2 35 4 103 3 105 1 106 2 63 0 + + + + 13161.0 + + + 0.869918699187 + + + 4782.0 + + + 0.174613132581 + + + 0.558076602831 + + + 0.491978567427 0.471657719179 0.178928457434 0.189709431033 + -0.145000755005 0.0056172380477 0.00162269858778 -0.00237224113095 + 7.13799954257e-05 + + + 107.0 + + + 1.18691588785 0.90243902439 + + + 0.373831775701 1.34579439252 1.98130841121 0.934579439252 + 0.260162601626 1.9837398374 0.780487804878 0.487804878049 + + + 123.0 + + + 15.0 88.0 0.211293260474 10.0 6.0 6.0 + + + 0.0 0.991869918699 + + + 0.363346250285 + + + 0.0 0.0 0.74317617866 0.559553349876 0.0 0.649940262843 + 0.672640382318 0.415770609319 0.497530864198 0.547192353644 + 0.384707287933 0.0 0.779012345679 0.553166069295 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.553846153846 0.826923076923 0.784615384615 + 0.278846153846 0.0 0.0 0.0 0.0 0.569230769231 1.0 1.0 + 0.216346153846 0.0 0.0 0.4375 0.452380952381 0.685714285714 + 0.986607142857 1.0 0.223214285714 0.0 0.0 0.759615384615 + 0.989743589744 0.964102564103 0.0480769230769 0.184615384615 0.25 + 0.153846153846 0.107692307692 0.490384615385 1.0 0.984615384615 0.0 + 0.0 0.0 0.7 0.97619047619 0.316964285714 0.428571428571 + 0.547619047619 0.0669642857143 0.0 0.0 0.815384615385 1.0 + 0.899038461538 0.00512820512821 0.0 0.0 0.0 0.0 0.571428571429 + 0.747619047619 0.834821428571 0.419047619048 0.0 0.0 0.0 0.0 + + + 0.413474831727 0.213124029544 0.0195704430911 0.00620599811959 + 0.0846811991608 0.384286511468 0.111574811677 0.0504944244542 + 0.0137805537606 0.00631990768676 0.146248271915 0.13586361269 + 0.230502409726 0.0609471665906 + + + + + + + + + 0 1 9 1 1 1 7 3 7 3 7 3 9 1 7 3 7 3 7 3 37 1 9 3 7 1 1 1 7 1 1 1 7 1 + 1 1 7 1 9 1 9 1 130 1 1 2 6 4 5 5 5 5 6 4 6 4 6 4 5 5 5 5 6 4 6 4 6 4 + 5 5 5 5 5 5 6 4 8 2 8 2 6 4 6 4 6 4 6 4 6 4 6 4 6 3 7 4 6 4 6 4 6 4 6 + 5 5 5 5 4 6 4 6 4 6 4 5 5 5 5 5 4 6 4 6 4 6 4 6 4 6 4 6 4 7 3 7 4 5 5 + 5 5 5 5 6 4 6 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 + 7 3 7 3 7 3 7 3 37 3 7 3 7 3 9 1 88 1 9 2 8 2 7 3 7 3 7 3 7 2 8 2 9 1 + 20 2 7 3 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 7 2 8 2 8 3 + 7 3 7 3 7 4 6 4 6 4 6 4 6 4 6 3 7 3 7 3 7 3 8 2 19 1 7 4 6 4 6 4 6 4 + 6 4 6 4 6 4 6 3 7 3 8 1 9 1 9 1 9 3 29 1 8 1 9 1 8 3 6 4 6 4 6 4 6 4 + 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 5 5 5 5 5 5 5 5 5 5 5 5 4 6 4 6 4 6 4 6 + 4 6 4 7 3 7 2 8 3 7 3 7 3 7 3 7 3 7 3 6 4 6 4 6 4 7 3 7 3 7 3 7 3 7 3 + 7 3 8 2 8 2 8 2 8 2 7 3 6 5 5 5 5 5 5 5 5 4 6 4 6 4 6 4 6 4 6 5 5 5 5 + 4 5 5 6 4 6 4 6 4 6 4 7 3 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 7 3 7 3 + 8 2 299 1 8 3 7 3 7 3 7 2 8 1 9 1 40 4 6 4 7 3 7 3 5 1 1 3 4 6 4 5 5 + 5 5 1 1 1 7 1 9 1 9 5 5 5 4 6 4 6 4 6 4 5 5 5 5 5 5 5 5 5 4 6 4 6 5 5 + 5 5 5 4 6 4 5 5 4 5 5 4 6 4 5 4 6 2 8 1 27 1 8 2 6 4 6 4 5 5 5 5 5 5 + 5 5 5 5 5 5 5 4 7 3 7 2 9 1 189 1 9 1 8 1 49 4 6 2 1 1 9 1 69 1 8 2 8 + 2 8 2 8 1 9 1 9 1 60 1 9 1 8 3 7 3 6 3 7 4 6 4 7 2 8 2 8 2 8 2 249 1 + 8 2 8 2 7 3 7 3 7 3 8 2 9 1 111 0 + + + + 4560.0 + + + 0.0219298245614 + + + 1132.0 + + + 0.79593639576 + + + 1.04430946928 + + + 0.440420102081 0.419428804411 0.00369550985284 11.0904759542 + 0.146532642081 2.46232614736e-05 0.0904582306889 0.00209747720856 + 9.76944582799 + + + 10.0 + + + 8.5 0.0175438596491 + + + 5.6 7.2 10.0 6.4 0.0438596491228 0.0 0.0175438596491 + 0.00877192982456 + + + 456.0 + + + 6.0 23.0 0.206451612903 28.0 17.0 1.0 + + + 0.0 0.973684210526 + + + 0.248245614035 + + + 0.59649122807 0.0 0.0350877192982 0.0 0.719298245614 0.56432748538 + 0.333333333333 0.0204678362573 0.00877192982456 0.548245614035 + 0.59649122807 0.157894736842 0.0 0.0175438596491 0.146198830409 + 0.213450292398 + + + 0.40350877193 0.456140350877 0.0 0.0 0.0 0.0526315789474 0.0 0.0 + 0.526315789474 1.0 0.0 0.0 0.0 0.0877192982456 0.0 0.0 + 0.59649122807 1.0 0.421052631579 0.0 0.0175438596491 0.122807017544 + 0.0 0.0 0.429824561404 0.929824561404 0.736842105263 0.745614035088 + 0.535087719298 0.394736842105 0.0614035087719 0.0 0.0 + 0.0350877192982 0.456140350877 0.877192982456 0.701754385965 + 0.491228070175 0.245614035088 0.0 0.0 0.0 0.0877192982456 + 0.771929824561 0.701754385965 0.491228070175 0.280701754386 + 0.105263157895 0.0 0.0 0.0 0.105263157895 0.105263157895 + 0.438596491228 0.315789473684 0.263157894737 0.0 0.0 0.0 0.0 0.0 + 0.166666666667 0.149122807018 0.201754385965 + + + 0.588154645811 0.183329348807 0.0850096810807 0.0283219492244 + 0.471617985483 0.440766979631 0.118908066954 0.0702725006948 + 0.0499679604202 0.043950039321 0.314377972055 0.567717986235 + 0.299624213707 0.0887415333929 + + + + + + + + + 34 3 40 2 40 2 40 3 38 4 5 2 31 3 6 2 31 3 6 2 31 3 6 2 30 4 6 3 29 4 + 6 4 1 31 6 36 6 36 6 36 6 36 6 36 6 36 6 36 6 37 5 37 5 37 5 37 5 37 + 4 38 5 37 5 37 5 37 5 37 5 37 6 36 6 36 6 28 1 1 1 2 9 36 6 4 5 27 6 + 4 1 1 3 27 6 36 6 36 5 37 5 37 6 36 6 36 6 36 6 8 3 25 6 37 5 9 1 27 + 6 8 2 26 6 36 6 36 6 36 6 37 5 37 5 37 5 37 5 3 10 1 14 2 2 5 5 3 11 + 1 10 12 5 3 27 1 1 5 5 4 22 2 2 8 4 3 22 6 1 6 4 3 29 5 5 3 30 4 4 5 + 29 4 5 3 31 2 40 2 40 3 39 3 40 1 40 4 38 4 38 5 36 4 38 4 38 5 39 2 + 40 2 40 3 39 3 39 3 39 2 40 2 40 3 39 3 39 3 39 3 39 3 39 3 38 4 39 3 + 39 1 3 0 + + + + 3696.0 + + + 0.477272727273 + + + 1761.0 + + + 0.204997160704 + + + 1.09146341463 + + + 0.506474979571 0.386516281893 0.0746878760387 0.150094073774 + 0.0248032619574 -0.00128233552576 0.0184387124966 0.00565337172544 + 0.0304871985392 + + + 42.0 + + + 1.0 0.329545454545 + + + 0.761904761905 0.666666666667 0.666666666667 1.90476190476 + 0.272727272727 0.272727272727 0.772727272727 0.0 + + + 88.0 + + + 7.0 49.0 0.135135135135 5.0 4.0 2.0 + + + 0.0 0.988636363636 + + + 0.476461038961 + + + 0.536363636364 0.813636363636 0.427272727273 0.0 0.545454545455 + 0.979338842975 0.404958677686 0.0 0.545454545455 0.995454545455 + 0.445454545455 0.0 0.442148760331 0.623966942149 0.574380165289 + 0.285123966942 + + + 0.272727272727 0.8 0.745454545455 0.636363636364 0.418181818182 + 0.272727272727 0.0 0.0 0.0727272727273 1.0 1.0 0.872727272727 + 0.854545454545 0.163636363636 0.0 0.0 0.0909090909091 1.0 1.0 + 0.909090909091 0.763636363636 0.0 0.0 0.0 0.0909090909091 1.0 1.0 + 1.0 0.848484848485 0.0 0.0 0.0 0.0909090909091 1.0 1.0 1.0 + 0.818181818182 0.0 0.0 0.0 0.0909090909091 1.0 0.981818181818 1.0 + 0.872727272727 0.0909090909091 0.0 0.0 0.436363636364 1.0 + 0.963636363636 1.0 0.963636363636 0.181818181818 0.0 0.0 + 0.19696969697 0.227272727273 0.30303030303 0.348484848485 + 0.590909090909 0.560606060606 0.590909090909 0.454545454545 + + + 0.719337919546 0.047300406255 0.0621230331331 0.0301212600946 + 0.738161949484 0.090831157339 0.0295198234327 0.0932332150753 + 0.0351674650191 0.0317094482415 0.444590753669 0.129640248211 + 0.0621207885098 0.0311497707456 + + + + + + + + + 4 1 127 3 126 3 126 3 126 3 118 1 6 4 118 1 6 2 120 1 7 3 118 2 6 4 + 117 2 6 5 116 2 6 8 113 2 6 9 77 2 33 2 5 13 74 10 25 2 5 15 72 19 2 + 3 11 2 5 16 71 29 5 3 5 14 73 30 5 2 5 15 72 31 3 3 4 17 6 2 63 37 4 + 18 6 3 62 17 1 18 4 18 3 1 4 3 60 17 1 18 4 26 63 36 4 26 63 36 4 17 + 1 10 61 36 4 17 2 10 60 36 4 17 2 11 59 37 2 33 57 37 2 21 3 11 55 37 + 2 36 54 37 2 38 6 3 43 37 2 40 5 4 42 36 3 20 2 20 3 4 41 36 2 21 2 + 29 39 36 2 23 3 28 37 36 3 22 6 26 35 38 2 21 8 30 30 39 2 21 8 28 32 + 37 3 21 9 24 35 36 4 5 1 15 9 1 2 7 3 11 35 36 3 6 2 14 3 1 1 2 6 7 5 + 9 34 37 1 1 1 24 4 14 1 1 1 13 30 38 3 25 4 12 1 19 28 6 1 15 3 13 2 + 27 3 10 4 23 22 28 1 7 4 41 7 21 21 27 1 8 3 22 1 21 5 22 19 20 3 3 2 + 8 3 17 1 3 3 20 5 23 18 7 1 17 7 1 1 2 4 8 1 7 8 11 3 7 4 21 19 25 9 + 2 4 8 2 6 10 10 5 5 5 19 1 4 14 28 1 2 3 2 4 19 9 9 17 16 5 2 12 36 4 + 20 10 8 17 18 3 3 10 24 1 11 4 20 12 10 9 28 10 7 1 28 3 21 13 12 6 + 32 6 36 3 21 14 4 1 10 2 34 4 36 3 21 13 1 3 1 5 6 3 35 1 37 3 5 1 5 + 1 8 17 2 6 7 3 71 3 5 1 2 5 7 37 18 1 51 2 5 1 1 7 4 41 8 1 5 3 19 9 + 23 3 6 9 1 27 1 10 7 2 4 9 18 10 5 3 14 2 6 39 2 9 8 3 1 9 18 10 3 10 + 9 2 6 39 4 7 14 8 17 10 2 14 6 2 6 48 13 11 17 10 2 17 3 2 6 48 6 18 + 18 9 2 17 1 1 1 2 6 46 8 4 1 14 4 1 5 2 5 9 1 23 6 47 7 5 2 14 1 2 4 + 3 5 9 1 23 6 48 10 3 1 9 1 7 4 2 5 33 6 50 6 2 6 7 6 1 12 33 6 55 1 2 + 6 7 19 34 6 58 6 1 3 1 20 34 5 58 32 34 5 58 11 1 21 34 4 59 7 1 24 + 33 5 62 4 4 21 33 5 63 2 6 9 2 9 34 4 71 8 5 7 34 4 70 9 5 1 2 4 35 3 + 70 10 5 6 34 4 70 11 3 7 35 3 58 6 7 8 1 11 35 2 60 3 10 19 35 2 60 2 + 11 19 35 2 74 6 1 12 33 3 74 19 34 2 40 2 20 5 6 20 34 2 40 2 19 10 2 + 20 34 2 61 10 2 20 100 8 1 20 105 2 4 18 105 2 3 8 1 10 105 12 1 5 1 + 5 107 22 109 20 111 18 113 16 113 17 116 13 119 11 118 11 119 10 120 + 9 120 10 120 9 119 10 122 6 124 4 126 3 127 3 126 3 127 2 27 0 + + + + 13803.0 + + + 1.20560747664 + + + 4561.0 + + + 0.274062705547 + + + 1.00797266515 + + + 0.537418123767 0.42587482884 0.349760107779 0.0948897060899 + 0.0287299446348 -0.0748803570584 0.00981236952351 -0.0355172076267 + 0.0169999607415 + + + 129.0 + + + 1.7984496124 2.34579439252 + + + 1.58139534884 1.92248062016 2.6976744186 0.93023255814 + 1.42056074766 3.58878504673 3.55140186916 0.560747663551 + + + 107.0 + + + 45.0 166.0 0.253731343284 24.0 3.0 9.0 + + + 0.0 0.990654205607 + + + 0.330435412591 + + + 0.419471153846 0.777777777778 0.181712962963 0.0104166666667 + 0.00120192307692 0.62962962963 0.108796296296 0.00462962962963 + 0.110576923077 0.347222222222 0.635416666667 0.309027777778 + 0.445221445221 0.921436588103 0.219977553311 0.139169472503 + + + 0.293269230769 0.923076923077 0.9375 0.836538461538 0.413461538462 + 0.241071428571 0.0432692307692 0.0 0.0 0.461538461538 + 0.732142857143 0.596153846154 0.0817307692308 0.0 0.0 0.0 0.0 + 0.00480769230769 0.75 0.682692307692 0.0288461538462 0.0 + 0.00961538461538 0.0 0.0 0.0 0.357142857143 0.740384615385 + 0.423076923077 0.0 0.00961538461538 0.0 0.0 0.0 0.0 0.677884615385 + 0.413461538462 0.348214285714 0.206730769231 0.0 0.0432692307692 + 0.399038461538 0.339285714286 0.399038461538 0.894230769231 + 0.888392857143 0.918269230769 0.147321428571 0.0144230769231 + 0.980769230769 1.0 0.985576923077 0.341346153846 0.183035714286 + 0.254807692308 0.316964285714 0.0678733031674 0.723981900452 + 0.90756302521 0.796380090498 0.380090497738 0.0 0.0 0.0 + + + 0.350012865043 0.17771842512 0.155354311607 0.123775968683 + 0.0216709691001 0.282574561976 0.0489604064883 0.175192087188 + 0.227805629205 0.0716392166248 0.0258239304337 0.104006998709 + 0.142711744081 0.0280318616881 + + + + + + + + + 104 1 214 1 214 3 212 6 210 5 179 4 28 5 179 1 30 7 208 8 178 3 28 6 + 180 2 28 6 180 2 29 4 181 3 26 6 201 3 3 10 182 2 5 1 3 2 1 20 179 37 + 179 37 179 37 180 36 180 36 180 36 180 36 180 36 180 36 180 36 180 36 + 180 36 180 36 180 36 180 36 180 36 180 36 181 35 181 35 28 1 152 32 + 30 4 150 28 34 5 149 28 34 6 148 35 27 8 146 36 25 10 145 36 25 11 + 144 36 25 12 143 36 25 12 144 35 25 12 144 35 24 14 143 35 24 14 143 + 35 24 14 143 35 24 13 144 7 2 26 23 12 145 8 3 25 22 13 146 35 22 15 + 7 1 102 1 33 35 22 15 6 4 100 4 30 35 22 17 3 9 93 11 19 2 1 3 1 36 + 21 18 2 10 90 13 1 8 4 12 1 36 21 31 89 23 3 12 1 36 20 33 89 22 2 13 + 1 34 22 35 87 22 2 13 1 34 21 37 86 37 1 4 2 18 7 3 21 38 85 37 1 3 3 + 2 11 1 11 2 22 39 84 19 3 15 1 3 29 1 22 40 83 19 3 15 1 2 30 1 22 20 + 1 20 82 20 3 14 2 1 30 1 22 41 83 19 3 14 2 1 30 2 20 42 83 20 1 15 2 + 1 30 1 22 41 83 36 1 2 30 1 22 41 15 5 63 39 31 1 2 1 17 43 12 10 60 + 37 1 2 30 1 1 1 15 46 12 9 61 37 1 2 28 7 14 44 13 8 63 39 28 6 15 43 + 15 9 61 41 27 6 15 42 14 11 60 39 28 7 15 3 6 29 17 13 58 40 28 7 28 + 25 17 15 55 41 28 4 23 1 8 20 21 15 55 39 31 3 22 11 1 18 20 16 56 38 + 32 1 22 12 2 17 20 15 57 39 31 1 22 30 21 14 58 38 56 28 23 14 1 2 54 + 37 56 27 24 14 1 10 48 36 1 1 31 2 22 27 22 27 47 40 29 3 21 15 1 12 + 5 2 13 29 46 40 30 2 1 1 20 1 2 2 2 2 1 5 3 7 7 2 13 30 46 39 29 5 21 + 1 1 1 8 2 5 5 2 2 4 1 14 31 45 39 29 5 22 7 3 2 5 10 2 2 14 33 43 39 + 30 4 23 6 4 1 5 14 13 34 43 8 1 30 30 4 39 3 1 10 13 35 42 8 2 30 29 + 4 39 2 4 7 14 36 41 8 2 30 29 4 50 2 14 37 40 8 2 29 30 1 68 39 38 40 + 99 40 23 4 3 48 77 5 16 41 1 1 9 66 77 3 18 1 1 37 4 2 1 71 77 3 19 1 + 1 29 1 2 3 1 4 76 76 2 22 28 6 3 3 76 76 2 19 2 1 28 6 4 2 40 2 34 75 + 3 19 2 1 27 7 3 3 39 4 33 75 3 19 5 5 21 7 1 4 39 5 2 2 20 5 3 75 3 + 19 2 2 1 6 20 7 1 3 40 10 6 18 3 76 2 19 5 6 20 6 1 5 39 34 3 76 1 20 + 5 6 20 5 3 4 40 33 1 1 1 97 5 6 24 1 2 5 4 2 34 136 2 6 27 5 5 1 34 + 136 2 6 18 1 8 5 40 134 4 5 18 3 7 5 41 134 2 6 18 4 6 5 41 142 18 5 + 5 5 41 144 5 2 8 7 3 6 41 143 6 3 8 6 3 6 41 139 10 3 17 6 40 137 13 + 4 16 6 41 136 13 4 16 6 36 141 33 6 33 145 3 2 27 7 4 1 29 144 30 8 3 + 2 35 140 26 10 3 2 36 140 26 9 3 2 36 141 25 9 41 145 21 9 41 145 21 + 9 41 145 20 10 41 149 16 10 41 153 1 4 7 10 41 158 7 10 39 160 6 11 + 41 150 4 1 9 11 41 151 13 11 42 150 14 11 41 153 11 11 41 153 10 12 + 41 154 9 12 41 155 8 12 41 155 8 12 42 158 2 14 20 2 19 175 14 4 2 2 + 3 3 13 174 8 27 7 174 6 29 7 175 6 27 9 173 8 28 7 173 6 210 5 209 0 + + + + 30024.0 + + + 1.55395683453 + + + 8025.0 + + + 0.1953894081 + + + 0.916752767528 + + + 0.444327754836 0.551000948124 0.488353285403 0.117263059667 + -0.031315725942 0.122197339443 -0.0193944936272 0.101693280786 + -0.00625084829782 + + + 216.0 + + + 0.916666666667 2.21582733813 + + + 0.666666666667 1.01851851852 0.888888888889 1.09259259259 + 0.345323741007 2.64748201439 4.31654676259 1.41007194245 + + + 139.0 + + + 19.0 107.0 0.235294117647 26.0 3.0 10.0 + + + 0.0 0.992805755396 + + + 0.267286171063 + + + 0.0 0.18253968254 0.547619047619 0.644444444444 0.450980392157 + 0.589947089947 0.332275132275 0.0 0.00272331154684 0.450793650794 + 0.215873015873 0.0 0.0 0.0671957671958 0.52328042328 0.251322751323 + + + 0.0 0.0 0.0 0.0 0.0 0.783950617284 0.925925925926 0.664609053498 + 0.0 0.0 0.0329218106996 0.716775599129 0.662309368192 + 0.720164609053 0.529411764706 0.4670781893 0.117647058824 + 0.400871459695 0.351851851852 0.749455337691 0.773420479303 + 0.477366255144 0.0 0.0 0.366013071895 0.919389978214 0.927983539095 + 0.324618736383 0.0871459694989 0.00205761316872 0.0 0.0 0.0 + 0.00653594771242 0.148148148148 0.331154684096 0.167755991285 0.0 + 0.0 0.0 0.0 0.00435729847495 0.355967078189 0.99128540305 + 0.662309368192 0.0555555555556 0.0 0.0 0.0 0.0 0.0 0.259259259259 + 0.429193899782 0.380658436214 0.187363834423 0.0 0.0 0.0 0.0 + 0.0174291938998 0.507625272331 0.769547325103 0.642701525054 + 0.19341563786 + + + 0.348661683494 0.188371707912 0.203337203954 0.173853400139 + 0.0625702714957 0.24953196114 0.0764208524741 0.295296448819 + 0.192975959271 0.157155719794 0.0435282126742 0.0594005383232 + 0.193590053631 0.082414294755 + + + + + + + + + 5 3 74 16 60 28 6 2 39 32 3 3 39 38 39 38 39 38 39 38 39 3 2 12 2 19 + 39 2 4 12 1 19 39 2 9 5 1 21 44 33 43 34 40 37 40 1 1 34 40 37 40 38 + 37 1 1 38 37 1 1 38 37 40 38 2 3 34 44 32 40 38 38 39 39 37 35 2 2 38 + 37 1 1 38 40 37 39 38 39 41 36 39 4 4 12 2 16 51 3 17 2 1 3 18 1 2 6 + 48 2 18 9 48 2 19 13 43 2 20 11 44 2 22 10 43 2 21 4 16 3 31 2 21 3 + 51 2 20 5 50 2 19 2 54 2 17 4 55 1 3 3 10 5 53 28 50 34 43 35 42 41 + 35 42 36 42 35 39 1 1 36 37 40 37 40 37 40 38 3 1 35 37 40 37 7 1 33 + 35 8 2 32 36 40 37 41 36 41 36 41 36 41 36 41 36 41 36 41 36 41 36 41 + 36 41 36 41 36 41 35 42 35 19 1 22 36 3 8 2 19 8 37 3 34 3 37 3 35 2 + 37 2 37 1 37 2 36 2 37 2 36 2 75 2 75 2 1 0 + + + + 6160.0 + + + 0.9625 + + + 3110.0 + + + 0.15691318328 + + + 1.46211764706 + + + 0.515975630394 0.476445927795 0.146467817485 0.1209800575 + 0.0869765897742 -0.00203162123312 -0.00216177030329 + -0.00169911404442 -0.00118560613345 + + + 77.0 + + + 0.87012987013 0.55 + + + 1.09090909091 1.24675324675 0.727272727273 0.25974025974 0.55 0.85 + 0.4 0.4 + + + 80.0 + + + 9.0 46.0 0.207006369427 8.0 4.0 2.0 + + + 0.0 0.9875 + + + 0.50487012987 + + + 0.781578947368 0.915789473684 0.126315789474 0.0 0.873684210526 + 0.836842105263 0.236842105263 0.1 0.0894736842105 0.492105263158 + 0.968421052632 0.610526315789 0.0 0.4325 0.9575 0.655 + + + 0.611111111111 0.633333333333 0.755555555556 0.888888888889 + 0.233333333333 0.0 0.0 0.0 0.9 0.95 1.0 1.0 0.27 0.0 0.0 0.0 + 0.788888888889 1.0 1.0 0.466666666667 0.233333333333 0.0 0.0 0.0 + 0.71 1.0 1.0 0.86 0.49 0.2 0.2 0.18 0.16 0.18 0.16 0.93 0.92 0.96 + 1.0 0.24 0.0 0.0 0.0 0.866666666667 1.0 1.0 1.0 0.2 0.0 0.0 0.0 + 0.92 1.0 1.0 1.0 0.2 0.0 0.0 0.03 0.78 0.89 0.94 1.0 0.42 + + + 0.434343881484 0.171107079693 0.0200037034346 0.00776551564533 + 0.0355264049491 0.339046667221 0.0610735957304 0.0563518985539 + 0.0261908863366 0.00900048942425 0.109231113992 0.219470537615 + 0.0674627034133 0.0477979102069 + + + + + + + + + 39 4 174 7 176 3 177 6 174 9 171 12 169 13 167 14 167 16 165 17 164 + 17 164 17 2 2 160 21 160 23 158 24 157 25 156 27 154 28 153 29 152 18 + 2 9 152 18 3 9 152 17 3 11 150 3 3 13 2 10 150 2 5 11 3 3 157 2 5 2 2 + 7 3 7 153 9 1 19 152 9 2 18 152 9 3 6 1 10 152 18 1 11 151 31 150 29 + 152 7 3 18 153 8 2 7 3 9 2 4 108 1 37 7 4 4 5 8 4 3 108 1 58 9 1 5 + 106 2 58 18 103 2 37 4 1 1 13 21 78 3 5 5 10 3 37 7 13 21 67 36 37 7 + 4 4 6 20 67 36 37 7 3 6 7 13 1 6 65 36 37 7 3 7 5 22 64 36 37 4 1 1 4 + 6 1 1 4 23 63 36 37 16 1 1 4 25 61 36 6 3 3 5 2 2 16 18 3 27 60 36 5 + 29 2 19 3 20 1 7 59 37 4 23 1 28 1 30 57 36 5 23 1 12 3 13 7 18 1 6 + 56 36 5 35 5 11 10 16 2 7 54 36 5 35 6 10 11 16 3 5 54 37 4 35 8 5 2 + 2 11 15 3 6 53 37 4 35 9 4 4 1 12 14 4 5 52 36 5 36 9 2 5 6 4 1 2 6 1 + 9 3 6 50 36 5 36 10 1 7 2 2 6 1 17 3 8 47 36 5 36 11 5 2 41 45 37 3 + 37 11 4 3 42 45 36 3 37 12 3 3 10 6 29 42 35 4 37 13 2 3 52 35 35 2 + 40 17 6 4 13 2 28 34 35 3 39 18 5 4 44 33 36 1 41 19 24 1 27 1 2 28 + 37 1 40 20 12 4 8 2 31 26 78 28 4 8 37 26 38 1 39 30 2 10 6 2 23 31 + 36 3 38 43 5 3 13 2 11 26 37 3 37 44 6 3 12 3 7 1 4 24 37 3 37 46 6 1 + 12 3 12 24 37 3 37 47 34 24 37 2 37 48 36 21 36 4 36 48 37 19 9 2 26 + 4 36 49 37 19 36 4 36 51 36 1 2 15 36 4 36 52 40 13 36 4 36 54 35 1 4 + 11 36 4 36 54 7 2 32 9 37 4 37 54 5 4 1 2 31 5 38 5 35 56 8 5 72 5 35 + 57 9 3 72 5 35 58 8 2 71 7 36 56 71 1 3 1 6 6 37 60 48 26 1 1 1 7 37 + 62 5 1 2 1 15 2 20 36 37 63 20 5 20 36 37 65 17 7 19 37 36 65 20 4 19 + 37 36 66 21 1 20 37 18 1 17 68 12 1 26 38 3 25 8 69 14 2 23 37 3 27 6 + 69 10 1 13 1 14 36 4 29 4 69 11 2 26 37 3 30 3 71 37 37 3 31 2 72 36 + 37 2 33 1 74 34 37 2 110 32 37 3 110 31 37 2 113 29 37 3 115 24 40 2 + 115 14 1 1 3 2 43 1 118 13 7 2 40 1 120 12 5 5 149 3 7 13 3 6 150 31 + 150 31 151 30 150 31 152 29 149 32 149 32 152 29 152 29 153 28 155 26 + 156 25 158 23 162 20 166 14 167 14 165 16 165 6 1 9 166 3 7 5 176 5 + 177 4 33 0 + + + + 21901.0 + + + 1.4958677686 + + + 6680.0 + + + 0.190119760479 + + + 1.11361267459 + + + 0.507279607452 0.515986776447 0.457600749562 0.0812016954529 + 0.0571201936581 -0.0141174216158 -0.00105313336916 + -0.00248023489434 -0.000955976803247 + + + 181.0 + + + 1.08287292818 1.90909090909 + + + 0.773480662983 1.85635359116 1.17127071823 0.508287292818 + 0.528925619835 3.60330578512 2.87603305785 0.628099173554 + + + 121.0 + + + 43.0 160.0 0.233045622688 12.0 4.0 11.0 + + + 0.0 0.99173553719 + + + 0.305008903703 + + + 0.204444444444 0.519259259259 0.731851851852 0.015770609319 + 0.237037037037 0.608888888889 0.0548148148148 0.0 0.0 + 0.0911111111111 0.672592592593 0.270967741935 0.0 0.613768115942 + 0.630434782609 0.246143057504 + + + 0.0 0.0 0.0878787878788 0.89696969697 0.90303030303 0.651515151515 + 0.0575757575758 0.0 0.397101449275 0.402898550725 0.321739130435 + 0.768115942029 0.753623188406 0.623188405797 0.00869565217391 0.0 + 0.206060606061 0.763636363636 0.7 0.490909090909 0.0212121212121 + 0.0 0.0 0.0 0.0 0.0 0.36231884058 0.88115942029 0.194202898551 0.0 + 0.0 0.0 0.0 0.0 0.0 0.350724637681 0.910144927536 0.382608695652 + 0.00289855072464 0.0 0.0 0.0 0.0 0.00606060606061 0.478787878788 + 0.921212121212 0.730303030303 0.386363636364 0.0 0.0 0.35652173913 + 0.63768115942 0.634782608696 0.678260869565 0.484057971014 0.5 0.0 + 0.0 0.530434782609 0.930434782609 0.965217391304 0.24347826087 0.0 + 0.0 + + + 0.184931998073 0.281069075203 0.0384578360729 0.010493718814 + 0.107772501401 0.346301519021 0.156491708764 0.0245414780403 + 0.0102546949215 0.0107205709951 0.146023035532 0.213529424891 + 0.0898118623208 0.162206703472 + + + + + + + + + 3 1 20 1 20 1 19 2 19 2 19 2 19 2 18 4 17 4 17 4 17 4 18 3 18 3 18 3 + 18 3 18 3 18 3 17 5 15 6 16 5 16 5 17 3 18 4 17 4 17 4 17 4 17 5 16 4 + 17 5 15 6 15 5 16 6 16 4 17 5 16 6 14 7 14 7 15 6 15 6 15 6 15 6 15 6 + 15 6 15 6 15 6 16 4 17 4 17 5 16 5 16 5 16 5 16 5 16 5 16 6 15 6 15 6 + 15 6 16 5 16 5 15 6 15 6 15 6 15 5 17 4 17 4 17 5 15 1 1 5 15 5 16 6 + 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 16 4 17 5 17 4 17 3 19 2 19 2 + 19 2 19 3 17 5 16 5 16 5 15 6 16 5 16 4 17 5 16 5 16 6 15 6 15 6 15 6 + 15 6 15 7 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 16 5 16 5 16 5 16 5 + 16 5 16 5 16 5 16 5 16 5 16 5 16 5 16 6 15 6 15 6 15 6 16 5 15 6 15 6 + 15 7 15 6 15 6 15 6 15 6 16 5 15 6 15 6 15 6 15 6 16 5 16 5 16 5 17 3 + 19 2 19 2 19 1 41 3 18 4 17 4 16 6 15 6 15 6 16 5 16 5 16 5 16 6 15 6 + 16 5 15 6 15 6 15 6 15 6 15 6 16 6 15 6 15 5 16 6 15 5 16 6 15 6 16 5 + 16 5 16 5 16 5 16 5 16 3 18 3 1 1 17 5 16 3 1 1 16 3 1 1 16 3 1 2 16 + 2 1 1 17 1 20 1 4 0 + + + + 3801.0 + + + 0.116022099448 + + + 881.0 + + + 0.516458569807 + + + 1.19885433715 + + + 0.437230419977 0.513753310632 0.0226519200139 2.73508940196 + 0.231598868122 0.000915463542089 0.0384828046483 0.00691506077422 + -0.00968455788853 + + + 21.0 + + + 1.38095238095 0.0331491712707 + + + 1.14285714286 2.47619047619 1.14285714286 0.761904761905 0.0 + 0.0220994475138 0.0 0.110497237569 + + + 181.0 + + + 3.0 8.0 0.212765957447 2.0 6.0 1.0 + + + 0.0 0.994475138122 + + + 0.231781110234 + + + 0.617777777778 0.213333333333 0.0 0.0 0.24 0.76 0.466666666667 0.0 + 0.0 0.0222222222222 0.666666666667 0.421739130435 0.0 0.0 0.0 + 0.405797101449 + + + 0.204545454545 0.108695652174 0.0 0.0 0.0 0.0 0.0 0.0 + 0.848484848485 1.0 0.575757575758 0.144927536232 0.0 0.0 0.0 0.0 + 0.0909090909091 0.847826086957 1.0 0.695652173913 0.195652173913 + 0.0 0.0 0.0 0.0 0.159420289855 0.484848484848 0.913043478261 + 0.913043478261 0.5 0.0 0.0 0.0 0.0 0.0 0.0724637681159 + 0.826086956522 1.0 0.449275362319 0.0289855072464 0.0 0.0 0.0 0.0 + 0.0 0.613636363636 0.847826086957 0.54347826087 0.0 0.0 0.0 0.0 0.0 + 0.0 0.463768115942 0.898550724638 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.260869565217 + + + 0.42506969836 0.264349889281 0.004813801366 0.00481461101826 + 0.290262989894 0.424125615703 0.223619672772 0.023340976942 + 0.0103830052673 0.00931733463668 0.379679572073 0.314662387024 + 0.409823521792 0.191664949166 + + + + + + + + + 4 3 13 5 13 6 13 4 14 4 15 2 14 4 14 4 13 4 15 4 15 3 17 1 14 5 13 5 + 13 4 14 4 14 3 15 4 14 4 15 3 17 1 16 2 15 3 14 5 13 5 13 5 14 4 14 4 + 13 6 12 6 12 6 12 6 12 6 12 6 12 6 13 5 12 6 12 5 14 4 14 2 1 1 86 1 + 17 3 15 3 15 3 14 4 14 4 14 4 16 2 16 2 15 3 15 3 14 4 14 4 16 2 16 2 + 16 2 16 2 16 2 12 2 1 4 11 8 10 9 5 13 1 2 1 41 1 11 1 5 1 10 3 4 2 + 10 1 4 2 16 3 5 13 2 14 1 1 1 15 1 1 2 14 9 9 8 11 6 13 5 12 6 12 5 + 13 5 13 6 15 3 16 2 15 3 12 7 11 5 8 3 2 4 5 1 1 5 2 5 2 9 2 17 1 12 + 1 4 1 12 1 1 1 19 1 17 2 16 2 16 1 10 1 6 2 8 4 4 2 8 10 9 9 10 8 10 + 8 11 7 10 9 7 11 5 14 2 15 2 16 2 16 2 17 1 17 1 17 1 1 2 14 1 2 1 49 + 3 15 4 14 4 14 4 15 4 16 2 13 6 11 8 10 8 10 8 10 8 10 7 11 7 11 6 12 + 6 12 6 12 6 12 6 12 6 13 4 14 3 16 2 15 3 15 4 14 4 13 6 13 5 13 5 13 + 5 13 6 12 5 12 7 12 6 12 6 14 4 12 1 1 4 12 6 12 6 12 6 12 6 12 5 13 + 5 13 5 13 5 14 4 14 4 14 4 14 4 13 5 16 1 53 1 18 1 17 1 17 1 17 1 16 + 2 17 1 17 1 11 0 + + + + 3204.0 + + + 0.101123595506 + + + 959.0 + + + 0.603753910323 + + + 1.03863179074 + + + 0.321842605655 0.497964569968 0.0146778735433 1.96603743725 + -0.00394392996668 0.00238972614004 -0.0729816094351 + -0.00159438709709 -0.251462138544 + + + 18.0 + + + 5.11111111111 0.123595505618 + + + 8.22222222222 7.77777777778 2.0 1.55555555556 0.0224719101124 + 0.202247191011 0.224719101124 0.0224719101124 + + + 178.0 + + + 8.0 31.0 0.236607142857 8.0 20.0 1.0 + + + 0.0 0.994382022472 + + + 0.299313358302 + + + 0.346590909091 0.5 0.590909090909 0.366666666667 0.495454545455 + 0.546666666667 0.640909090909 0.502222222222 0.0 0.122222222222 + 0.267045454545 0.0 0.0 0.173333333333 0.2 0.0 + + + 0.0227272727273 0.0 0.181818181818 0.434782608696 0.454545454545 + 0.181818181818 0.136363636364 0.0 0.681818181818 0.681818181818 + 0.522727272727 0.847826086957 0.977272727273 0.75 0.909090909091 + 0.434782608696 0.909090909091 0.795454545455 0.954545454545 + 0.847826086957 0.863636363636 0.659090909091 0.931818181818 + 0.586956521739 0.121212121212 0.393939393939 0.136363636364 + 0.478260869565 0.757575757576 0.363636363636 0.348484848485 + 0.31884057971 0.0 0.0 0.0227272727273 0.260869565217 0.613636363636 + 0.0 0.0 0.0 0.0 0.0 0.0227272727273 0.173913043478 0.454545454545 + 0.0 0.0 0.0 0.0 0.0 0.0681818181818 0.260869565217 0.454545454545 + 0.0 0.0 0.0 0.0 0.0 0.0909090909091 0.260869565217 0.363636363636 + 0.0 0.0 0.0 + + + 0.50456048601 0.221848987369 0.0412229679839 0.0173343366549 + 0.52941588169 0.318280073961 0.196405109764 0.048463923252 + 0.0620207969918 0.0314939407139 0.645069318556 0.269040773673 + 0.299462606759 0.17803051176 + + + + + + + + + 96 3 190 3 156 1 32 4 156 2 32 1 158 1 34 1 192 1 180 1 3 1 6 2 163 2 + 4 24 158 35 158 35 158 35 157 36 157 36 158 35 158 35 158 35 158 35 + 158 36 157 36 157 36 157 36 157 36 157 36 19 2 136 36 18 4 135 36 18 + 5 135 35 17 7 134 35 17 7 134 35 17 9 132 33 19 10 131 35 18 9 131 5 + 3 27 18 11 129 1 1 2 4 27 17 10 1 1 130 34 17 10 1 1 129 36 16 12 137 + 28 16 12 138 27 13 2 1 12 140 25 13 2 1 12 144 2 2 13 17 15 142 1 1 2 + 2 12 17 16 1 2 138 19 18 1 2 12 1 2 3 2 88 7 4 3 6 3 3 1 17 25 11 1 5 + 11 1 1 4 3 86 18 4 15 8 25 11 3 4 12 3 6 83 20 4 15 6 26 11 3 3 14 1 + 7 82 21 3 16 9 21 13 3 2 24 81 22 1 17 9 23 11 4 1 24 81 21 2 18 1 31 + 10 11 1 16 82 21 2 50 10 4 1 6 3 14 82 73 9 6 1 7 2 12 3 1 80 41 1 30 + 9 15 1 11 4 2 79 62 8 2 9 28 3 2 79 46 2 3 20 1 9 28 84 45 36 16 1 12 + 22 4 57 43 38 16 2 12 18 8 56 42 39 30 18 9 55 40 40 33 15 12 53 43 + 38 36 9 20 48 41 38 37 9 20 48 40 39 36 10 16 1 3 48 16 2 21 39 37 10 + 15 2 3 48 16 2 22 38 36 11 14 3 3 48 17 1 23 37 35 12 13 4 5 45 41 39 + 5 5 2 1 20 14 12 4 6 44 41 39 4 7 1 5 13 1 2 14 14 3 4 45 41 39 4 16 + 10 1 2 13 14 4 6 44 40 39 4 16 11 1 1 12 14 4 9 42 40 39 4 8 1 7 13 + 12 15 3 6 1 3 41 39 41 4 6 4 5 10 1 3 11 28 42 38 41 2 9 3 6 7 16 31 + 40 38 53 2 6 8 15 32 40 37 60 4 1 5 1 2 11 33 39 37 66 7 11 35 37 37 + 66 3 15 36 36 7 3 28 63 4 15 37 36 7 4 27 63 4 3 1 11 39 34 38 62 9 + 11 40 1 1 31 38 61 8 1 1 11 45 28 39 60 8 1 1 10 5 3 105 59 10 11 4 5 + 1 1 102 60 9 11 5 7 52 1 48 60 9 11 3 6 24 2 6 1 71 60 4 1 3 21 22 7 + 1 3 71 66 3 20 22 11 71 67 1 20 24 10 36 21 15 87 24 10 35 30 7 90 21 + 10 35 32 5 91 26 5 5 1 28 32 5 92 25 5 35 32 4 93 24 5 35 32 3 96 12 + 2 8 5 35 33 2 96 11 8 3 5 35 33 2 100 8 8 2 5 35 33 3 99 8 8 1 6 35 + 33 3 93 1 6 7 8 1 6 36 33 3 91 3 5 11 3 2 6 36 33 3 92 2 5 12 2 2 6 + 36 34 2 90 5 4 5 2 9 6 36 34 2 84 18 2 10 7 36 124 10 1 4 2 9 7 2 1 1 + 2 24 130 16 2 4 2 2 7 4 1 26 2 3 123 7 3 16 9 35 124 25 9 35 126 23 9 + 36 126 22 9 36 128 20 9 36 128 20 9 36 130 17 10 36 132 15 10 36 133 + 14 10 36 133 12 12 36 134 1 6 3 13 36 140 6 12 36 136 9 12 36 137 8 + 12 36 136 9 12 36 138 7 12 36 138 7 12 36 139 5 13 37 140 4 12 37 156 + 37 156 4 1 5 2 4 1 20 156 5 26 6 155 6 27 6 154 6 27 6 154 7 27 5 155 + 4 28 6 155 5 29 4 154 6 30 3 152 0 + + + + 24704.0 + + + 1.5078125 + + + 7099.0 + + + 0.203972390478 + + + 0.894343302991 + + + 0.435574846222 0.51863465299 0.434635458857 0.116071429663 + -0.037613809118 0.113335551154 -0.0187724504232 0.0859555354595 + -0.0016283328585 + + + 193.0 + + + 1.0725388601 2.2109375 + + + 0.704663212435 0.953367875648 1.22279792746 1.40932642487 0.625 + 3.46875 3.375 1.375 + + + 128.0 + + + 18.0 145.0 0.257521058965 17.0 4.0 6.0 + + + 0.0 0.9921875 + + + 0.287362370466 + + + 0.0 0.287109375 0.623697916667 0.625651041667 0.52734375 + 0.590494791667 0.309895833333 0.00130208333333 0.0989583333333 + 0.550130208333 0.112630208333 0.0 0.0 0.132015306122 0.538265306122 + 0.205994897959 + + + 0.0 0.0 0.0 0.0 0.197916666667 0.971354166667 0.9140625 + 0.583333333333 0.0 0.0 0.3828125 0.765625 0.731770833333 0.59375 + 0.549479166667 0.455729166667 0.208333333333 0.3359375 0.3984375 + 0.947916666667 0.911458333333 0.3203125 0.00260416666667 0.0 + 0.565104166667 1.0 0.8828125 0.1328125 0.0 0.0078125 + 0.00260416666667 0.0 0.0833333333333 0.205729166667 0.395833333333 + 0.419270833333 0.0364583333333 0.0 0.0 0.0 0.0 0.106770833333 + 0.536458333333 0.848958333333 0.385416666667 0.0286458333333 0.0 + 0.0 0.0 0.0 0.0 0.3984375 0.591145833333 0.169270833333 + 0.135416666667 0.0 0.0 0.0 0.0 0.135 0.7875 0.5925 0.5775 0.1 + + + 0.368858343277 0.174172791524 0.201305584478 0.164194747545 + 0.0792109138923 0.249282980365 0.0646156383499 0.309188431179 + 0.195389315356 0.133988064406 0.0218306679791 0.0791676650943 + 0.155640332788 0.0768393017809 + + + + + + + + + 101 3 186 3 151 2 3 1 30 2 151 7 28 3 151 7 1 9 18 3 151 20 6 6 3 2 + 153 37 152 36 153 37 152 37 152 37 152 37 152 37 152 37 152 37 152 37 + 152 38 151 38 151 38 151 38 151 38 151 38 151 38 152 37 152 37 152 37 + 17 1 134 7 1 25 2 2 16 3 133 34 1 2 16 4 132 37 17 3 132 37 18 3 131 + 38 17 3 131 38 17 5 129 38 12 1 4 6 128 38 11 3 3 7 127 38 11 4 1 9 + 126 38 11 14 126 38 11 14 126 25 1 12 11 15 125 34 15 15 91 2 32 36 1 + 1 10 16 90 7 28 38 10 15 91 23 12 39 9 15 91 26 8 40 9 14 92 32 1 38 + 1 2 9 14 92 74 8 16 5 5 82 73 8 27 81 73 8 28 80 73 8 27 1 3 77 41 9 + 12 2 9 10 29 77 39 29 5 8 9 2 21 76 38 32 3 8 32 76 38 32 3 8 27 3 2 + 76 38 32 3 8 28 2 2 76 38 33 2 8 27 2 4 75 38 33 2 8 27 2 3 76 38 33 + 2 7 28 3 3 76 37 33 2 7 29 18 4 59 37 34 1 7 29 18 5 58 38 33 1 6 30 + 18 5 58 38 39 31 6 1 10 6 58 39 39 38 9 6 56 41 39 38 8 8 23 2 31 40 + 39 5 5 28 8 9 22 2 31 39 40 5 6 26 9 8 22 4 29 40 40 2 13 22 9 10 20 + 4 30 40 39 4 7 2 3 20 10 11 19 3 32 39 39 4 4 5 5 18 11 11 20 1 32 38 + 40 4 4 6 6 15 12 12 19 1 32 38 41 5 2 7 5 15 12 11 19 2 32 38 42 13 4 + 15 13 11 20 1 32 38 51 5 2 16 13 7 57 38 52 23 9 10 57 38 53 5 2 3 2 + 5 2 2 10 19 48 38 61 1 4 3 3 2 10 19 2 2 11 1 32 38 59 3 4 4 1 3 10 + 24 9 4 30 38 59 3 5 3 1 2 10 26 8 14 19 39 60 2 5 2 2 2 10 26 8 19 13 + 41 65 4 1 2 10 27 7 23 4 3 2 41 64 8 9 29 6 24 2 47 63 9 9 30 5 73 64 + 8 9 31 4 73 64 7 10 31 4 73 63 8 10 6 1 26 2 39 1 32 64 8 10 6 2 26 1 + 39 11 22 64 8 10 6 2 26 1 6 1 32 18 14 65 7 10 6 4 4 1 5 1 10 1 3 1 + 38 25 8 65 7 10 6 4 1 5 8 13 5 1 31 29 2 68 6 11 5 3 2 5 7 14 5 1 31 + 99 6 12 5 2 2 6 6 14 37 100 5 13 1 14 5 14 37 101 4 29 5 13 37 102 3 + 20 3 6 6 12 37 102 3 12 2 6 4 5 6 12 37 102 3 12 1 8 3 4 1 2 4 12 37 + 103 1 13 1 10 1 6 4 8 3 2 37 128 1 4 7 5 5 2 37 128 2 1 9 1 8 3 38 + 131 8 1 8 4 37 134 4 2 8 3 5 1 32 135 2 8 3 3 4 6 28 146 2 4 1 1 1 6 + 28 146 1 5 37 133 2 17 37 128 7 17 37 127 5 7 3 10 37 128 1 2 2 4 10 + 5 37 137 10 6 36 128 2 1 5 1 9 7 36 127 19 6 37 122 24 7 36 123 23 7 + 36 124 22 7 36 125 21 7 36 127 19 7 36 129 16 8 5 5 26 129 16 8 7 7 + 22 130 1 1 12 10 35 137 7 10 35 138 6 10 1 8 26 137 6 24 22 131 13 27 + 7 1 11 131 11 36 11 132 11 36 10 134 9 37 8 136 7 38 8 136 7 184 5 + 184 5 184 4 2152 2 186 3 121 0 + + + + 26838.0 + + + 1.33098591549 + + + 7124.0 + + + 0.203256597417 + + + 0.903336074364 + + + 0.439746675905 0.463610171989 0.376466429667 0.127901415106 + -0.0274649434935 0.0897721744728 -0.00541981537011 0.090638401181 + -0.00219632681055 + + + 189.0 + + + 0.936507936508 1.94366197183 + + + 0.656084656085 0.232804232804 0.888888888889 1.94708994709 + 0.647887323944 2.76056338028 3.49295774648 0.760563380282 + + + 142.0 + + + 23.0 98.0 0.248196248196 30.0 4.0 9.0 + + + 0.0 0.992957746479 + + + 0.265444518966 + + + 0.0 0.245271867612 0.727659574468 0.330969267139 0.49726443769 + 0.632387706856 0.237082066869 0.00295508274232 0.232218844985 + 0.571513002364 0.0522796352584 0.0 0.0 0.154513888889 + 0.402976190476 0.167824074074 + + + 0.0 0.0 0.0 0.048309178744 0.652173913043 0.86231884058 + 0.606280193237 0.0 0.0 0.0 0.391203703704 0.523148148148 + 0.705882352941 0.6875 0.678240740741 0.037037037037 0.120204603581 + 0.101449275362 0.644927536232 1.0 0.864450127877 0.0 0.0 + 0.012077294686 0.730392156863 0.997685185185 0.775462962963 0.125 + 0.127450980392 0.0 0.0 0.0 0.31862745098 0.467592592593 + 0.511574074074 0.185185185185 0.0 0.0 0.0 0.0 0.0 0.12077294686 + 0.768115942029 0.840579710145 0.204603580563 0.0144927536232 0.0 + 0.0 0.0 0.0 0.0717592592593 0.4375 0.526960784314 0.0763888888889 + 0.0138888888889 0.0 0.0 0.0 0.0 0.108796296296 0.691176470588 + 0.340277777778 0.592592592593 0.0648148148148 + + + 0.462617163361 0.124238787473 0.170571263025 0.136727048904 + 0.18400078368 0.254738751233 0.0402585827289 0.297657920778 + 0.220824923193 0.0810318304724 0.0389847354925 0.185387871441 + 0.103737325926 0.0668580282587 + + + + + + + + + 1 1 17 2 14 1 31 36 31 36 31 36 31 36 31 36 31 36 31 36 31 36 31 36 + 31 35 32 36 31 36 31 36 31 36 31 36 31 36 31 36 31 35 32 35 32 35 34 + 1 4 28 41 25 41 26 40 28 40 27 40 28 32 3 3 29 32 3 3 29 32 3 4 28 32 + 4 1 29 33 34 34 1 3 29 38 29 28 1 5 1 3 29 28 1 5 2 1 30 28 1 4 34 28 + 1 4 34 28 1 4 34 27 2 5 34 4 20 1 4 4 62 5 62 5 62 5 63 4 14 12 37 4 + 1 26 36 4 1 27 35 4 1 27 35 32 35 32 35 32 35 32 35 31 38 29 38 28 39 + 28 39 27 40 29 37 31 36 31 36 31 36 31 36 31 36 31 36 31 36 31 36 31 + 36 31 35 32 35 32 35 32 35 32 36 31 36 31 36 31 36 31 36 31 36 31 36 + 31 36 31 36 31 36 31 35 32 33 34 2 28 1 6 0 + + + + 5628.0 + + + 0.797619047619 + + + 3008.0 + + + 0.129986702128 + + + 1.59891837014 + + + 0.504145510961 0.505206998206 0.105786588616 0.180631145502 + 0.0951703939273 -0.00037196149551 -0.00364599477522 + -0.00204767596975 -0.00415918214235 + + + 67.0 + + + 0.358208955224 0.27380952381 + + + 0.89552238806 0.179104477612 0.238805970149 0.119402985075 + 0.0952380952381 0.761904761905 0.190476190476 0.047619047619 + + + 84.0 + + + 3.0 21.0 0.118942731278 4.0 2.0 4.0 + + + 0.0 0.988095238095 + + + 0.53447050462 + + + 0.955357142857 0.732142857143 0.133928571429 0.0 0.957983193277 1.0 + 0.291316526611 0.173669467787 0.159663865546 0.238095238095 1.0 + 0.952380952381 0.0 0.137254901961 0.924369747899 0.87675070028 + + + 0.9125 1.0 0.25 0.670454545455 0.2625 0.0 0.0 0.0 0.9 1.0 0.9875 + 1.0 0.3 0.0 0.0 0.0 0.922222222222 1.0 1.0 1.0 0.2 0.0 0.0 0.0 0.9 + 1.0 1.0 1.0 0.5375 0.488636363636 0.375 0.363636363636 0.35 + 0.329545454545 0.275 0.409090909091 1.0 1.0 1.0 0.909090909091 0.0 + 0.0 0.0 0.272727272727 1.0 1.0 1.0 0.909090909091 0.0 0.0 0.0 + 0.272727272727 1.0 1.0 1.0 0.909090909091 0.0 0.0 0.0 + 0.252525252525 0.766666666667 0.939393939394 0.844444444444 + 0.777777777778 + + + 0.378833622171 0.205691236133 0.0305240801181 0.0147939880078 + 0.00642700309541 0.344466485433 0.0964357702116 0.0235417238796 + 0.00837893079416 0.0148245820253 0.0365729170112 0.195274145265 + 0.135886743016 0.0595717861154 + + + + + + + + + 71 3 73 4 72 5 73 3 75 2 75 2 75 2 75 2 75 2 40 4 2 5 2 2 20 2 40 32 + 3 2 40 33 2 2 40 37 40 37 40 37 40 37 40 37 40 37 41 36 41 36 41 36 + 41 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 6 1 + 33 37 6 1 33 37 6 1 34 36 6 1 33 37 6 1 33 37 5 2 33 37 6 1 34 36 6 1 + 34 36 6 2 33 36 6 2 33 36 6 2 33 36 5 3 33 36 6 3 5 1 26 36 6 29 5 37 + 6 32 1 38 6 71 6 21 1 49 5 73 4 73 4 73 4 39 4 2 7 21 4 39 20 5 3 6 4 + 39 21 3 5 5 4 39 21 2 7 4 4 39 31 3 3 41 31 2 2 43 29 3 2 43 28 6 1 + 41 30 4 1 42 30 3 3 41 30 5 1 18 2 21 30 5 1 42 28 48 1 1 27 5 3 40 + 31 3 3 40 31 3 1 1 1 40 32 2 2 41 32 2 2 41 32 1 4 40 32 1 4 40 32 1 + 4 41 31 1 4 41 31 1 4 41 35 42 36 41 36 41 36 41 35 42 35 42 35 42 35 + 42 35 42 36 41 36 41 35 42 35 19 1 1 5 16 36 4 1 1 6 4 13 1 1 10 35 7 + 7 4 17 7 35 7 7 4 18 6 35 7 9 2 19 5 35 7 9 2 19 6 34 7 9 2 19 6 34 7 + 31 4 35 6 33 4 34 5 34 4 34 5 34 4 34 5 35 3 34 5 35 3 34 5 35 3 34 1 + 1 3 35 3 35 5 34 3 35 4 36 2 35 4 36 2 36 2 37 2 33 0 + + + + 8239.0 + + + 0.719626168224 + + + 3644.0 + + + 0.158891328211 + + + 0.750554938957 + + + 0.486972095442 0.491557587557 0.123479497171 0.155550704906 + -0.0862371827977 0.000330373729241 0.00263175934524 + 0.000263974770348 0.000403475037716 + + + 77.0 + + + 0.454545454545 0.757009345794 + + + 0.727272727273 0.311688311688 0.363636363636 0.363636363636 + 0.18691588785 0.635514018692 1.04672897196 1.04672897196 + + + 107.0 + + + 9.0 43.0 0.154302670623 4.0 7.0 4.0 + + + 0.0 0.990654205607 + + + 0.442286685277 + + + 0.0 0.300194931774 0.927875243665 0.536062378168 0.0526315789474 + 0.304093567251 0.996101364522 0.33918128655 0.633603238866 + 0.978557504873 0.224171539961 0.222222222222 0.544230769231 + 0.857407407407 0.151851851852 0.0 + + + 0.0 0.0 0.0714285714286 0.547008547009 0.888888888889 + 0.809523809524 0.820512820513 0.563492063492 0.0 0.0 0.0 + 0.623076923077 1.0 1.0 0.8 0.0285714285714 0.0 0.0 0.0 + 0.606837606838 0.982905982906 1.0 0.641025641026 0.0 + 0.0615384615385 0.138461538462 0.0785714285714 0.569230769231 1.0 + 1.0 0.761538461538 0.0 0.284615384615 1.0 1.0 0.961538461538 0.4 + 0.45 0.5 0.35 0.247863247863 1.0 1.0 0.948717948718 0.0 0.0 0.0 0.0 + 0.230769230769 1.0 1.0 1.0 0.0769230769231 0.0 0.0 0.0 + 0.307692307692 0.638461538462 0.7 0.730769230769 0.438461538462 + 0.107142857143 0.0 0.0 + + + 0.486202892411 0.147348057155 0.00956733588409 0.00795584112038 + 0.131338162982 0.316248108606 0.0610759293876 0.0591170430352 + 0.0439153739779 0.00967834320282 0.137127165267 0.303307186947 + 0.0845585270012 0.0507405748763 + + + + + + + + + 3 1 69 1 69 1 69 1 68 2 68 2 67 3 67 4 65 6 65 5 65 5 29 3 32 6 28 4 + 32 6 28 5 31 7 26 6 31 6 29 3 33 4 30 2 34 3 30 4 33 3 30 3 33 5 28 5 + 33 37 32 37 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 + 36 34 36 34 36 34 36 34 36 34 36 33 37 33 37 34 36 33 37 36 29 43 26 + 39 37 33 37 33 37 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 34 + 36 34 36 34 36 34 36 34 35 35 35 35 35 35 35 35 35 36 15 9 1 4 5 36 2 + 28 4 35 3 29 3 35 3 30 2 35 3 30 2 35 3 30 2 35 3 31 2 34 3 30 3 34 4 + 28 5 33 4 28 4 34 3 29 6 25 1 8 1 29 7 23 3 37 7 22 4 36 8 21 6 35 7 + 24 2 39 3 27 1 40 2 26 3 39 2 26 3 37 4 26 3 37 4 26 3 38 4 25 3 38 3 + 1 22 3 3 38 28 1 3 38 31 40 30 40 30 40 30 40 30 40 30 40 31 39 30 40 + 30 40 31 39 31 39 31 39 31 39 31 39 31 39 31 39 31 39 31 39 31 40 15 + 4 6 44 4 1 11 4 6 2 1 41 31 40 3 1 5 2 1 1 17 39 11 3 17 39 31 38 32 + 39 31 39 31 39 32 38 32 38 32 37 33 37 33 38 32 38 32 38 32 38 32 38 + 32 38 33 37 32 38 32 38 32 38 6 4 1 6 2 3 1 4 5 38 7 7 7 7 5 37 6 23 + 5 34 1 1 5 22 8 34 6 24 4 37 5 24 4 37 4 25 5 36 4 25 5 36 4 25 5 36 + 4 25 4 37 3 26 5 36 4 26 4 36 4 24 6 36 5 22 7 36 5 24 5 36 4 27 2 38 + 3 67 2 32 0 + + + + 10150.0 + + + 0.48275862069 + + + 3323.0 + + + 0.204333433644 + + + 1.51230477993 + + + 0.48310632526 0.498081552814 0.110139405574 0.41105136395 + 0.163637935517 -0.000855252585691 0.00901362459519 0.00204165103235 + 0.0276068678697 + + + 70.0 + + + 1.17142857143 0.448275862069 + + + 0.857142857143 0.457142857143 1.54285714286 1.42857142857 + 0.248275862069 0.303448275862 0.634482758621 0.606896551724 + + + 145.0 + + + 18.0 51.0 0.165333333333 8.0 5.0 2.0 + + + 0.0 0.993103448276 + + + 0.327389162562 + + + 0.562091503268 0.75 0.00653594771242 0.0 0.484567901235 + 0.739197530864 0.0324074074074 0.00750750750751 0.101307189542 + 0.0947712418301 0.736928104575 0.642289348172 0.0 0.0 + 0.547839506173 0.551051051051 + + + 0.458333333333 0.868055555556 0.875 0.625 0.0277777777778 0.0 0.0 + 0.0 0.0 0.944444444444 1.0 0.5 0.0 0.0 0.0 0.0 0.0 0.944444444444 + 1.0 0.444444444444 0.0 0.0 0.0 0.0 0.037037037037 0.956790123457 + 0.956790123457 0.555555555556 0.12962962963 0.0 0.0185185185185 + 0.0116959064327 0.166666666667 0.263888888889 0.222222222222 + 0.180555555556 0.631944444444 0.972222222222 1.0 0.578947368421 0.0 + 0.0 0.0 0.0 0.388888888889 0.969135802469 0.981481481481 + 0.0760233918129 0.0 0.0 0.0 0.0 0.382716049383 0.962962962963 1.0 + 0.093567251462 0.0 0.0 0.0 0.0 0.364197530864 0.481481481481 + 0.641975308642 0.497076023392 + + + 0.420925438244 0.227758518811 0.0461533845021 0.0176149920038 + 0.0249159776536 0.483936208251 0.119440101446 0.0600672048932 + 0.00780970948719 0.01587261637 0.201116692932 0.448097594995 + 0.265717078853 0.0638968864112 + + + + + + + + + 37 1 73 4 69 7 68 6 68 4 71 3 71 4 69 11 7 11 45 36 38 36 38 36 39 35 + 39 35 39 35 39 35 39 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 + 36 38 36 39 35 39 35 39 35 39 31 43 35 39 35 39 35 39 35 39 35 39 35 + 39 35 39 35 39 35 39 6 4 25 39 7 4 24 39 35 40 34 2 4 34 34 2 16 22 + 34 2 33 4 35 2 72 2 72 2 72 2 19 3 50 2 20 1 20 3 11 1 3 5 8 2 40 29 + 3 2 39 32 1 2 39 35 39 35 39 36 38 36 38 36 38 35 40 32 45 29 44 31 + 42 32 42 33 41 32 42 33 41 34 39 35 39 35 39 35 40 34 40 35 39 35 39 + 35 39 35 39 34 40 35 39 35 39 35 39 36 38 36 38 36 38 35 39 36 38 37 + 38 54 20 68 6 69 5 70 4 71 3 72 2 73 1 30 0 + + + + 6808.0 + + + 0.804347826087 + + + 3175.0 + + + 0.126614173228 + + + 0.694673430564 + + + 0.520258871751 0.514320325344 0.125149738845 0.155800058876 + -0.0900541572548 -0.0013960624508 0.00421283658866 + -0.00216478017378 -0.00506902941216 + + + 74.0 + + + 0.391891891892 0.141304347826 + + + 0.216216216216 0.162162162162 0.918918918919 0.162162162162 + 0.0434782608696 0.217391304348 0.304347826087 0.0 + + + 92.0 + + + 2.0 20.0 0.221238938053 1.0 6.0 6.0 + + + 0.0 0.989130434783 + + + 0.466363102233 + + + 0.0 0.125603864734 0.891304347826 0.533816425121 0.00228832951945 + 0.0823798627002 0.990846681922 0.725400457666 0.717391304348 + 0.871980676329 0.403381642512 0.30193236715 0.661327231121 + 0.990846681922 0.169336384439 0.0 + + + 0.0 0.0 0.0 0.231481481481 0.757575757576 0.805555555556 + 0.575757575758 0.185185185185 0.0 0.0 0.0 0.25 1.0 1.0 1.0 + 0.416666666667 0.0 0.0 0.0 0.166666666667 0.959595959596 1.0 1.0 + 0.444444444444 0.00909090909091 0.0 0.0 0.15 1.0 1.0 1.0 0.5 + 0.646464646465 0.888888888889 0.79797979798 0.759259259259 + 0.626262626263 0.638888888889 0.666666666667 0.546296296296 + 0.292929292929 1.0 1.0 0.935185185185 0.363636363636 0.0 0.0 0.0 + 0.363636363636 1.0 1.0 1.0 0.323232323232 0.0 0.0 0.0 + 0.263636363636 0.966666666667 0.963636363636 1.0 0.381818181818 0.0 + 0.0 0.0 + + + 0.32782449633 0.203898823588 0.0374644481507 0.0226935722169 + 0.0859329318185 0.334260582488 0.0631654854597 0.0355554125176 + 0.0236739509852 0.0145167024734 0.0586565196595 0.166666232912 + 0.0431367333887 0.0480424459194 + + + + + + + + + 41 2 78 3 78 3 78 3 40 11 1 1 13 2 9 4 39 20 3 19 39 20 3 19 39 20 3 + 19 39 20 3 19 39 20 3 19 40 20 2 19 40 20 2 19 40 41 40 41 40 41 40 + 41 40 41 39 42 38 44 37 44 37 45 36 45 37 44 38 43 38 42 39 42 39 42 + 39 42 39 41 40 42 39 4 1 37 40 41 40 41 40 42 39 70 4 3 4 77 4 77 4 + 20 5 2 1 15 1 33 4 21 1 55 4 21 1 55 4 25 6 13 5 28 5 23 8 12 6 27 5 + 25 6 13 5 27 5 19 1 5 4 18 2 27 5 19 2 4 4 3 1 43 5 19 2 5 4 2 1 43 5 + 20 1 55 5 3 4 12 2 14 3 38 6 1 30 2 4 38 42 39 42 39 43 38 43 38 43 + 38 43 38 44 3 1 26 51 3 2 25 51 37 44 38 43 4 1 33 43 37 44 38 43 38 + 43 38 43 37 44 38 43 38 43 38 43 38 43 38 43 38 43 38 43 38 43 38 43 + 38 44 36 45 34 47 1 1 18 4 10 3 0 + + + + 6318.0 + + + 1.03846153846 + + + 3328.0 + + + 0.132512019231 + + + 1.53888380604 + + + 0.511053936298 0.515882554945 0.153041542662 0.116893390552 + 0.0895700252322 -0.00194711827851 0.00231617364293 + 0.000710064926597 0.00249216820762 + + + 81.0 + + + 0.506172839506 0.551282051282 + + + 0.0987654320988 0.83950617284 0.641975308642 0.345679012346 + 0.512820512821 0.25641025641 1.23076923077 0.0512820512821 + + + 78.0 + + + 10.0 56.0 0.193548387097 2.0 5.0 5.0 + + + 0.0 0.987179487179 + + + 0.526748971193 + + + 0.715789473684 0.895 0.376315789474 0.0 0.694736842105 0.9825 + 0.363157894737 0.0 0.15 0.4075 0.884210526316 0.8375 0.0 + 0.228571428571 0.917293233083 0.969047619048 + + + 0.488888888889 0.84 0.87 0.71 0.588888888889 0.01 0.0 0.0 + 0.488888888889 1.0 1.0 1.0 0.988888888889 0.0 0.0 0.0 + 0.333333333333 0.93 1.0 0.94 0.811111111111 0.0 0.0 0.0 + 0.455555555556 1.0 1.0 0.99 0.7 0.02 0.0 0.0 0.288888888889 0.31 + 0.43 0.7 0.888888888889 0.76 0.69 0.66 0.0 0.0 0.0 0.5 + 0.888888888889 1.0 1.0 1.0 0.0 0.0 0.0 0.5 1.0 1.0 1.0 0.96 0.0 0.0 + 0.0 0.418181818182 0.909090909091 0.781818181818 0.981818181818 + 0.936363636364 + + + 0.35348568619 0.203594162686 0.0155149948183 0.0142839587622 + 0.0239716188679 0.314988020424 0.0868512453679 0.0319781099815 + 0.0236348881727 0.0166397980016 0.0571293557348 0.150910150418 + 0.0421447026672 0.0710734673659 + + + + + + + + + 13 2 18 7 13 8 13 8 12 4 3 1 13 2 4 2 12 9 12 10 10 12 15 7 14 6 14 8 + 13 6 16 4 29 4 17 5 19 2 14 9 10 17 5 16 5 16 5 6 1 1 3 3 6 6 7 1 18 + 3 18 3 18 2 97 3 17 5 14 1 1 4 12 11 10 10 11 10 12 9 12 8 14 7 14 6 + 15 6 15 6 16 4 17 4 17 3 15 0 + + + + 966.0 + + + 0.45652173913 + + + 287.0 + + + 0.707317073171 + + + 0.609318996416 + + + 0.468466898955 0.477739063105 0.0935163735655 0.595463695431 + -0.170110300368 0.00434613087486 -0.00861785275951 -0.0060815561017 + 0.0628056518965 + + + 21.0 + + + 1.66666666667 0.130434782609 + + + 0.952380952381 2.09523809524 2.28571428571 1.14285714286 + 0.173913043478 0.0 0.173913043478 0.0 + + + 46.0 + + + 4.0 16.0 0.261538461538 5.0 2.0 1.0 + + + 0.0 0.978260869565 + + + 0.297101449275 + + + 0.0 0.25 0.0909090909091 0.683333333333 0.0727272727273 + 0.583333333333 0.254545454545 0.7 0.654545454545 0.4 0.163636363636 + 0.0166666666667 0.575757575758 0.319444444444 0.0 0.0 + + + 0.0 0.0 0.0 0.0833333333333 0.1 0.0 0.666666666667 0.0 0.0 0.0 0.0 + 0.777777777778 0.2 0.0555555555556 1.0 0.833333333333 0.0 0.0 + 0.333333333333 0.833333333333 0.2 0.416666666667 1.0 0.916666666667 + 0.0 0.222222222222 0.277777777778 0.888888888889 0.0 0.388888888889 + 0.888888888889 0.166666666667 0.533333333333 0.611111111111 0.0 + 0.611111111111 0.2 0.0 0.0555555555556 0.0 0.9 0.666666666667 + 0.416666666667 0.666666666667 0.6 0.0 0.0 0.0 0.666666666667 + 0.944444444444 0.5 0.555555555556 0.0 0.0 0.0 0.0 0.2 + 0.444444444444 0.222222222222 0.0 0.0 0.0 0.0 0.0 + + + 0.330525943693 0.274774439331 0.0710253058624 0.0359982349041 + 0.101643653802 0.343340996219 0.227793998309 0.0708745079374 + 0.0360623298604 0.0480686187807 0.23572713421 0.0415596008773 + 0.36526203915 0.176915494281 + + + + + + + + + 39 26 3 3 35 38 34 39 34 39 34 39 34 39 34 39 34 39 34 39 35 38 35 38 + 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 36 37 36 37 36 + 37 36 38 34 40 32 41 1 4 28 40 1 4 28 46 26 41 1 5 26 41 1 6 27 38 2 + 3 30 37 4 2 30 37 4 2 30 37 4 2 30 37 4 2 30 37 4 3 29 37 4 3 29 37 4 + 3 29 37 4 3 29 38 3 3 28 39 3 4 27 38 4 22 7 40 4 43 1 25 5 37 27 4 5 + 36 29 3 5 36 30 2 5 36 30 2 5 36 30 2 5 34 33 1 5 5 1 27 34 1 6 4 1 + 27 34 1 5 5 2 28 38 36 37 37 36 37 37 36 37 36 37 36 37 36 37 36 37 + 36 37 36 38 1 1 1 3 22 45 1 7 19 46 29 44 6 2 28 37 1 1 2 3 29 37 36 + 38 35 38 35 38 35 38 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 38 + 35 38 35 38 36 37 15 3 18 37 36 37 36 37 1 13 23 36 3 14 20 36 4 20 + 13 36 4 21 12 35 6 21 11 61 12 29 0 + + + + 6716.0 + + + 0.79347826087 + + + 3361.0 + + + 0.1428146385 + + + 0.693091873524 + + + 0.513686402856 0.471618533207 0.103651647791 0.19119649713 + -0.0861236196245 -5.9368549378e-05 0.00183632918078 + -0.00353901544554 0.00823587402418 + + + 73.0 + + + 0.671232876712 0.45652173913 + + + 1.2602739726 0.712328767123 0.657534246575 0.0547945205479 + 0.0434782608696 0.869565217391 0.652173913043 0.260869565217 + + + 92.0 + + + 3.0 41.0 0.157556270096 4.0 4.0 4.0 + + + 0.0 0.989130434783 + + + 0.500446694461 + + + 0.0 0.282608695652 0.734299516908 0.521739130435 0.169082125604 + 0.275362318841 0.978260869565 0.835748792271 0.992753623188 + 0.927536231884 0.159420289855 0.364734299517 0.887871853547 + 0.869565217391 0.0205949656751 0.0 + + + 0.0 0.0 0.323232323232 0.453703703704 0.616161616162 0.444444444444 + 0.333333333333 0.203703703704 0.0 0.0 0.0 0.333333333333 + 0.989898989899 0.898148148148 1.0 0.574074074074 0.0 0.0 0.0 + 0.305555555556 1.0 1.0 1.0 0.555555555556 0.373737373737 + 0.305555555556 0.313131313131 0.462962962963 1.0 0.916666666667 1.0 + 0.814814814815 0.969696969697 1.0 1.0 0.898148148148 0.272727272727 + 0.361111111111 0.636363636364 0.814814814815 1.0 1.0 1.0 + 0.824074074074 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.833333333333 0.0 0.0 + 0.0 0.0 0.772727272727 0.8 0.927272727273 0.741666666667 + 0.0818181818182 0.0 0.0 0.0 + + + 0.370913350381 0.191356957791 0.0202593304658 0.026435559054 + 0.0499207552857 0.347848330279 0.075327356866 0.0297879701174 + 0.0400060700577 0.0158889339304 0.0934713815767 0.227364372689 + 0.126729035284 0.0347312402443 + + + + + + + + + 35 3 98 2 33 3 98 4 30 5 134 1 372 1 134 2 134 3 20 7 4 2 99 37 99 37 + 99 37 99 37 99 37 99 37 99 37 99 37 99 37 99 37 99 37 99 37 99 37 99 + 37 99 37 99 37 99 37 99 37 99 37 20 1 78 37 19 3 77 36 20 4 82 26 23 + 6 75 37 19 5 75 37 20 7 72 37 20 8 71 38 18 9 71 38 18 9 71 38 17 10 + 72 37 18 9 72 37 17 10 72 36 17 11 72 37 15 11 73 37 15 12 72 37 15 + 14 6 1 62 38 15 14 5 3 61 38 16 14 4 8 57 37 13 18 2 10 56 37 13 32 + 54 38 12 33 53 38 12 35 51 39 11 36 50 40 9 38 49 22 8 9 10 38 49 3 + 10 1 20 5 10 40 47 3 32 4 10 40 47 3 32 3 11 40 47 3 32 3 10 41 47 3 + 32 2 11 41 14 2 31 3 32 3 11 34 3 2 14 4 30 3 32 4 9 36 2 2 14 5 28 5 + 31 4 9 40 13 6 29 3 32 4 9 7 1 33 9 13 26 2 32 5 8 7 2 32 9 12 61 5 8 + 7 2 31 10 11 63 4 8 40 10 10 63 5 8 8 3 28 11 11 60 7 7 14 3 23 10 13 + 61 4 1 1 6 15 2 22 11 14 60 6 6 16 1 22 10 15 60 5 7 39 10 15 60 5 7 + 18 3 18 10 13 62 5 10 8 1 5 4 17 10 14 62 5 11 15 2 17 10 14 62 4 13 + 3 4 7 3 16 11 14 3 9 49 3 16 1 7 4 4 15 9 29 49 3 15 1 11 1 3 15 8 31 + 48 3 17 5 10 2 3 9 8 33 46 4 18 2 16 8 9 34 45 4 36 8 9 35 45 2 37 7 + 9 37 83 7 9 38 83 6 9 39 81 7 9 40 80 6 10 40 77 9 11 40 77 8 12 4 1 + 35 79 5 12 31 1 9 77 6 12 31 1 4 1 4 77 6 12 3 1 30 5 1 79 5 12 2 3 + 26 7 2 80 3 13 2 4 24 7 3 80 3 13 2 5 23 6 1 1 1 81 3 12 3 6 23 5 1 + 83 3 13 1 8 22 5 1 84 2 22 22 5 1 108 22 5 1 111 26 110 26 110 26 109 + 3 3 11 2 8 108 4 3 11 3 6 104 1 3 6 1 12 6 3 102 34 103 13 4 16 111 4 + 5 15 113 3 5 15 105 31 106 1 1 28 108 27 110 26 111 25 112 2 1 20 118 + 18 116 19 119 17 121 15 122 3 4 7 123 1 1 1 1 9 122 14 123 12 123 13 + 126 11 126 10 126 10 127 9 127 9 130 6 132 1 11 0 + + + + 17272.0 + + + 1.07086614173 + + + 4625.0 + + + 0.219027027027 + + + 1.92145373961 + + + 0.478478478478 0.466694122694 0.365569536414 0.175280261547 + 0.218562687462 0.00580739278858 0.0156110874721 0.0158703259721 + 0.0135714526153 + + + 136.0 + + + 0.919117647059 1.32283464567 + + + 0.441176470588 1.20588235294 0.529411764706 1.5 0.251968503937 + 1.79527559055 2.64566929134 0.472440944882 + + + 127.0 + + + 13.0 88.0 0.245080500894 17.0 3.0 7.0 + + + 0.0 0.992125984252 + + + 0.267774432608 + + + 0.720113851992 0.666360294118 0.0 0.0 0.0853889943074 0.546875 + 0.228860294118 0.0 0.0 0.342830882353 0.465073529412 + 0.0101102941176 0.0 0.0404411764706 0.639705882353 0.530330882353 + + + 0.447058823529 0.977941176471 0.970588235294 0.411764705882 0.0 0.0 + 0.0 0.0 0.427450980392 0.992647058824 1.0 0.283088235294 0.0 0.0 + 0.0 0.0 0.125490196078 0.161764705882 0.220588235294 0.334558823529 + 0.327205882353 0.0 0.0 0.0 0.0 0.0514705882353 0.650735294118 + 0.981617647059 0.588235294118 0.0 0.0 0.0 0.0 0.0 0.139705882353 + 0.992647058824 0.830882352941 0.290441176471 0.0 0.0 0.0 0.0 0.0 + 0.238970588235 0.433823529412 0.305147058824 0.0404411764706 0.0 + 0.0 0.0 0.0 0.161764705882 0.713235294118 0.974264705882 0.75 + 0.202205882353 0.0 0.0 0.0 0.0 0.194852941176 0.676470588235 + 0.691176470588 0.477941176471 + + + 0.389075260525 0.249394491352 0.0563861723261 0.0275199539882 + 0.108270682349 0.428345689589 0.160652243207 0.0326360685496 + 0.0295563334482 0.039954523302 0.223466162828 0.187337321823 + 0.342823104368 0.0968993182449 + + + + + + + + + 3 1 18 9 10 6 1 3 11 4 16 1 19 2 19 3 14 11 9 4 1 1 44 4 4 1 10 11 9 + 4 5 1 1 0 + + + + 260.0 + + + 1.53846153846 + + + 66.0 + + + 1.51515151515 + + + 1.20754716981 + + + 0.384370015949 0.52904040404 0.378314828728 0.230712775134 + 0.175397222918 0.144172935777 0.0442949741619 0.0956122874674 + -0.00741654877701 + + + 20.0 + + + 0.6 0.307692307692 + + + 0.8 1.2 0.4 0.0 0.307692307692 0.0 0.307692307692 0.307692307692 + + + 13.0 + + + 2.0 8.0 0.181818181818 2.0 2.0 1.0 + + + 0.0 0.923076923077 + + + 0.253846153846 + + + 0.533333333333 0.4 0.733333333333 0.0 0.6 0.0666666666667 + 0.466666666667 0.1 0.133333333333 0.0 0.0666666666667 0.6 0.0 0.0 + 0.0 0.35 + + + 0.0 0.25 0.0 0.0 0.5 1.0 0.0 0.0 0.333333333333 1.0 1.0 0.5 + 0.833333333333 0.666666666667 0.0 0.0 0.0 1.0 0.5 0.0 0.75 0.5 0.0 + 0.0 0.0 0.833333333333 0.0 0.0 0.5 0.0 0.0 0.333333333333 0.0 0.5 + 0.0 0.0 0.25 0.0 0.5 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + 0.666666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 + 0.0 0.166666666667 0.666666666667 + + + 0.479997371526 0.148393077547 0.207376011871 0.0978229950393 + 0.215663230053 0.234264040326 0.0989011152377 0.211302940397 + 0.113155218267 0.112553186124 0.271034839163 0.298217452928 + 0.109182957755 0.102495811953 + + + + + + + + + 13 2 20 4 20 4 19 6 18 6 17 8 5 2 9 10 3 2 9 2 1 7 13 3 1 8 1 2 9 15 + 8 16 8 16 8 16 7 17 7 17 7 17 6 17 7 17 7 10 3 3 8 16 8 16 7 11 3 3 7 + 12 3 2 6 7 1 5 2 3 6 7 1 4 3 1 1 1 5 13 1 4 6 18 6 18 4 20 4 20 4 10 + 1 9 4 8 4 8 4 19 5 18 7 17 7 17 7 16 7 17 7 7 1 9 7 13 1 2 8 16 8 16 + 8 16 8 16 9 14 10 14 10 14 10 14 11 12 13 11 14 10 14 9 16 8 16 8 17 + 1 2 4 21 3 11 0 + + + + 1344.0 + + + 0.428571428571 + + + 764.0 + + + 0.265706806283 + + + 0.786821705426 + + + 0.455611199636 0.50711565921 0.0372739661082 0.249766972849 + -0.042551667683 0.000573701648024 0.00428304480736 -0.001956863103 + -0.000349415081077 + + + 24.0 + + + 0.791666666667 0.339285714286 + + + 0.166666666667 1.16666666667 1.33333333333 0.5 0.357142857143 + 0.642857142857 0.285714285714 0.0714285714286 + + + 56.0 + + + 7.0 34.0 0.25 0.0 6.0 3.0 + + + 0.0 0.982142857143 + + + 0.568452380952 + + + 0.0 0.321428571429 0.964285714286 0.535714285714 0.5 0.97619047619 + 0.928571428571 0.928571428571 0.821428571429 0.833333333333 + 0.880952380952 0.369047619048 0.416666666667 0.511904761905 + 0.107142857143 0.0 + + + 0.0 0.0 0.0 0.142857142857 0.952380952381 0.904761904762 + 0.714285714286 0.0 0.0 0.0 0.238095238095 0.904761904762 1.0 1.0 + 1.0 0.428571428571 0.0 0.52380952381 1.0 1.0 0.952380952381 + 0.952380952381 1.0 0.761904761905 0.571428571429 0.904761904762 1.0 + 0.904761904762 0.809523809524 1.0 1.0 0.952380952381 0.952380952381 + 1.0 1.0 1.0 1.0 0.952380952381 0.952380952381 0.428571428571 + 0.333333333333 1.0 0.857142857143 0.47619047619 1.0 0.571428571429 + 0.0952380952381 0.0 0.047619047619 0.857142857143 1.0 + 0.761904761905 0.428571428571 0.0 0.0 0.0 0.190476190476 + 0.571428571429 0.285714285714 0.0 0.0 0.0 0.0 0.0 + + + 0.435424250116 0.207140349115 0.0189452112694 0.0158095707785 + 0.212210862476 0.312601266537 0.135780588022 0.0370284356305 + 0.0154729474469 0.0187035319584 0.13809405336 0.146596619203 + 0.209393542381 0.0899934562762 + + + + + + + + + 41 1 80 2 41 2 21 12 3 2 42 20 2 19 41 20 2 19 41 20 1 20 41 20 2 19 + 41 19 3 19 41 20 1 20 41 20 1 20 41 20 1 20 41 20 1 20 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 40 43 39 44 38 43 + 39 43 39 43 39 44 39 43 33 4 2 42 35 2 3 42 36 1 3 42 35 2 4 40 36 2 + 4 40 36 2 4 41 19 4 11 3 4 43 3 4 3 20 1 4 5 49 3 25 5 18 2 30 1 26 5 + 77 6 25 1 50 6 19 7 50 6 18 9 49 6 18 3 4 1 1 1 48 6 16 5 55 6 16 3 3 + 1 2 6 45 6 3 29 44 39 43 40 43 40 42 40 42 41 41 41 41 41 41 41 41 41 + 41 41 36 46 4 2 28 48 4 3 28 47 4 3 33 44 1 5 32 51 31 44 1 2 1 2 32 + 42 6 3 31 44 1 5 32 43 40 42 40 42 40 42 40 42 40 42 40 42 41 41 41 + 41 41 41 41 42 39 44 38 47 35 48 34 51 5 13 13 80 2 1 0 + + + + 6642.0 + + + 1.01234567901 + + + 3407.0 + + + 0.137364250073 + + + 1.55270394134 + + + 0.504016784616 0.49913780452 0.154238045011 0.12881995232 + 0.0981484674024 -0.00118058481645 0.00213114148572 + 0.000321376851543 0.00236971735684 + + + 82.0 + + + 0.5 0.555555555556 + + + 0.0 0.634146341463 0.829268292683 0.487804878049 0.543209876543 + 0.691358024691 0.691358024691 0.296296296296 + + + 81.0 + + + 3.0 35.0 0.218390804598 7.0 5.0 5.0 + + + 0.0 0.987654320988 + + + 0.512947907257 + + + 0.8125 0.94 0.2475 0.0 0.852380952381 0.995238095238 0.271428571429 + 0.00226757369615 0.0475 0.25 0.98 0.816666666667 0.0 0.22619047619 + 0.888095238095 0.893424036281 + + + 0.65 0.9 0.96 0.8 0.39 0.0 0.0 0.0 0.7 1.0 1.0 1.0 0.6 0.0 0.0 0.0 + 0.64 0.98 1.0 0.98 0.3 0.0 0.0 0.0 0.781818181818 1.0 1.0 1.0 + 0.663636363636 0.1 0.00909090909091 0.0 0.09 0.1 0.2 0.47 1.0 0.92 + 0.72 0.7 0.0 0.0 0.0 0.33 1.0 1.0 1.0 0.854545454545 0.0 0.0 0.0 + 0.44 1.0 1.0 1.0 0.845454545455 0.0 0.0 0.0363636363636 + 0.427272727273 0.836363636364 0.736363636364 0.863636363636 + 0.876033057851 + + + 0.379950232128 0.201034756526 0.0119578945997 0.0107585033586 + 0.0142693334791 0.352443864329 0.0834597284609 0.0100265438856 + 0.00941969215837 0.0169710456079 0.0702652094577 0.1989824543 + 0.0754556210139 0.0624456806542 + + + + + + + + + 36 1 75 3 26 1 6 1 40 4 3 3 12 16 38 39 39 37 40 37 39 38 39 39 38 38 + 40 38 38 39 38 39 38 39 38 38 40 38 39 38 39 37 40 37 40 37 40 37 40 + 35 42 35 42 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 41 36 + 41 36 41 37 40 37 40 37 40 37 40 37 7 7 26 37 7 10 19 2 2 37 7 14 2 1 + 10 4 2 37 7 31 2 37 7 31 2 38 6 36 7 7 13 8 6 36 30 5 6 36 31 4 6 17 + 1 18 31 3 6 17 3 17 31 3 6 17 2 18 31 3 6 18 1 18 31 3 6 37 31 3 6 37 + 31 3 6 37 31 3 4 40 29 5 4 41 28 6 1 41 29 6 2 40 29 6 2 40 29 47 31 + 5 2 40 29 7 2 38 31 3 5 38 31 1 7 38 31 2 6 38 31 2 7 37 31 3 6 38 31 + 1 7 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 + 38 39 38 39 38 39 38 40 2 4 31 53 24 64 4 1 8 71 6 73 4 73 5 73 4 74 + 2 76 1 36 0 + + + + 6930.0 + + + 0.855555555556 + + + 3248.0 + + + 0.141625615764 + + + 0.711475922452 + + + 0.494749805548 0.480222920241 0.124241753626 0.162186882409 + -0.0877687868063 0.000650652108792 0.00279171258949 + 0.00141654836769 -0.00237264417943 + + + 77.0 + + + 0.350649350649 0.466666666667 + + + 0.103896103896 0.363636363636 0.311688311688 0.571428571429 + 0.177777777778 0.444444444444 1.11111111111 0.0888888888889 + + + 90.0 + + + 4.0 19.0 0.244131455399 2.0 4.0 4.0 + + + 0.0 0.988888888889 + + + 0.468686868687 + + + 0.0 0.217391304348 0.906698564593 0.54233409611 0.172248803828 + 0.288329519451 0.983253588517 0.727688787185 0.873205741627 + 0.933638443936 0.105263157895 0.155606407323 0.697727272727 + 0.736956521739 0.179545454545 0.0 + + + 0.0 0.0 0.0 0.388888888889 0.808080808081 0.79797979798 + 0.666666666667 0.185185185185 0.0 0.0 0.0 0.441666666667 1.0 1.0 + 1.0 0.341666666667 0.0 0.0 0.0 0.342592592593 0.929292929293 1.0 + 1.0 0.416666666667 0.327272727273 0.327272727273 0.281818181818 + 0.483333333333 1.0 1.0 1.0 0.533333333333 0.763636363636 1.0 1.0 + 0.866666666667 0.154545454545 0.245454545455 0.3 0.291666666667 + 0.727272727273 1.0 1.0 0.87962962963 0.0 0.0 0.0 0.0 0.827272727273 + 1.0 1.0 0.841666666667 0.0 0.0 0.0 0.0 0.463636363636 0.5 0.5 + 0.608333333333 0.381818181818 0.336363636364 0.0 0.0 + + + 0.345430415381 0.191079296366 0.0160493594839 0.0152356262118 + 0.0875743994916 0.33395563619 0.0741753581002 0.0256850774913 + 0.0307819354855 0.02477957385 0.0966811946396 0.193613024982 + 0.0887751095368 0.0504823865606 + + + + + + + + + 1 3 3 4 1 23 1 5 1 4 2 4 2 1 1 2 4 2 4 2 4 2 4 2 2 0 + + + + 84.0 + + + 0.428571428571 + + + 54.0 + + + 0.833333333333 + + + 0.922480620155 + + + 0.437037037037 0.415954415954 0.035716100188 0.228750698572 + -0.00619824213789 0.000550537014455 0.00445870965777 + -0.00459634391138 0.0496114510098 + + + 6.0 + + + 0.0 0.0714285714286 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.285714285714 0.0 + + + 14.0 + + + 1.0 5.0 0.0555555555556 0.0 2.0 1.0 + + + 0.0 0.928571428571 + + + 0.642857142857 + + + 0.333333333333 1.0 1.0 0.0 1.0 1.0 0.833333333333 0.5 1.0 1.0 1.0 + 1.0 0.5 0.75 0.0 0.0 + + + 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 + 1.0 0.0 0.0 0.0 0.0 0.0 0.5 1.0 0.0 0.0 0.0 0.0 0.0 + + + 0.496397090033 0.167686415314 0.149643747512 0.0712374734045 + 0.352101998189 0.225528672677 0.126111458464 0.0449619357509 + 0.0482430527835 0.0977910023023 0.0455097676361 0.244545978193 + 0.079671000759 0.122218676983 + + + + + + + + + 1 3 3 2 1 2 1 2 1 2 1 2 1 2 1 2 1 37 1 2 1 2 1 2 1 2 1 2 19 0 + + + + 99.0 + + + 0.0909090909091 + + + 64.0 + + + 1.03125 + + + 1.01785714286 + + + 0.515625 0.4228515625 0.00926208496094 0.797836303711 + -0.0305328369141 -4.75645065308e-05 -0.00402247905731 + 0.000293850898743 -0.0836752653122 + + + 3.0 + + + 1.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 33.0 + + + 4.0 4.0 0.0 1.0 3.0 1.0 + + + 0.0 0.787878787879 + + + 0.646464646465 + + + 0.125 0.75 1.0 0.333333333333 0.125 0.75 1.0 0.333333333333 0.875 + 1.0 1.0 0.333333333333 0.875 1.0 0.625 0.0 + + + 0.25 0.0 0.5 1.0 1.0 1.0 0.75 0.0 0.25 0.0 0.5 1.0 1.0 1.0 0.75 0.0 + 0.25 0.0 0.5 1.0 1.0 1.0 0.75 0.0 0.75 1.0 1.0 1.0 1.0 1.0 0.75 0.0 + 0.75 1.0 1.0 1.0 1.0 1.0 0.75 0.0 0.75 1.0 1.0 1.0 1.0 1.0 0.75 0.0 + 0.75 1.0 1.0 1.0 1.0 0.25 0.0 0.0 0.75 1.0 1.0 1.0 1.0 0.25 0.0 0.0 + + + 0.42943428214 0.257485789924 0.063471529356 0.021645342781 + 0.424746283629 0.32155788491 0.235786264719 0.00975621622394 + 0.0642102115349 0.0384468822382 0.405475037994 0.338193524819 + 0.280235213323 0.221212018701 + + + + + + + + + 552 2 166 1 167 1 167 2 166 3 164 5 164 5 163 3 166 1 167 1 167 1 167 + 1 167 1 167 1 167 5 163 19 3 1 9 1 135 27 5 2 134 34 134 34 134 34 + 134 34 135 33 135 33 135 33 135 33 135 33 135 33 135 33 135 33 135 33 + 135 34 134 34 134 34 17 1 116 34 16 2 1 1 115 33 16 5 114 33 16 5 114 + 33 16 6 113 17 1 14 17 7 112 33 17 7 111 18 1 14 17 7 111 18 1 14 17 + 8 110 33 16 11 108 33 13 2 1 9 1 1 78 1 29 33 13 12 80 1 29 33 12 13 + 1 1 78 1 29 33 12 15 78 1 29 33 12 10 3 2 78 1 29 33 12 11 2 1 79 1 + 29 33 12 12 81 1 31 31 11 13 8 2 71 2 31 30 11 15 5 4 70 8 27 28 11 + 18 1 6 69 17 15 31 11 26 68 17 14 32 10 26 69 17 9 1 3 34 9 7 2 17 69 + 17 8 2 1 36 9 26 3 1 65 18 6 3 1 36 9 31 64 18 6 40 8 33 63 18 5 24 1 + 3 1 12 8 28 2 4 63 16 6 21 9 12 7 35 62 17 4 13 2 6 11 2 4 5 7 35 62 + 19 1 21 12 2 5 4 6 15 1 20 13 1 47 43 19 3 6 14 3 19 12 3 46 43 18 4 + 5 16 2 14 1 4 11 5 44 43 19 3 6 37 11 5 44 43 19 3 6 38 8 9 42 42 20 + 3 6 38 8 9 42 41 21 3 5 38 9 8 43 41 22 2 5 11 1 25 10 8 45 18 1 20 + 21 4 4 37 11 8 44 21 1 16 23 3 5 14 2 20 10 12 41 37 24 2 5 16 2 19 + 10 9 44 35 27 2 4 16 4 16 11 9 44 35 27 2 4 15 5 16 10 13 41 5 1 29 + 27 2 4 14 6 16 10 13 42 4 1 29 27 2 4 2 2 11 6 15 9 14 42 4 1 29 28 1 + 4 2 3 12 4 14 10 15 41 4 2 28 28 1 10 4 3 4 4 2 1 11 10 17 39 4 2 2 1 + 25 28 1 11 3 5 2 4 2 3 8 11 21 35 4 1 30 27 1 11 3 4 1 5 3 3 8 11 22 + 34 35 27 1 13 1 16 8 10 24 33 35 27 1 31 7 10 25 33 34 59 7 10 25 33 + 34 58 8 9 27 32 34 57 9 9 28 31 34 58 7 10 29 30 34 58 4 1 2 10 29 30 + 34 58 7 9 31 29 35 57 7 9 6 2 24 29 11 2 21 56 7 10 5 4 23 29 7 2 2 2 + 21 56 7 9 6 6 3 1 16 30 11 4 1 1 17 57 6 9 6 6 2 2 1 2 1 1 3 4 3 31 + 12 2 2 1 17 57 6 11 3 7 1 6 3 7 1 32 12 2 2 2 16 59 4 12 2 7 1 5 5 12 + 2 26 2 6 2 3 2 1 17 59 3 13 3 3 4 5 5 12 2 26 3 10 2 1 17 59 3 13 3 2 + 6 4 9 9 1 26 3 19 11 59 3 13 3 2 6 5 8 37 2 23 7 59 2 14 2 3 6 4 8 4 + 2 32 2 26 4 59 2 14 2 2 7 4 7 6 1 32 2 26 4 59 2 19 5 7 5 6 2 31 2 27 + 4 58 1 22 4 6 6 3 5 30 2 27 3 93 6 2 5 31 1 28 2 93 7 1 5 31 1 28 3 + 96 9 31 1 28 3 96 8 10 1 21 1 29 2 101 3 10 1 21 1 29 2 90 1 5 8 10 1 + 21 1 29 2 77 3 6 3 1 1 4 9 10 1 21 1 107 3 1 2 2 7 3 10 9 2 130 2 4 3 + 1 4 2 11 9 2 22 1 106 3 3 22 9 2 22 1 106 3 4 20 10 2 22 1 107 26 10 + 2 22 1 108 25 10 2 22 1 109 24 10 2 22 2 109 22 10 3 22 2 110 21 10 3 + 23 1 112 18 11 3 23 1 114 16 11 3 23 1 115 15 11 3 22 3 115 3 3 7 12 + 3 22 3 122 6 11 5 21 3 114 2 6 5 12 5 20 5 113 13 12 5 20 5 114 12 12 + 5 21 3 115 12 12 5 21 3 117 11 10 6 21 4 117 9 11 7 19 5 118 8 12 6 + 18 7 118 6 14 4 23 2 119 6 14 3 24 2 119 5 15 3 24 2 121 2 16 3 24 2 + 139 3 164 4 164 4 25 1 138 4 24 2 138 12 16 3 137 21 6 4 137 31 137 + 31 137 31 137 32 136 32 135 34 134 34 134 34 134 34 134 34 134 34 134 + 34 134 34 134 34 134 34 134 34 134 34 135 33 135 33 134 34 135 33 139 + 1 2 26 143 25 143 4 1 20 134 34 134 35 133 35 133 35 133 35 133 35 + 133 35 133 36 132 36 132 35 132 37 131 37 131 37 131 37 132 36 132 36 + 132 4 1 31 132 3 8 25 132 3 9 1 10 14 131 3 23 11 129 6 21 13 129 5 + 26 8 129 4 28 7 129 4 29 6 129 4 28 8 128 4 28 8 127 5 27 9 128 3 28 + 10 161 5 164 4 164 4 164 4 165 3 165 3 165 3 165 3 166 2 167 1 128 0 + + + + 34440.0 + + + 0.819512195122 + + + 7107.0 + + + 0.244125510061 + + + 0.817497364855 + + + 0.410703287389 0.45241849378 0.299499058096 0.312407987619 + -0.113430119405 0.0844137524547 -0.0971875553255 0.0679253227494 + 0.10039332863 + + + 168.0 + + + 1.14880952381 1.78048780488 + + + 1.54761904762 0.642857142857 0.738095238095 1.66666666667 + 0.643902439024 4.29268292683 1.89268292683 0.292682926829 + + + 205.0 + + + 22.0 111.0 0.282392026578 32.0 2.0 9.0 + + + 0.0146341463415 0.99512195122 + + + 0.206358885017 + + + 0.00233426704015 0.370214752568 0.257703081232 0.571886446886 + 0.518207282913 0.499533146592 0.0116713352007 0.0 0.0639589169001 + 0.493930905696 0.00140056022409 0.0 0.0 0.301587301587 + 0.214285714286 0.0 + + + 0.0 0.0 0.00952380952381 0.0 0.0934065934066 0.518095238095 + 0.855311355311 0.272893772894 0.0 0.00915750915751 0.784761904762 + 0.688644688645 0.0805860805861 0.352380952381 0.741758241758 + 0.417582417582 0.247619047619 0.593406593407 0.780952380952 + 0.716117216117 0.0457875457875 0.0 0.0 0.0 0.232380952381 + 0.978021978022 0.512380952381 0.0 0.0 0.0 0.0 0.0 0.0 + 0.168498168498 0.64 0.14652014652 0.0 0.0 0.0 0.0 0.0 + 0.0824175824176 0.822857142857 0.384615384615 0.00549450549451 0.0 + 0.0 0.0 0.0 0.0 0.207619047619 0.516483516484 0.164835164835 0.0 + 0.0 0.0 0.0 0.0 0.00380952380952 0.46336996337 0.567765567766 + 0.112380952381 0.0 0.0 + + + 0.408938349567 0.101374944804 0.205901262622 0.158542719925 + 0.0297300322559 0.145598283415 0.0856937991009 0.425165885294 + 0.293425623689 0.0666418518214 0.0906919076852 0.0188542695849 + 0.123449787359 0.0724884757873 + + + + + + + + + 32 3 99 4 98 7 1 2 5 1 86 28 1 2 71 36 67 34 68 34 68 34 68 34 68 34 + 68 34 67 35 67 35 67 35 67 35 67 35 68 34 68 34 68 34 68 34 68 34 68 + 34 68 34 68 34 68 32 70 34 68 34 68 34 68 34 68 34 68 34 68 34 68 34 + 68 34 68 7 3 11 1 12 68 34 68 34 68 34 36 1 30 35 36 2 29 35 37 1 28 + 36 36 5 24 37 36 66 37 65 37 37 4 25 36 37 19 1 2 14 28 37 24 25 12 1 + 4 36 26 36 4 36 27 36 3 35 28 36 3 35 28 36 3 35 28 36 3 35 28 35 4 + 35 28 35 2 37 28 35 2 38 26 37 1 39 24 38 1 39 24 38 1 38 24 78 25 77 + 25 39 1 37 25 39 2 36 24 38 5 35 25 38 4 35 25 38 3 36 26 37 3 36 26 + 37 3 36 26 37 3 36 25 4 3 30 5 35 25 3 6 28 4 36 25 37 4 36 25 35 7 + 35 25 4 1 28 9 35 25 35 7 35 25 37 5 35 25 36 6 35 25 37 5 35 25 37 5 + 35 25 38 4 35 25 37 6 34 25 37 6 34 25 35 8 34 26 34 8 3 22 9 25 34 + 10 1 27 5 25 35 38 4 25 37 36 4 25 36 38 3 25 3 10 23 38 3 49 13 38 2 + 61 1 38 2 61 2 37 2 60 2 39 1 101 1 101 1 64 0 + + + + 9690.0 + + + 1.07368421053 + + + 4493.0 + + + 0.12997996884 + + + 1.04629128316 + + + 0.49733689149 0.544866482614 0.168293651785 0.116626781456 + 0.0142722340228 0.00221974058929 0.00322239459414 0.0279404398151 + -0.0176863666732 + + + 102.0 + + + 0.421568627451 0.684210526316 + + + 0.196078431373 0.274509803922 0.666666666667 0.549019607843 + 0.126315789474 0.378947368421 1.05263157895 1.05263157895 + + + 95.0 + + + 4.0 32.0 0.201298701299 4.0 2.0 3.0 + + + 0.0 0.989473684211 + + + 0.463673890609 + + + 0.0 0.21 0.94 0.443333333333 0.642140468227 0.716346153846 + 0.49358974359 0.309294871795 0.549565217391 0.631666666667 + 0.476666666667 0.348333333333 0.0 0.0192307692308 0.955128205128 + 0.652243589744 + + + 0.0 0.0 0.0 0.423611111111 0.902777777778 0.847222222222 + 0.736111111111 0.0277777777778 0.0 0.0 0.0 0.416666666667 1.0 1.0 + 1.0 0.0 0.384615384615 0.416666666667 0.384615384615 0.685897435897 + 0.961538461538 1.0 1.0 0.237179487179 0.755244755245 1.0 + 0.980769230769 0.814102564103 0.0128205128205 0.0 0.0 0.0 + 0.719696969697 1.0 0.993055555556 0.861111111111 0.00694444444444 + 0.00694444444444 0.0 0.0 0.202797202797 0.307692307692 + 0.294871794872 0.423076923077 0.897435897436 0.923076923077 + 0.987179487179 0.352564102564 0.0 0.0 0.0 0.0705128205128 1.0 1.0 + 1.0 0.429487179487 0.0 0.0 0.0 0.00641025641026 0.903846153846 + 0.916666666667 0.769230769231 0.410256410256 + + + 0.352893701622 0.0623625157846 0.05160153896 0.150806819089 + 0.142041729145 0.0946356071838 0.0128315152675 0.0971175623508 + 0.332882909285 0.0286815140315 0.224679910659 0.0208511565088 + 0.0764732584106 0.0318762162742 + + + + + + + + + 1 1 11 5 8 5 9 3 10 3 10 3 10 3 9 5 9 4 9 5 9 4 8 4 5 1 3 4 5 3 1 12 + 4 2 10 5 9 2 9 4 10 3 9 4 9 4 7 0 + + + + 273.0 + + + 0.619047619048 + + + 89.0 + + + 1.01123595506 + + + 1.04225352113 + + + 0.310861423221 0.52191011236 0.0822532622002 0.345147091574 + 0.0621786206202 0.0330113414596 -0.0303479934005 0.00298809385914 + -0.0244692834846 + + + 13.0 + + + 0.769230769231 0.0952380952381 + + + 1.23076923077 1.23076923077 0.615384615385 0.0 0.0 0.0 + 0.380952380952 0.0 + + + 21.0 + + + 1.0 6.0 0.25 1.0 4.0 1.0 + + + 0.0 0.952380952381 + + + 0.326007326007 + + + 0.733333333333 0.733333333333 0.466666666667 0.166666666667 0.4 0.6 + 0.8 0.944444444444 0.0 0.0 0.2 0.111111111111 0.0 0.0 0.4 0.0 + + + 0.5 0.333333333333 0.0 0.333333333333 0.0 0.0 0.0 0.0 0.75 1.0 1.0 + 1.0 0.833333333333 0.5 0.166666666667 0.333333333333 0.5 1.0 1.0 + 1.0 1.0 0.5 0.666666666667 1.0 0.25 0.166666666667 0.0 + 0.666666666667 0.666666666667 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.5 + 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 + 0.333333333333 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 0.5 0.0 + 0.0 + + + 0.343156786315 0.208139143365 0.0536455004161 0.106140726357 + 0.178615624323 0.229385656321 0.18026009326 0.106461678983 + 0.118556692094 0.111030426575 0.251647420335 0.151750483847 + 0.239139516967 0.133052344297 + + + + + + + + + 45 1 201 9 197 1 2 11 194 2 2 9 196 3 1 9 197 1 3 8 202 7 201 7 198 3 + 1 8 131 4 11 6 45 13 115 4 9 26 42 13 115 2 4 3 4 26 43 1 2 10 114 1 + 4 33 48 10 112 1 5 34 47 10 112 1 5 34 47 11 117 33 49 12 8 3 104 13 + 1 19 43 1 5 14 6 4 103 18 2 13 42 4 5 12 6 4 101 35 42 3 7 13 109 14 + 2 19 42 4 8 7 112 37 41 4 8 7 112 1 1 35 42 20 110 37 42 21 109 37 42 + 20 20 8 82 37 42 22 16 10 82 37 42 20 20 10 79 38 42 19 23 9 78 38 42 + 16 1 4 5 2 18 6 77 38 42 5 4 12 2 11 12 6 77 38 42 6 3 12 3 10 13 8 + 74 32 48 6 5 10 3 6 1 3 4 1 6 1 2 4 2 4 72 37 42 5 6 10 3 11 3 8 3 11 + 70 37 42 7 5 10 3 5 2 1 4 10 1 6 2 7 67 37 43 4 8 1 1 2 2 1 6 7 3 30 + 64 37 43 3 12 1 9 8 2 24 1 7 61 38 43 4 7 2 1 2 8 30 1 4 3 10 57 37 + 43 4 7 5 8 34 12 3 56 37 44 4 7 4 8 35 10 6 61 30 44 4 7 4 9 29 1 5 + 79 27 44 4 5 6 10 32 2 4 5 2 67 2 1 13 1 11 17 1 26 5 3 7 13 2 3 19 9 + 3 4 2 42 4 21 1 1 26 13 12 3 10 6 5 3 8 19 19 10 1 1 4 12 4 25 7 1 2 + 7 1 1 1 5 29 12 31 1 3 4 11 18 15 19 1 11 5 23 13 3 5 6 28 11 36 5 8 + 20 15 20 1 2 1 36 20 4 30 11 35 8 5 19 17 23 2 35 20 7 1 2 2 1 21 11 + 35 9 4 23 18 20 1 35 12 2 5 9 3 1 21 11 35 38 17 25 3 27 18 8 28 10 + 33 22 3 16 16 1 2 24 4 24 19 1 34 10 33 21 8 1 8 1 19 29 2 23 4 1 17 + 2 30 10 34 23 9 1 3 9 16 50 3 1 15 4 30 11 38 20 17 6 1 4 15 2 2 40 + 35 4 14 11 38 21 24 4 18 39 20 30 4 10 39 21 25 8 14 38 20 32 2 10 39 + 21 14 23 13 35 20 33 1 10 39 21 16 22 16 31 20 33 1 11 39 21 8 32 17 + 25 22 44 40 24 12 28 15 25 21 42 46 21 15 26 17 2 6 8 26 43 43 27 11 + 31 4 1 19 1 7 1 21 43 42 29 12 36 25 1 21 33 2 8 42 32 2 1 2 18 4 19 + 17 1 28 33 2 8 41 37 2 10 1 8 6 18 46 29 3 7 42 45 11 7 3 24 12 2 23 + 31 1 8 42 45 12 38 6 4 21 41 42 46 10 37 2 3 28 40 1 2 41 45 6 45 28 + 44 42 97 26 44 41 104 20 44 41 104 21 32 3 9 40 103 22 31 3 10 40 103 + 22 32 2 10 40 104 21 33 1 10 40 104 20 33 3 10 39 103 22 32 3 9 40 + 104 21 32 2 11 40 103 20 33 2 11 40 103 20 33 2 11 40 103 20 33 2 11 + 40 103 20 33 2 11 40 103 20 33 3 11 39 103 21 32 3 11 18 1 21 103 20 + 32 3 11 16 1 22 105 18 33 3 11 7 7 1 5 19 105 18 32 4 12 5 20 13 107 + 16 33 3 12 5 24 10 107 15 33 4 11 4 27 8 108 14 35 2 43 6 109 14 36 1 + 44 6 108 14 37 1 43 5 110 2 3 5 1 2 82 4 116 3 2 1 83 5 115 4 86 4 + 160 2 43 4 160 2 43 4 206 3 206 3 208 1 784 3 1 1 204 6 202 7 203 6 + 203 5 205 1 4 0 + + + + 22154.0 + + + 1.97169811321 + + + 5941.0 + + + 0.295573135836 + + + 0.713675396999 + + + 0.487208350058 0.460995022483 0.774401683235 0.0745972845901 + -0.0576400255421 0.0453979981704 0.00697820931915 0.0013910566031 + -7.01380184703e-05 + + + 209.0 + + + 1.51196172249 2.96226415094 + + + 1.12918660287 2.58373205742 0.937799043062 1.3971291866 + 1.7358490566 5.7358490566 2.8679245283 1.35849056604 + + + 106.0 + + + 33.0 136.0 0.270833333333 48.0 4.0 9.0 + + + 0.0 0.990566037736 + + + 0.268168276609 + + + 0.221153846154 0.434472934473 0.78550295858 0.194444444444 + 0.0525147928994 0.520655270655 0.109467455621 0.0 0.0 + 0.106837606838 0.332840236686 0.0349002849003 0.433962264151 + 0.658280922432 0.261248185776 0.138364779874 + + + 0.0 0.0 0.0 0.714285714286 0.920118343195 0.840236686391 + 0.298816568047 0.0 0.372781065089 0.511834319527 0.41124260355 + 0.57967032967 0.674556213018 0.707100591716 0.452662721893 + 0.0521978021978 0.0 0.159763313609 0.562130177515 0.376373626374 + 0.210059171598 0.0 0.0 0.0 0.0 0.0502958579882 0.55325443787 + 0.596153846154 0.227810650888 0.0 0.0 0.0 0.0 0.0 0.0384615384615 + 0.123626373626 0.343195266272 0.0 0.0 0.0 0.0 0.0 0.0 + 0.252747252747 0.653846153846 0.334319526627 0.144970414201 0.0 + 0.162721893491 0.60650887574 0.618343195266 0.645604395604 + 0.48224852071 0.479289940828 0.408284023669 0.0 0.242165242165 + 0.720797720798 0.723646723647 0.645502645503 0.02849002849 + 0.0712250712251 0.0769230769231 0.0873015873016 + + + 0.297186169865 0.274732579582 0.0517041637512 0.0081674286835 + 0.168970514555 0.500779645649 0.148821363708 0.0576701799539 + 0.00632614597194 0.0117742151182 0.0548982082884 0.270570478417 + 0.35760616453 0.0866695000302 + + + + + + + + + 11 3 23 4 22 5 21 6 21 7 19 9 18 2 3 4 18 10 16 11 16 12 18 8 20 7 20 + 7 12 1 7 7 12 1 5 8 13 1 7 2 2 2 8 1 4 3 2 5 12 1 3 12 8 4 2 25 1 27 + 1 26 1 12 1 12 2 12 1 11 3 24 3 11 4 8 5 10 1 10 6 22 5 16 4 2 4 16 + 11 10 4 2 12 3 24 9 18 9 18 9 18 11 5 1 9 21 8 19 6 20 7 19 10 6 22 3 + 25 1 194 2 24 4 23 8 19 8 19 8 19 7 21 6 23 4 23 3 24 1 14 0 + + + + 1566.0 + + + 0.465517241379 + + + 581.0 + + + 0.466437177281 + + + 1.08346134153 + + + 0.406262412287 0.438807863031 0.0602882352249 0.277416276355 + -0.0115444016312 0.00327872028228 0.00845067790541 + -0.000842843299143 0.0624559799803 + + + 27.0 + + + 1.85185185185 0.293103448276 + + + 0.888888888889 2.81481481481 2.51851851852 0.296296296296 + 0.137931034483 0.896551724138 0.137931034483 0.0 + + + 58.0 + + + 5.0 37.0 0.238805970149 5.0 8.0 3.0 + + + 0.0 0.98275862069 + + + 0.371008939974 + + + 0.0119047619048 0.811111111111 0.702380952381 0.0 0.622448979592 + 0.866666666667 0.530612244898 0.266666666667 0.418367346939 + 0.695238095238 0.30612244898 0.219047619048 0.0 0.447619047619 + 0.0204081632653 0.0 + + + 0.0 0.047619047619 0.666666666667 0.875 0.761904761905 + 0.380952380952 0.0 0.0 0.0 0.0 0.666666666667 1.0 0.904761904762 + 0.761904761905 0.0 0.0 0.357142857143 0.428571428571 0.75 1.0 + 0.857142857143 0.5 0.0357142857143 0.125 0.857142857143 1.0 + 0.904761904762 0.791666666667 0.238095238095 0.428571428571 + 0.238095238095 0.75 0.571428571429 1.0 0.666666666667 + 0.916666666667 0.238095238095 0.428571428571 0.0 0.833333333333 0.0 + 0.285714285714 0.428571428571 0.78125 0.178571428571 0.392857142857 + 0.0 0.09375 0.0 0.0 0.52380952381 0.791666666667 0.047619047619 + 0.047619047619 0.0 0.0 0.0 0.0 0.464285714286 0.125 0.0 0.0 0.0 0.0 + + + 0.59664931597 0.11582803149 0.0991887164101 0.0361790966577 + 0.524425211618 0.171310412494 0.0936908599847 0.0776556101392 + 0.0502826817337 0.0512223311755 0.308497977919 0.146785991149 + 0.129603276272 0.081843218561 + + + + + + + + + 37 1 74 2 41 9 3 2 4 3 11 3 41 29 1 5 40 36 39 37 39 37 39 37 39 37 + 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 + 37 39 37 39 37 39 37 38 40 37 39 37 39 37 39 37 39 37 40 37 37 39 36 + 40 36 40 3 3 30 40 36 40 7 1 28 34 1 5 36 33 2 5 36 33 3 5 36 16 19 5 + 71 5 71 5 71 5 71 5 71 5 71 5 8 4 59 5 6 25 40 5 5 27 39 5 4 29 38 5 + 5 28 38 5 5 28 38 5 5 28 38 5 4 29 38 6 2 30 38 6 2 30 38 6 2 30 38 6 + 2 30 38 6 2 30 38 6 2 31 36 40 30 46 3 1 28 44 36 39 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 39 38 38 37 39 38 38 38 38 38 37 39 38 + 38 38 38 38 37 39 34 42 30 46 23 53 9 104 1 76 1 6 2 65 3 7 1 65 2 74 + 3 73 3 74 1 75 2 + + + + 6916.0 + + + 0.835164835165 + + + 3266.0 + + + 0.132578077159 + + + 1.46529042704 + + + 0.491692182078 0.466983057767 0.133922302084 0.148151167216 + 0.0953300560198 0.000840505308055 -0.000453244511851 + 0.000990974951879 -7.78632275766e-06 + + + 76.0 + + + 0.342105263158 0.296703296703 + + + 0.368421052632 0.105263157895 0.210526315789 0.684210526316 + 0.175824175824 0.263736263736 0.659340659341 0.0879120879121 + + + 91.0 + + + 4.0 28.0 0.216346153846 5.0 2.0 3.0 + + + 0.0 0.989010989011 + + + 0.472238288028 + + + 0.837320574163 0.890160183066 0.132723112128 0.00686498855835 + 0.882775119617 1.0 0.141876430206 0.0411899313501 0.0 + 0.299771167048 0.997711670481 0.62700228833 0.0 0.286041189931 + 0.862700228833 0.54233409611 + + + 0.676767676768 0.888888888889 0.833333333333 0.707070707071 + 0.464646464646 0.0555555555556 0.0 0.0277777777778 0.772727272727 + 1.0 1.0 0.990909090909 0.0545454545455 0.0 0.0 0.0 0.757575757576 + 1.0 1.0 1.0 0.0909090909091 0.0 0.0 0.0 0.772727272727 1.0 1.0 1.0 + 0.3 0.166666666667 0.127272727273 0.0333333333333 0.0 0.0 + 0.12962962963 0.555555555556 1.0 0.990740740741 1.0 0.324074074074 + 0.0 0.0 0.0 0.563636363636 1.0 1.0 1.0 0.25 0.0 0.0 0.0 + 0.636363636364 1.0 1.0 1.0 0.194444444444 0.0 0.0 0.0 + 0.563636363636 0.8 0.683333333333 0.863636363636 0.183333333333 + + + 0.495552807824 0.155683566886 0.00317829648933 0.0037143724177 + 0.105967093351 0.373638667273 0.054862324335 0.00975068196576 + 0.0138346288832 0.00206920965667 0.151581747235 0.335779017515 + 0.115925118056 0.0326863941105 + + + + + + + + + 321 1 97 2 96 8 26 1 63 31 1 4 62 36 62 36 62 36 62 36 62 36 62 36 63 + 35 63 35 63 35 63 35 63 35 63 35 63 35 63 35 63 35 63 36 62 36 62 36 + 62 36 63 35 63 35 63 3 4 28 63 4 3 28 63 35 63 35 63 35 63 35 63 35 + 64 34 64 34 64 34 64 34 64 34 64 34 64 34 64 35 63 35 27 2 35 53 8 2 + 35 58 3 2 35 63 35 2 8 2 1 50 36 1 27 34 65 33 65 33 66 32 66 33 35 1 + 29 33 35 1 29 33 35 2 28 34 4 1 30 1 28 34 3 3 28 3 25 42 27 4 26 42 + 27 3 26 43 27 1 26 37 1 6 26 4 25 36 1 6 25 5 25 44 23 6 26 34 2 7 26 + 3 26 34 2 5 29 1 27 33 4 3 30 1 27 33 4 3 30 2 26 33 4 3 30 2 26 33 4 + 4 29 2 27 32 4 5 2 8 6 1 10 3 27 32 4 25 6 4 27 29 1 2 4 35 27 32 4 + 35 27 32 4 36 26 32 5 35 26 33 4 35 26 33 3 36 26 33 3 36 26 33 3 36 + 26 33 3 37 25 33 3 37 26 32 3 37 26 32 4 36 26 32 4 37 25 32 4 37 25 + 32 4 37 25 32 4 37 25 4 21 7 5 36 25 3 24 5 4 37 25 3 26 3 4 37 25 2 + 28 1 5 37 25 2 35 36 26 1 35 4 1 13 1 18 25 1 35 4 1 32 25 1 35 37 25 + 1 35 37 61 28 1 8 61 37 61 38 60 38 60 38 60 38 60 39 59 39 59 39 59 + 39 60 37 61 38 59 39 59 39 59 39 58 8 9 23 58 7 22 12 57 7 24 10 57 7 + 26 8 57 7 27 8 57 6 28 7 57 6 28 8 55 7 28 9 54 7 29 8 55 6 30 7 55 4 + 32 6 56 5 31 7 55 5 33 3 57 5 33 3 58 4 34 2 59 1 37 1 97 1 97 1 54 0 + + + + + 12740.0 + + + 0.753846153846 + + + 4756.0 + + + 0.152859545837 + + + 0.86045987376 + + + 0.472501365611 0.495511178047 0.145531136246 0.200567609971 + -0.0514950850536 0.00815085654615 -0.0263993055797 0.0237589609979 + -0.0129760015176 + + + 98.0 + + + 0.530612244898 0.738461538462 + + + 0.448979591837 1.42857142857 0.122448979592 0.0816326530612 + 0.123076923077 0.769230769231 1.47692307692 0.523076923077 + + + 130.0 + + + 6.0 36.0 0.241469816273 8.0 2.0 3.0 + + + 0.0230769230769 0.992307692308 + + + 0.373312401884 + + + 0.0 0.0568181818182 0.787760416667 0.517676767677 0.68875 + 0.398787878788 0.4675 0.459393939394 0.486979166667 0.602272727273 + 0.307291666667 0.0 0.0 0.563636363636 0.63875 0.0 + + + 0.0 0.0 0.0 0.220588235294 0.703125 0.802083333333 0.734375 + 0.411764705882 0.0 0.0 0.0 0.0 0.651041666667 0.994791666667 + 0.963541666667 0.0 0.510416666667 0.598958333333 0.479166666667 + 0.171568627451 0.651041666667 1.0 0.994791666667 0.0441176470588 + 0.625 1.0 0.971153846154 0.0 0.0384615384615 0.235576923077 + 0.418269230769 0.41628959276 0.619791666667 1.0 1.0 0.0147058823529 + 0.0 0.0 0.0 0.0 0.109375 0.21875 0.447916666667 0.960784313725 + 0.854166666667 0.375 0.0 0.0 0.0 0.0 0.244791666667 1.0 1.0 0.375 + 0.0 0.0 0.0 0.0 0.134615384615 0.841628959276 0.793269230769 + 0.394230769231 0.0 0.0 + + + 0.409123100316 0.0920771868938 0.0607498235179 0.115942666724 + 0.0991587442284 0.172040154919 0.0266665371499 0.100062355677 + 0.292546080023 0.0489160144753 0.381948608667 0.164503570811 + 0.106048974969 0.0248292511638 + + + + + + + + + 92 2 192 1 186 9 155 4 1 12 2 2 5 14 154 2 2 19 2 14 156 38 156 38 + 156 38 156 4 1 33 156 38 156 38 156 38 156 38 157 37 157 37 157 37 + 157 37 157 37 157 37 157 37 157 37 157 33 1 2 159 35 159 33 160 37 + 157 7 3 27 21 5 132 36 21 7 129 37 20 8 130 36 20 10 128 7 1 28 20 11 + 127 5 3 29 20 10 127 5 4 27 21 12 136 1 2 22 21 12 125 2 6 28 20 13 + 125 2 8 25 21 11 1 1 99 7 1 6 1 1 10 1 7 27 21 14 97 17 7 8 3 21 1 6 + 20 13 95 20 8 7 5 26 20 13 95 17 2 1 10 5 4 28 17 14 96 17 2 1 2 5 2 + 7 1 30 16 15 96 16 3 16 1 31 16 15 5 3 88 16 4 47 16 16 3 5 88 16 3 + 47 16 18 1 10 83 16 2 48 15 31 82 16 3 15 2 14 6 2 2 6 15 32 81 17 1 + 15 29 4 15 33 80 33 31 2 15 33 80 33 32 1 15 34 79 33 32 1 15 35 78 + 32 48 37 77 33 47 37 77 33 47 38 76 33 47 39 75 33 48 38 75 33 47 39 + 75 33 46 39 76 33 45 41 76 33 43 43 47 1 25 36 43 41 46 5 24 35 44 39 + 48 3 25 13 1 22 43 5 2 32 17 6 25 3 25 13 1 21 44 5 3 31 16 5 26 5 24 + 35 44 4 8 15 2 10 15 6 26 5 24 36 43 4 18 2 5 9 16 5 27 6 23 22 1 12 + 44 5 22 10 17 5 2 2 23 5 25 13 1 6 2 12 47 3 16 2 2 11 17 11 22 3 27 + 16 5 12 48 3 14 16 16 12 23 1 28 12 2 2 3 14 65 16 16 12 23 1 28 11 9 + 13 67 1 2 10 16 14 2 1 19 1 28 11 10 12 67 1 4 4 2 2 16 14 1 3 18 1 + 27 12 9 14 66 1 4 5 1 2 16 19 17 3 25 35 65 2 5 7 15 20 17 12 17 12 2 + 20 65 2 4 4 2 2 15 22 15 15 2 8 1 15 2 20 66 1 5 3 2 1 16 24 13 41 1 + 21 71 7 16 25 11 64 71 7 15 26 11 37 20 7 71 7 15 27 10 36 26 2 70 8 + 16 27 10 34 27 2 70 7 18 26 10 34 27 3 69 8 14 30 9 34 28 1 69 8 15 + 30 9 34 28 1 69 8 15 29 2 1 7 34 28 2 68 8 16 17 1 8 1 5 6 35 27 2 69 + 7 16 4 2 11 3 4 13 36 27 2 69 7 16 17 4 2 14 36 98 7 16 14 7 2 15 35 + 98 6 17 14 3 2 2 2 15 34 122 4 1 9 1 5 1 3 14 34 122 13 2 5 1 4 13 35 + 121 13 2 9 14 34 123 1 3 8 2 9 14 35 127 5 4 9 14 35 130 1 5 9 14 35 + 135 10 14 4 5 26 136 8 16 3 5 26 137 7 15 35 137 3 19 8 1 27 136 3 19 + 36 137 1 20 36 140 5 6 5 3 35 138 18 3 35 139 17 3 36 138 4 3 9 4 36 + 127 5 3 19 4 36 122 32 4 36 122 3 3 25 5 36 124 29 5 36 129 1 6 17 5 + 36 137 16 5 16 1 19 133 10 2 2 4 2 5 36 133 19 6 37 137 14 6 3 1 33 + 137 3 10 1 7 1 8 6 2 19 137 5 2 4 2 1 7 1 17 1 12 5 131 1 3 15 8 1 32 + 3 130 20 8 1 34 1 131 19 1 1 6 1 34 1 132 19 7 1 34 1 135 15 8 1 32 4 + 136 12 7 5 30 3 140 8 9 4 174 8 9 2 177 7 187 6 187 7 190 2 190 4 189 + 5 190 4 191 3 7 0 + + + + 25220.0 + + + 1.49230769231 + + + 6486.0 + + + 0.224791859389 + + + 0.962815405046 + + + 0.427608927319 0.482496587761 0.474736882543 0.140630892898 + 0.0090557536371 0.142055545139 0.000625426500293 0.126566264326 + -0.00116695544602 + + + 194.0 + + + 1.13917525773 2.16923076923 + + + 1.01030927835 1.15463917526 0.536082474227 1.85567010309 + 0.553846153846 2.67692307692 3.69230769231 1.56923076923 + + + 130.0 + + + 42.0 146.0 0.229548229548 18.0 3.0 7.0 + + + 0.0 0.992307692308 + + + 0.257176843775 + + + 0.0 0.362373737374 0.647786458333 0.400883838384 0.677295918367 + 0.481137909709 0.11862244898 0.0 0.041015625 0.568181818182 + 0.126302083333 0.0 0.0 0.038961038961 0.389030612245 0.263450834879 + + + 0.0 0.0 0.0 0.0686274509804 0.53125 0.893229166667 0.875 + 0.0686274509804 0.0 0.0 0.5859375 0.786764705882 0.638020833333 + 0.528645833333 0.6171875 0.0833333333333 0.528645833333 0.578125 + 0.611979166667 0.620098039216 0.466145833333 0.0182291666667 0.0 + 0.0 0.725 0.8675 0.7225 0.00235294117647 0.0 0.0 0.0 0.0 0.0 + 0.114583333333 0.377604166667 0.455882352941 0.015625 0.0 0.0 0.0 + 0.0 0.0494791666667 0.497395833333 0.926470588235 0.377604166667 + 0.111979166667 0.0 0.0 0.0 0.0 0.0 0.147058823529 0.403645833333 + 0.286458333333 0.0598958333333 0.0 0.0 0.0 0.0 0.00705882352941 + 0.47 0.3925 0.5925 0.390588235294 + + + 0.462112212642 0.133980860498 0.197018354037 0.140311617082 + 0.174892062457 0.249565464106 0.0557745981891 0.330032135922 + 0.216534658705 0.0941792881117 0.108050128895 0.175991390643 + 0.107356349636 0.0817472939196 + + + + + + + + + 2 1 30 2 7 1 22 3 6 2 22 2 6 2 9 2 11 1 7 8 2 5 9 1 6 22 3 1 6 21 4 1 + 6 16 2 1 6 1 5 16 10 1 5 19 7 1 5 13 2 3 6 3 7 11 2 1 9 2 7 11 2 4 6 + 3 6 10 4 3 6 3 6 10 3 3 7 3 5 11 13 3 5 11 4 2 7 4 1 1 1 13 2 4 5 28 + 5 20 12 20 12 19 13 2 1 16 13 2 1 16 13 2 2 4 1 12 11 2 2 1 4 12 3 7 + 1 2 7 12 2 7 2 2 7 5 2 5 11 2 7 4 3 5 11 2 7 5 2 4 12 2 7 5 3 3 12 1 + 8 5 3 3 12 1 8 12 11 1 8 13 10 1 8 12 21 11 20 12 20 12 20 12 20 12 + 20 12 21 11 21 11 21 3 4 4 21 3 3 5 21 3 2 6 20 4 2 6 20 5 1 6 20 5 1 + 2 24 7 25 8 24 8 24 7 26 4 1 1 26 4 1 1 26 6 25 7 25 7 25 7 25 7 25 6 + 27 4 28 4 28 4 28 4 28 4 28 4 29 3 29 1 19 0 + + + + 2208.0 + + + 0.463768115942 + + + 792.0 + + + 0.481060606061 + + + 0.955423476969 + + + 0.453527207559 0.400141117053 0.0474763590109 0.351066229005 + -0.00327908346422 -0.00140912390843 -0.00073376223663 + -0.0136604750767 0.107896617346 + + + 32.0 + + + 1.375 0.840579710145 + + + 0.375 1.25 1.75 2.125 1.44927536232 1.39130434783 0.405797101449 + 0.115942028986 + + + 69.0 + + + 7.0 24.0 0.190721649485 7.0 7.0 4.0 + + + 0.0 0.985507246377 + + + 0.358695652174 + + + 0.235294117647 0.492647058824 0.00735294117647 0.0 0.691176470588 + 0.816176470588 0.632352941176 0.576388888889 0.610294117647 + 0.639705882353 0.632352941176 0.0694444444444 0.227941176471 + 0.154411764706 0.0 0.0 + + + 0.375 0.555555555556 0.6875 0.416666666667 0.0277777777778 0.0 0.0 + 0.0 0.0 0.0 0.90625 0.0277777777778 0.0 0.0 0.0 0.0 0.5 + 0.722222222222 0.96875 0.5 0.416666666667 0.40625 0.416666666667 + 0.222222222222 0.5 1.0 1.0 0.833333333333 1.0 0.6875 0.944444444444 + 0.722222222222 0.4375 1.0 1.0 0.805555555556 1.0 0.6875 + 0.277777777778 0.0 0.5625 0.416666666667 0.3125 0.444444444444 0.5 + 0.3125 0.0 0.0 0.34375 0.416666666667 0.21875 0.194444444444 0.0 + 0.0 0.0 0.0 0.15625 0.0 0.0 0.194444444444 0.0 0.0 0.0 0.0 + + + 0.600657520872 0.134964903855 0.114327959583 0.0601919262552 + 0.474858204033 0.289951407404 0.0774834407389 0.159827074854 + 0.0602102815939 0.0689113701417 0.239379565319 0.333255017664 + 0.140247806627 0.0603203045688 + + + + + + + + + 34 1 109 1 109 1 109 3 107 15 5 1 89 32 78 34 76 35 75 39 71 39 71 19 + 1 19 71 19 1 19 71 26 1 12 71 26 1 12 71 32 1 3 74 39 71 39 71 39 71 + 39 71 39 72 38 72 38 72 38 72 38 72 38 72 38 72 38 72 38 71 39 71 40 + 37 1 32 41 35 3 31 41 36 3 30 41 69 41 70 40 71 39 71 38 72 37 73 37 + 73 37 39 1 33 37 39 2 31 38 39 5 3 1 23 39 39 71 39 23 2 46 39 72 38 + 72 38 38 3 32 34 1 2 37 24 19 1 7 1 2 3 3 9 2 2 37 28 33 2 8 2 4 3 29 + 31 40 4 3 3 29 33 38 4 1 1 1 2 30 34 38 2 37 33 38 3 36 33 38 3 36 33 + 37 4 36 33 37 4 36 33 37 4 36 33 37 4 36 33 37 4 36 33 38 3 36 33 38 + 3 36 33 38 3 36 33 37 4 2 7 22 4 1 33 37 4 18 1 12 4 1 33 38 3 36 33 + 37 5 2 7 26 33 37 5 3 6 27 32 37 5 36 37 29 8 36 38 24 12 36 32 36 6 + 36 32 38 4 36 32 38 4 36 32 38 4 36 32 38 4 36 32 37 5 36 32 37 5 36 + 32 37 5 36 32 37 5 36 32 37 5 36 32 37 6 35 32 37 6 35 32 37 6 36 31 + 37 6 35 32 37 6 3 4 2 1 3 12 11 31 37 6 2 28 6 31 37 6 2 30 4 31 37 + 39 3 32 36 39 3 32 36 39 3 32 2 9 25 38 4 32 1 28 1 2 4 39 3 31 3 73 + 3 32 2 73 3 107 2 70 0 + + + + 10670.0 + + + 1.13402061856 + + + 4847.0 + + + 0.136991953786 + + + 1.0942316534 + + + 0.505384016974 0.552061842377 0.185820730948 0.114038195962 + 0.0194757120424 0.00453969710504 0.00283822871438 0.0311581754734 + -0.013162413591 + + + 110.0 + + + 0.572727272727 0.886597938144 + + + 0.872727272727 0.472727272727 0.545454545455 0.254545454545 + 0.247422680412 0.412371134021 1.60824742268 1.27835051546 + + + 97.0 + + + 10.0 57.0 0.176991150442 5.0 4.0 6.0 + + + 0.0 0.989690721649 + + + 0.454264292409 + + + 0.0 0.21450617284 0.841049382716 0.488888888889 0.61755952381 + 0.770833333333 0.418154761905 0.325714285714 0.493827160494 + 0.694444444444 0.381172839506 0.29037037037 0.0 0.0014880952381 + 0.9375 0.781428571429 + + + 0.0 0.0 0.0448717948718 0.410256410256 0.737179487179 + 0.608974358974 0.679487179487 0.14201183432 0.0 0.0 0.0 + 0.404761904762 1.0 0.994047619048 1.0 0.175824175824 0.369047619048 + 0.47619047619 0.458333333333 0.636904761905 0.839285714286 + 0.833333333333 0.928571428571 0.395604395604 0.625 1.0 1.0 + 0.988095238095 0.0 0.0 0.0 0.0 0.570512820513 0.980769230769 1.0 + 1.0 0.0384615384615 0.0 0.0 0.0 0.125 0.339285714286 0.434523809524 + 0.386904761905 0.785714285714 0.64880952381 0.714285714286 + 0.417582417582 0.0 0.0 0.0 0.0 0.970238095238 1.0 1.0 + 0.604395604396 0.0 0.0 0.0 0.00595238095238 0.892857142857 + 0.886904761905 0.952380952381 0.598901098901 + + + 0.325179578338 0.0857595324643 0.0856670041543 0.156672984041 + 0.157574202166 0.10369819647 0.014443907104 0.151325938739 + 0.316779427401 0.0426862020499 0.208473138332 0.0134031659664 + 0.0628625149918 0.0398149289113 + + + + + + + + + 3 1 170 8 164 26 146 23 3 5 4 1 136 24 3 10 135 37 135 37 135 37 135 + 37 135 37 135 37 135 37 135 37 135 37 135 37 76 1 58 37 75 3 57 37 76 + 1 58 37 133 40 19 2 111 40 19 4 110 41 16 5 110 41 15 7 110 39 17 6 + 111 37 18 7 110 36 19 7 110 37 16 10 109 37 16 12 107 37 16 14 105 36 + 17 15 104 37 16 15 104 37 15 16 104 37 15 17 1 1 101 37 15 20 100 37 + 15 21 99 37 15 22 98 37 14 25 96 37 14 25 96 37 14 27 94 37 14 28 93 + 37 14 29 92 37 13 32 90 37 13 33 90 36 12 34 90 36 12 35 89 1 9 26 12 + 36 88 1 25 10 12 5 2 30 87 1 30 5 12 7 1 21 3 4 121 3 11 29 4 6 120 2 + 11 29 4 6 120 2 11 30 3 6 120 2 11 30 3 6 120 2 11 30 6 2 121 2 12 30 + 5 2 122 1 12 3 3 24 6 1 12 2 108 1 12 3 4 25 4 1 12 3 119 4 7 22 4 1 + 12 4 118 4 7 27 12 1 1 3 117 4 7 27 13 6 115 3 9 26 11 9 115 2 9 25 + 11 10 115 2 9 18 2 5 11 10 115 5 4 27 11 12 114 34 11 12 116 28 2 3 + 11 12 117 32 10 13 119 30 10 13 119 29 10 13 121 28 9 14 103 1 18 27 + 9 15 6 2 94 1 19 26 9 15 5 3 1 2 91 1 20 25 8 16 5 6 90 2 22 1 2 20 8 + 17 3 8 89 2 24 21 8 18 1 10 88 2 24 3 1 16 9 30 87 2 28 16 9 23 2 6 + 86 2 32 1 2 9 9 24 2 7 85 1 37 7 8 26 2 6 123 6 9 31 2 1 115 3 4 8 8 + 36 114 14 8 37 114 13 7 39 116 9 7 40 116 9 7 41 116 9 6 42 118 6 6 6 + 4 32 119 5 5 8 3 32 119 3 10 5 3 5 2 24 12 1 108 1 11 6 1 6 3 23 11 3 + 119 13 3 22 11 5 118 13 2 23 11 1 2 1 119 13 2 15 1 4 2 1 11 5 119 3 + 3 7 1 22 12 5 4 3 112 2 5 5 3 21 11 8 1 5 117 6 4 20 11 7 1 6 118 6 4 + 18 12 13 120 5 8 4 7 3 11 15 3 1 115 4 9 4 6 4 11 20 114 5 8 4 1 3 2 + 4 11 20 115 3 8 5 2 2 2 4 10 22 115 1 1 1 7 6 1 2 2 4 10 23 124 15 10 + 24 123 3 2 10 9 25 123 3 2 9 10 26 122 3 3 8 10 26 122 2 5 2 2 2 11 + 28 120 2 10 1 10 29 120 2 5 1 4 1 10 30 119 2 4 1 16 31 118 1 21 6 2 + 22 1 2 139 5 4 5 2 13 3 1 139 5 4 4 3 10 146 5 4 4 3 10 145 6 4 4 3 8 + 134 2 11 6 3 4 5 7 134 3 10 6 3 4 5 7 131 6 10 6 3 5 4 8 131 5 10 6 3 + 5 4 7 8 4 121 4 11 4 4 4 5 8 7 4 121 4 11 4 4 3 4 10 7 1 125 3 10 5 4 + 3 4 11 6 3 123 2 11 5 5 2 3 12 6 3 123 1 11 5 6 3 1 14 5 3 135 5 6 18 + 5 2 136 5 6 18 5 1 136 7 2 16 3 2 142 20 1 3 5 2 2 3 135 27 1 9 136 5 + 2 29 135 6 1 30 135 6 1 30 136 36 136 35 138 34 143 29 142 29 144 28 + 151 1 1 2 2 15 153 3 1 15 158 3 4 3 2 2 147 1 10 3 4 2 4 1 148 4 5 10 + 2 3 149 23 149 23 151 21 154 19 154 18 154 17 156 16 155 17 160 12 + 167 3 166 3 1 1 165 6 166 6 166 6 166 6 167 4 171 1 10 0 + + + + 27176.0 + + + 1.08860759494 + + + 5655.0 + + + 0.24367816092 + + + 1.94766031196 + + + 0.4925258918 0.426011589991 0.45433381665 0.27554982272 + 0.327925001039 0.00679434277875 0.0384903800519 0.0274438871478 + 0.04332553037 + + + 172.0 + + + 0.936046511628 1.67721518987 + + + 0.186046511628 0.813953488372 1.04651162791 1.6976744186 + 0.708860759494 2.27848101266 2.6582278481 1.01265822785 + + + 158.0 + + + 23.0 128.0 0.269861286255 20.0 2.0 9.0 + + + 0.0 0.993670886076 + + + 0.20808801884 + + + 0.816935002982 0.148837209302 0.0 0.0 0.182468694097 0.612790697674 + 0.04114490161 0.0 0.00298151460942 0.284302325581 0.406678592725 + 0.00581395348837 0.0 0.0 0.370900417412 0.460465116279 + + + 0.83709273183 0.87619047619 0.233333333333 0.0 0.0 0.0 0.0 0.0 + 0.681818181818 0.870454545455 0.327272727273 0.0318181818182 0.0 + 0.0 0.0 0.0 0.00501253132832 0.378571428571 0.488095238095 + 0.183333333333 0.0 0.0 0.0 0.0 0.0 0.329545454545 0.913636363636 + 0.840909090909 0.165071770335 0.0 0.0 0.0 0.0 0.0 0.154761904762 + 0.569047619048 0.518796992481 0.0119047619048 0.0 0.0 + 0.011961722488 0.0 0.00681818181818 0.413636363636 0.858851674641 + 0.252272727273 0.0227272727273 0.0 0.0 0.0 0.0 0.0 0.275689223058 + 0.52380952381 0.569047619048 0.052380952381 0.0 0.0 0.0 0.0 + 0.102870813397 0.565909090909 0.725 0.481818181818 + + + 0.403580105634 0.256751369518 0.0798291499058 0.0365693995917 + 0.19098392689 0.422124166399 0.188676434845 0.0566852314656 + 0.0503503557051 0.0577056490377 0.337867424148 0.193239280555 + 0.387722794764 0.129905725346 + + + + + + + + + 560 1 136 1 1 1 135 4 21 3 1 2 108 5 14 19 101 38 101 38 101 38 101 + 38 101 38 101 38 101 38 101 38 101 38 101 38 101 39 100 39 101 38 101 + 38 101 38 101 38 100 39 101 38 101 39 100 38 101 40 97 43 97 42 97 41 + 98 41 98 40 99 41 18 7 73 41 16 9 74 38 18 12 71 38 17 15 69 32 23 14 + 70 26 2 1 26 14 70 7 2 24 3 1 17 15 2 4 64 37 17 15 2 1 67 8 1 29 16 + 15 3 1 1 2 63 8 2 8 1 19 16 15 1 3 1 5 60 38 16 27 58 38 15 29 57 38 + 15 31 56 37 15 32 55 37 14 35 53 37 14 36 52 37 15 36 51 17 17 3 14 + 14 1 23 50 4 4 3 24 2 14 14 1 1 1 21 50 3 32 2 14 16 1 22 49 2 34 1 + 13 15 3 1 2 19 49 2 48 20 1 12 1 6 49 1 49 20 1 11 3 5 100 30 5 7 48 + 1 48 5 1 24 6 5 48 2 49 1 5 20 1 2 8 3 48 2 62 13 1 2 9 2 48 2 61 17 + 9 2 48 2 58 20 9 1 49 2 58 19 10 1 49 2 58 14 1 4 60 1 59 20 8 2 12 1 + 98 20 4 4 11 2 5 3 90 16 9 2 11 5 2 4 91 15 9 2 11 11 1 1 89 15 7 4 + 11 13 88 5 1 10 7 3 11 13 89 5 1 9 8 3 11 13 76 3 8 2 1 3 4 7 3 1 2 5 + 10 14 76 2 4 2 2 6 6 6 2 2 3 4 10 13 83 9 7 6 1 4 2 3 11 12 62 2 17 + 12 7 5 2 5 1 3 11 13 61 3 18 33 10 14 6 5 50 3 19 31 11 17 1 8 49 3 + 20 29 11 29 47 3 22 27 11 30 46 3 23 27 9 31 46 3 24 1 4 20 10 32 45 + 3 29 20 10 32 46 1 29 20 11 33 1 1 74 19 10 8 1 10 1 14 1 2 74 18 10 + 7 2 10 2 6 3 4 2 2 74 7 4 5 11 28 2 3 3 4 76 2 5 6 10 33 2 5 76 1 5 7 + 9 31 1 2 3 4 76 3 3 6 10 31 2 1 3 4 77 11 10 34 2 5 78 11 9 35 1 5 80 + 8 9 43 79 8 8 9 1 33 83 6 8 6 3 26 2 4 88 1 9 5 5 24 4 3 99 5 4 25 3 + 3 100 3 11 19 106 3 1 4 6 12 4 4 105 1 3 6 4 20 105 3 2 7 2 20 105 4 + 1 5 4 22 104 2 3 1 11 16 1 2 108 2 10 9 2 3 112 8 6 6 120 1 2 5 8 4 1 + 3 130 5 2 2 112 5 13 5 2 4 111 5 12 11 112 4 12 11 128 12 127 3 3 6 + 127 1 137 3 137 1 561 2 136 4 134 7 131 8 131 8 131 7 132 7 133 6 133 + 6 133 5 137 2 11 0 + + + + 17931.0 + + + 1.07751937984 + + + 4241.0 + + + 0.263381278 + + + 1.92506811989 + + + 0.456860051464 0.441654017331 0.391729179689 0.194903380255 + 0.239366247744 0.0247824005898 0.0181908263952 0.0259595959394 + 0.012384965061 + + + 139.0 + + + 1.19424460432 1.53488372093 + + + 0.402877697842 0.892086330935 1.55395683453 1.72661870504 + 0.124031007752 2.07751937984 3.1007751938 0.837209302326 + + + 129.0 + + + 21.0 108.0 0.215106732348 26.0 4.0 5.0 + + + 0.031007751938 0.992248062016 + + + 0.236517762534 + + + 0.75 0.588235294118 0.00275735294118 0.0 0.133928571429 + 0.416964285714 0.11875 0.0 0.0 0.367857142857 0.522321428571 + 0.0294372294372 0.0 0.0 0.595535714286 0.289177489177 + + + 0.514705882353 0.915441176471 0.875 0.301470588235 0.0110294117647 + 0.0 0.0 0.0 0.569852941176 1.0 0.977941176471 0.198529411765 0.0 + 0.0 0.0 0.0 0.15625 0.364583333333 0.298611111111 0.0902777777778 + 0.0486111111111 0.0347222222222 0.0 0.0 0.0 0.0 0.625 + 0.680147058824 0.371323529412 0.0294117647059 0.0 0.0 0.0 0.0 + 0.349264705882 0.904411764706 0.775735294118 0.621323529412 0.0 0.0 + 0.0 0.0 0.00347222222222 0.243055555556 0.260416666667 + 0.451388888889 0.118055555556 0.0 0.0 0.0 0.0 0.0 0.621323529412 + 0.963235294118 0.466911764706 0.0173010380623 0.0 0.0 0.0 0.0 + 0.0972222222222 0.722222222222 0.486111111111 0.202614379085 + + + 0.448508504676 0.223420211482 0.0668529828816 0.0278394733676 + 0.127105967567 0.460835104075 0.130881657265 0.0199264971387 + 0.032363797973 0.0364703701225 0.0650956143764 0.317183825842 + 0.330949833545 0.0721107585775 + + + + + + + + + 28 3 62 14 51 21 3 2 8 1 30 35 30 35 30 35 30 35 31 34 31 34 31 16 2 + 16 31 5 1 10 2 16 31 34 31 34 31 34 31 34 31 34 31 34 31 34 28 1 1 35 + 29 36 30 36 29 37 28 36 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 + 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 1 1 3 9 2 4 11 52 1 1 11 + 55 1 4 5 200 2 62 3 62 5 43 2 14 14 34 3 14 28 21 1 15 30 35 31 34 31 + 34 33 32 32 33 32 33 32 34 32 32 33 32 33 33 32 33 32 33 32 18 2 13 + 32 17 1 15 32 33 32 33 32 33 32 33 32 33 32 34 31 34 31 34 31 34 32 5 + 3 25 32 5 3 8 2 15 32 5 4 7 2 15 32 16 2 15 32 16 1 16 32 33 32 33 30 + 36 31 13 1 20 31 11 3 21 29 7 1 3 4 21 29 11 11 13 52 13 59 6 62 2 30 + 0 + + + + 5655.0 + + + 0.747126436782 + + + 2985.0 + + + 0.136683417085 + + + 0.673838797814 + + + 0.498775125628 0.488640878813 0.104545245073 0.175691119475 + -0.0850519028369 -0.000188991293905 -0.00129532465986 + 0.000988744301868 0.00259551031752 + + + 65.0 + + + 0.492307692308 0.436781609195 + + + 0.553846153846 0.861538461538 0.492307692308 0.0 0.275862068966 + 0.32183908046 0.597701149425 0.551724137931 + + + 87.0 + + + 15.0 47.0 0.179331306991 2.0 4.0 4.0 + + + 0.0 0.988505747126 + + + 0.527851458886 + + + 0.0 0.213068181818 0.971590909091 0.721590909091 0.220238095238 + 0.252840909091 0.974431818182 0.855113636364 0.919642857143 1.0 + 0.1875 0.201704545455 0.770308123249 0.957219251337 0.20320855615 + 0.0 + + + 0.0 0.0 0.0 0.420454545455 0.988636363636 0.897727272727 + 0.795454545455 0.590909090909 0.0 0.0 0.0 0.431818181818 1.0 1.0 + 0.920454545455 0.579545454545 0.0 0.0 0.0 0.318181818182 + 0.931818181818 0.965909090909 0.931818181818 0.647727272727 0.45 + 0.431818181818 0.295454545455 0.397727272727 1.0 1.0 1.0 + 0.840909090909 0.9 0.988636363636 1.0 1.0 0.25 0.215909090909 + 0.340909090909 0.465909090909 0.8 0.977272727273 1.0 1.0 + 0.284090909091 0.0 0.0 0.0 0.7375 1.0 1.0 1.0 0.363636363636 0.0 + 0.0 0.0 0.555555555556 0.787878787879 0.89898989899 0.939393939394 + 0.444444444444 0.0 0.0 0.0 + + + 0.360629993524 0.195511160487 0.0173388437128 0.00553540725114 + 0.0395757518356 0.326432108138 0.0787762920186 0.0125015712745 + 0.00578236526599 0.00279498069156 0.0730613138229 0.212915788867 + 0.110414754039 0.041476335619 + + + + + + + + + 6 2 4 4 4 4 4 3 5 3 5 3 5 3 4 5 3 4 4 4 4 4 4 4 3 5 4 4 4 3 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 3 4 4 5 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 3 5 4 4 4 + 4 4 4 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 1 1 1 5 2 6 2 6 2 6 2 6 2 6 + 2 6 2 5 2 6 1 7 0 + + + + 440.0 + + + 0.145454545455 + + + 185.0 + + + 0.735135135135 + + + 0.8925 + + + 0.456370656371 0.451951951952 0.0142876433775 1.12627011233 + -0.0943928296448 0.000518075876523 -0.000969848842698 + -0.00268043159244 0.211509120426 + + + 8.0 + + + 0.75 0.0181818181818 + + + 0.5 1.0 1.0 0.5 0.0 0.0 0.0 0.0727272727273 + + + 55.0 + + + 3.0 8.0 0.135593220339 0.0 10.0 1.0 + + + 0.0 0.981818181818 + + + 0.420454545455 + + + 0.0 0.107142857143 0.5 0.535714285714 0.269230769231 0.928571428571 + 1.0 0.571428571429 0.923076923077 0.928571428571 0.285714285714 0.0 + 0.653846153846 0.0357142857143 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.285714285714 0.0 0.0 0.0 + 0.428571428571 1.0 1.0 1.0 0.857142857143 0.0 0.142857142857 + 0.714285714286 1.0 1.0 1.0 0.857142857143 0.714285714286 0.0 + 0.857142857143 1.0 1.0 1.0 1.0 0.714285714286 0.0 0.833333333333 + 1.0 1.0 1.0 0.857142857143 0.285714285714 0.0 0.0 0.833333333333 + 1.0 1.0 0.714285714286 0.0 0.0 0.0 0.0 1.0 1.0 0.142857142857 0.0 + 0.0 0.0 0.0 0.0 0.5 0.142857142857 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.509076719309 0.220451303055 0.0738638622787 0.0258884925448 + 0.404608405626 0.410485548177 0.170653874218 0.0184826222599 + 0.0723646695294 0.0459582512716 0.39332588585 0.404058017532 + 0.338543744258 0.140477988042 + + + + + + + + + 13 2 18 4 17 4 16 6 15 6 14 7 14 8 12 9 12 9 12 10 10 11 11 11 11 11 + 9 11 9 12 358 4 3 2 4 1 7 4 3 7 7 2 6 1 2 2 8 1 11 1 8 4 2 6 9 12 9 + 11 11 10 11 9 12 9 12 9 12 8 14 7 14 2 1 4 14 2 2 2 15 2 2 2 20 1 15 + 6 15 6 16 5 18 2 18 3 14 0 + + + + 1134.0 + + + 0.388888888889 + + + 268.0 + + + 0.652985074627 + + + 0.555072028812 + + + 0.450559701493 0.495353421571 0.0972511474982 1.05219350452 + -0.251319352779 0.00159416110235 0.0282630217735 -0.00844200650656 + -0.0845187051518 + + + 21.0 + + + 1.04761904762 0.185185185185 + + + 1.33333333333 1.71428571429 1.14285714286 0.0 0.0 0.0 + 0.518518518519 0.222222222222 + + + 54.0 + + + 1.0 10.0 0.301587301587 4.0 2.0 0.0 + + + 0.0 0.981481481481 + + + 0.236331569665 + + + 0.0 0.0 0.446153846154 0.485714285714 0.0923076923077 + 0.0428571428571 0.384615384615 0.642857142857 0.861538461538 + 0.142857142857 0.215384615385 0.0 0.461538461538 0.119047619048 0.0 + 0.0 + + + 0.0 0.0 0.0 0.0 0.166666666667 0.857142857143 0.285714285714 0.0 + 0.0 0.0 0.0 0.0 0.111111111111 0.619047619048 0.904761904762 + 0.52380952381 0.0 0.0 0.0 0.0 0.0 0.5 0.928571428571 0.785714285714 + 0.0 0.285714285714 0.142857142857 0.0 0.111111111111 0.761904761905 + 0.761904761905 0.238095238095 0.5 1.0 0.285714285714 0.0 0.0 + 0.571428571429 0.0 0.0 1.0 1.0 0.285714285714 0.0 0.0833333333333 + 0.0714285714286 0.0 0.0 0.444444444444 1.0 0.285714285714 0.0 0.0 + 0.0 0.0 0.0 0.0 0.333333333333 0.190476190476 0.0 0.0 0.0 0.0 0.0 + + + 0.17604864833 0.365623496288 0.0788173792099 0.0274741409114 + 0.239011482915 0.508141025787 0.296840274054 0.248703564265 + 0.0595287343187 0.0201508061169 0.270283421136 0.270852558956 + 0.445960093646 0.24585492218 + + + + + + + + + 27 2 27 2 27 2 27 2 25 4 23 3 1 1 11 1 10 7 1 3 7 3 9 6 2 4 2 6 9 7 1 + 11 11 5 9 4 158 4 25 4 25 4 25 4 24 5 24 5 24 5 24 4 25 4 24 5 25 3 + 26 3 25 4 25 4 24 4 26 2 25 3 27 2 25 4 25 3 6 0 + + + + 1015.0 + + + 0.828571428571 + + + 149.0 + + + 1.01342281879 + + + 1.1 + + + 0.754314477469 0.454796683774 0.419342619853 0.604344262865 + 0.142951417933 -0.378166596323 0.0436089300289 -0.196167907606 + 0.169161605027 + + + 29.0 + + + 0.448275862069 0.2 + + + 0.0 0.0 0.0 1.51724137931 0.457142857143 0.342857142857 0.0 0.0 + + + 35.0 + + + 0.0 3.0 0.384615384615 1.0 0.0 0.0 + + + 0.0 0.971428571429 + + + 0.146798029557 + + + 0.0535714285714 0.15873015873 0.0 0.0 0.0714285714286 + 0.238095238095 0.0 0.0 0.0 0.0 0.0 0.031746031746 0.453125 + 0.277777777778 0.541666666667 0.375 + + + 0.0 0.25 0.266666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.533333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.25 0.35 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.133333333333 0.0 0.5625 0.25 0.0 0.125 0.3 0.5 0.6 + 0.5 0.75 0.35 0.5 1.0 0.75 0.4375 0.0 + + + 0.403330515419 0.0917469976945 0.192130062688 0.174160382692 + 0.0576684298305 0.245513567394 0.113361400982 0.323098213093 + 0.300613594394 0.0821849117718 0.186860003806 0.219890285878 + 0.129674633023 0.113340929405 + + + + + + + + + 35 2 111 5 21 8 3 3 73 21 2 17 73 40 74 19 1 14 2 3 74 39 74 39 74 39 + 74 39 74 39 74 39 74 39 74 39 74 39 74 39 74 39 74 39 74 39 74 39 74 + 39 74 39 74 39 75 38 75 34 79 38 75 38 75 38 75 38 75 38 75 38 76 37 + 76 37 76 37 76 37 76 37 76 37 76 37 77 36 77 36 39 2 36 36 39 2 36 36 + 33 1 5 4 1 6 27 36 18 12 1 4 4 19 3 10 5 38 5 29 4 20 5 84 4 20 5 37 + 2 45 4 20 2 2 1 17 28 39 4 20 2 19 31 37 4 21 1 19 31 37 4 21 1 19 31 + 37 5 21 1 18 31 38 4 41 30 38 4 41 30 38 4 41 30 38 4 41 30 38 3 42 + 30 38 3 43 28 39 3 44 27 40 1 44 28 40 1 45 27 40 2 43 28 40 2 43 28 + 40 3 43 27 40 4 41 29 39 4 41 30 37 5 41 30 37 5 3 6 32 30 37 5 4 4 + 33 30 38 5 4 3 33 30 38 5 40 30 38 5 40 30 38 5 40 30 38 5 40 30 38 5 + 40 30 38 5 40 30 8 1 29 6 39 30 38 6 40 29 38 6 40 29 38 6 40 29 39 5 + 40 29 39 6 39 29 39 6 39 29 39 6 39 29 39 6 39 29 17 1 21 6 39 29 39 + 6 4 3 33 28 30 1 5 1 2 6 3 25 12 29 22 15 1 7 2 31 6 29 6 31 1 7 2 34 + 3 29 2 35 1 7 2 35 2 29 2 35 1 7 3 35 1 29 1 44 3 35 1 75 2 35 1 75 2 + 111 2 112 1 112 1 103 0 + + + + 10848.0 + + + 1.17708333333 + + + 5097.0 + + + 0.123994506572 + + + 1.04465786315 + + + 0.501946172819 0.529463151699 0.184925331974 0.103889442785 + 0.00394357745605 0.00384890751751 -0.000372436813445 + 0.0282973612455 -0.0141350626873 + + + 113.0 + + + 0.300884955752 0.916666666667 + + + 0.424778761062 0.424778761062 0.283185840708 0.070796460177 + 0.208333333333 0.833333333333 1.20833333333 1.41666666667 + + + 96.0 + + + 8.0 46.0 0.240837696335 5.0 2.0 4.0 + + + 0.0 0.989583333333 + + + 0.46985619469 + + + 0.0 0.233630952381 0.89880952381 0.46875 0.66369047619 + 0.665178571429 0.5625 0.364583333333 0.626488095238 0.675595238095 + 0.389880952381 0.221726190476 0.0 0.248563218391 0.948275862069 + 0.554597701149 + + + 0.0 0.0 0.0 0.547619047619 0.910714285714 0.696428571429 0.625 + 0.166666666667 0.0 0.0 0.0 0.386904761905 0.988095238095 1.0 1.0 + 0.0833333333333 0.410714285714 0.416666666667 0.321428571429 + 0.583333333333 1.0 1.0 1.0 0.142857142857 0.827380952381 1.0 1.0 + 0.755952380952 0.10119047619 0.14880952381 0.196428571429 + 0.119047619048 0.869047619048 1.0 1.0 0.738095238095 0.0 0.0 0.0 + 0.0 0.303571428571 0.333333333333 0.357142857143 0.607142857143 + 0.815476190476 0.744047619048 0.708333333333 0.178571428571 0.0 0.0 + 0.0 0.529761904762 1.0 1.0 0.994047619048 0.160714285714 0.0 0.0 + 0.0 0.466666666667 0.883333333333 0.916666666667 0.972222222222 + 0.0944444444444 + + + 0.346924960187 0.0857002879886 0.0644614367423 0.14609624574 + 0.134006784504 0.114134577447 0.023312379808 0.119067737918 + 0.312084867998 0.0366671275252 0.211616267381 0.0328796864402 + 0.0932627224528 0.0311162641471 + + + + + + + + + 32 3 152 4 150 6 149 7 148 9 146 9 146 13 142 13 142 13 1 1 140 13 1 + 1 140 3 1 11 140 16 139 16 139 17 138 17 138 17 138 17 138 15 1 1 139 + 14 141 16 6 1 131 18 5 3 130 19 2 7 3 1 123 19 2 13 121 19 1 15 120 + 36 90 2 26 26 2 12 86 5 23 20 2 24 81 4 24 21 1 23 82 4 25 20 2 3 6 + 12 76 2 4 6 23 20 16 8 76 1 5 6 22 21 17 10 72 2 4 8 23 17 19 11 64 9 + 5 6 25 11 15 1 9 10 52 21 5 5 27 9 15 3 9 10 48 24 6 3 28 8 16 24 44 + 27 5 4 27 9 16 24 41 29 5 4 27 9 16 21 40 33 5 4 27 9 16 23 38 33 6 3 + 27 10 12 15 2 13 34 33 6 3 27 5 1 4 13 3 1 11 3 13 32 33 6 3 26 6 1 4 + 19 11 1 14 31 33 6 3 25 7 1 4 18 29 29 34 5 6 2 4 1 5 9 13 1 3 11 33 + 29 32 5 45 12 33 28 32 6 34 3 7 12 34 27 32 6 33 5 1 3 2 14 34 25 32 + 6 33 9 3 15 8 1 21 1 2 24 32 6 33 9 4 17 18 3 6 27 32 6 33 10 3 17 17 + 7 2 28 33 5 31 13 2 18 16 37 4 1 28 6 17 1 12 35 15 37 1 4 10 3 14 6 + 5 1 24 37 14 36 1 2 9 1 19 6 30 38 13 36 32 6 30 39 13 37 30 6 32 39 + 13 37 28 6 33 39 13 35 30 5 33 41 6 1 6 30 12 2 19 5 33 42 13 29 1 5 + 6 2 19 5 33 43 13 33 8 1 19 5 34 43 13 36 3 3 18 5 34 44 5 4 5 34 2 4 + 18 5 34 45 5 4 5 33 2 4 4 2 10 7 34 47 6 2 5 20 1 1 4 7 1 4 18 5 30 + 52 6 1 7 17 1 2 4 6 24 5 29 54 15 13 3 2 8 6 20 5 30 54 15 11 1 1 1 4 + 7 6 20 6 33 51 15 10 3 5 2 4 2 5 7 1 11 6 34 51 14 10 5 15 20 6 33 54 + 12 11 4 2 4 3 26 6 34 55 12 9 40 4 35 45 8 1 7 1 6 7 41 4 35 37 32 7 + 8 7 25 4 36 37 31 8 3 5 1 3 7 17 3 5 35 38 30 9 2 3 4 27 2 5 35 39 17 + 4 9 12 5 28 1 5 35 41 13 6 3 2 3 9 9 28 1 5 35 45 12 2 10 10 7 28 1 6 + 34 43 13 8 2 3 2 7 8 35 34 44 6 4 3 5 24 35 35 44 3 6 6 7 19 35 34 56 + 7 5 18 35 34 48 3 1 11 5 19 34 34 49 14 6 18 34 1 17 16 49 15 4 21 32 + 1 22 12 49 14 3 21 33 1 24 1 1 8 49 10 8 20 31 5 22 1 1 9 54 5 7 20 + 32 4 24 9 56 5 6 19 32 3 28 6 57 7 2 20 63 7 60 2 2 21 62 8 66 2 4 12 + 64 7 67 1 8 8 66 4 80 6 67 2 81 5 149 6 145 2 2 6 145 2 4 4 145 2 4 4 + 145 10 144 11 144 11 145 11 144 11 145 10 147 8 148 7 149 7 149 6 150 + 5 150 5 151 3 153 1 27 0 + + + + 17360.0 + + + 1.38392857143 + + + 4985.0 + + + 0.276429287864 + + + 1.04419285359 + + + 0.481715275697 0.493856343806 0.462184102882 0.0916712816534 + 0.0334341047728 0.0436968113586 -0.00452448184746 0.0115625944643 + -0.00163207061184 + + + 155.0 + + + 1.58064516129 2.25892857143 + + + 0.774193548387 1.21290322581 2.14193548387 2.11612903226 + 0.571428571429 3.64285714286 3.82142857143 1.0 + + + 112.0 + + + 27.0 130.0 0.293222683264 28.0 3.0 10.0 + + + 0.0 0.991071428571 + + + 0.28715437788 + + + 0.182330827068 0.550751879699 0.843045112782 0.0460526315789 + 0.31684981685 0.436813186813 0.0274725274725 0.0357142857143 0.0 + 0.205128205128 0.465201465201 0.0879120879121 0.0 0.682234432234 + 0.512820512821 0.214285714286 + + + 0.0 0.0413533834586 0.233082706767 0.808270676692 0.774436090226 + 0.676691729323 0.0526315789474 0.0 0.334586466165 0.353383458647 + 0.31954887218 0.842105263158 0.93984962406 0.981203007519 + 0.131578947368 0.0 0.235714285714 0.725 0.35 0.139285714286 + 0.00714285714286 0.0964285714286 0.139285714286 0.0 0.0 + 0.289473684211 0.744360902256 0.533834586466 0.0 0.00375939849624 + 0.0 0.0 0.0 0.0 0.229323308271 0.612781954887 0.466165413534 + 0.582706766917 0.0451127819549 0.0 0.0 0.0 0.0 0.0 0.221428571429 + 0.596428571429 0.3 0.0 0.0 0.0 0.492481203008 0.703007518797 + 0.421052631579 0.533834586466 0.481203007519 0.398496240602 0.0 0.0 + 0.653571428571 0.871428571429 0.921428571429 0.171428571429 0.0 0.0 + + + 0.196903971765 0.257644440736 0.0936408265977 0.0523807526084 + 0.146771326675 0.286447548148 0.125792018746 0.0638495396713 + 0.0819035712723 0.0414737863264 0.075833525083 0.165927417568 + 0.132087004722 0.102724614921 + + + + + + + + + 38 1 40 2 38 3 38 3 38 3 38 3 39 2 39 2 39 2 39 1 40 1 37 1 1 2 34 8 + 33 9 32 9 32 6 1 2 33 5 10 2 22 6 9 5 21 3 11 7 19 5 12 3 21 5 11 4 + 20 7 9 5 21 6 9 6 20 6 10 5 8 1 11 6 10 3 10 1 11 6 10 1 1 1 9 2 12 4 + 21 4 13 2 268 4 36 6 35 6 38 4 10 4 21 6 11 3 21 1 1 4 13 1 19 7 36 5 + 33 5 1 1 34 8 31 10 32 10 31 9 30 11 30 12 29 13 28 14 30 12 33 5 802 + 2 39 2 6 2 1 1 29 2 6 2 1 1 29 2 2 10 25 1 1 2 2 9 26 4 2 8 27 15 25 + 16 25 16 25 17 25 15 26 14 28 14 29 2 1 8 33 3 38 2 40 1 40 2 38 5 37 + 4 328 1 38 3 28 0 + + + + 4141.0 + + + 0.405940594059 + + + 518.0 + + + 0.735521235521 + + + 0.548109539174 + + + 0.426447876448 0.485675675676 0.24035219566 1.4087339751 + -0.422276900415 0.0785443865195 0.0825147343202 -0.151946595544 + 0.130993783258 + + + 41.0 + + + 1.26829268293 0.306930693069 + + + 1.17073170732 2.82926829268 0.19512195122 0.878048780488 + 0.435643564356 0.435643564356 0.158415841584 0.19801980198 + + + 101.0 + + + 6.0 12.0 0.281818181818 15.0 6.0 1.0 + + + 0.0 0.990099009901 + + + 0.125090557836 + + + 0.144 0.032 0.028 0.388461538462 0.008 0.476 0.112 0.280769230769 + 0.004 0.028 0.032 0.0 0.392727272727 0.0727272727273 0.0 0.0 + + + 0.0 0.0461538461538 0.0 0.0 0.0 0.1 0.615384615385 0.0 0.0 + 0.507692307692 0.0833333333333 0.0461538461538 0.0153846153846 0.0 + 0.815384615385 0.123076923077 0.0 0.0153846153846 0.0333333333333 + 0.553846153846 0.123076923077 0.1 0.846153846154 0.123076923077 0.0 + 0.0153846153846 0.35 0.923076923077 0.215384615385 0.0 + 0.153846153846 0.0 0.0 0.0 0.0 0.107692307692 0.123076923077 0.0 + 0.0 0.0 0.0 0.0153846153846 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.784615384615 0.183333333333 0.123076923077 0.0 0.0 0.0 0.0 + 0.361111111111 0.397435897436 0.0138888888889 0.0 0.0 0.0 0.0 0.0 + + + 0.383213660198 0.249902280607 0.0479804662786 0.0601353538643 + 0.0963524126813 0.423534359887 0.167673844552 0.160278039574 + 0.188146910761 0.0983787360758 0.193389972341 0.217888375585 + 0.325829407215 0.116541874749 + + + + + + + + + 2 1 137 9 129 9 128 12 125 10 1 3 125 7 2 5 124 5 3 6 124 7 2 6 123 7 + 2 3 126 7 131 6 133 4 135 3 135 4 133 5 133 4 33 5 97 3 34 4 135 1 + 237 1 37 2 98 5 6 3 22 4 97 19 5 1 1 4 8 3 97 34 3 4 97 5 1 14 1 20 + 97 19 2 21 96 20 2 20 96 42 96 42 15 3 78 42 14 3 79 41 97 41 97 41 + 98 41 97 41 97 41 97 41 97 40 16 2 79 41 16 3 78 42 15 3 79 41 15 5 + 78 40 15 5 78 40 17 5 76 40 18 5 76 39 16 9 74 39 17 9 74 1 3 34 12 1 + 4 7 1 1 73 4 1 34 12 2 2 8 1 1 72 40 11 12 1 1 73 40 10 13 1 1 73 40 + 10 13 76 40 9 15 74 39 10 15 4 1 69 39 9 16 4 3 67 39 9 16 3 5 66 39 + 9 17 2 5 66 39 9 24 65 41 8 25 64 40 8 6 2 4 1 13 63 41 8 6 2 4 1 16 + 3 2 55 42 7 5 8 18 1 3 54 42 8 4 8 20 56 42 7 7 1 29 50 44 7 37 50 44 + 6 39 50 2 1 9 7 24 6 8 1 31 52 8 23 9 6 40 52 6 32 2 6 6 1 32 51 8 32 + 1 7 39 51 7 41 5 2 1 1 30 52 7 32 1 8 4 4 30 51 8 33 1 7 3 7 28 52 5 + 35 1 8 2 7 28 51 7 43 4 5 28 28 2 22 6 44 1 1 1 5 26 30 2 23 4 42 8 3 + 26 101 38 90 5 4 40 15 2 74 2 4 31 2 8 12 13 66 1 5 31 1 9 13 9 69 1 + 5 6 2 2 3 27 15 7 77 4 3 2 4 25 15 9 76 4 10 5 3 4 1 11 13 12 75 2 1 + 1 12 2 5 2 4 1 2 6 12 13 75 2 21 1 3 3 5 1 14 15 73 2 21 1 3 3 5 1 13 + 15 73 3 13 2 5 3 4 1 4 2 13 15 68 1 5 2 13 1 7 13 13 14 69 1 28 1 3 9 + 13 15 2 7 59 2 32 8 14 24 90 9 15 26 89 9 12 29 90 6 12 32 86 7 13 33 + 86 4 15 34 84 6 14 35 82 9 11 37 81 9 11 38 80 8 11 40 79 1 1 6 11 41 + 78 1 2 5 12 40 85 1 11 41 98 1 2 38 98 41 97 31 2 1 3 4 97 33 104 5 1 + 23 109 5 3 23 108 4 4 22 110 2 5 22 5 2 101 3 5 25 1 4 101 2 6 24 2 3 + 108 26 113 27 111 3 1 1 1 21 118 20 118 11 8 1 119 10 121 3 5 8 120 6 + 5 10 115 10 4 11 113 11 3 12 114 4 8 15 110 4 4 20 109 6 3 19 111 6 2 + 19 112 5 2 19 113 4 1 20 114 3 1 20 118 17 122 16 122 16 123 14 125 + 13 126 3 4 4 128 2 2 5 130 8 131 7 132 6 132 7 132 6 132 6 133 4 132 + 7 133 2 14 0 + + + + 19872.0 + + + 0.958333333333 + + + 4668.0 + + + 0.26263924593 + + + 1.75836151823 + + + 0.460421631359 0.475111007245 0.364927169718 0.20768522991 + 0.239546617911 0.0327333705534 0.0303670411633 0.037897933892 + 0.0227639784815 + + + 138.0 + + + 1.40579710145 1.32638888889 + + + 1.15942028986 1.50724637681 1.07246376812 1.82608695652 + 0.555555555556 2.0 2.13888888889 0.611111111111 + + + 144.0 + + + 20.0 98.0 0.273489932886 29.0 5.0 4.0 + + + 0.0 0.993055555556 + + + 0.234903381643 + + + 0.487745098039 0.746732026144 0.0138888888889 0.0 0.124603174603 + 0.584920634921 0.14126984127 0.0 0.0 0.263071895425 0.386437908497 + 0.00571895424837 0.0 0.0 0.546031746032 0.45873015873 + + + 0.411764705882 0.748366013072 0.741830065359 0.647058823529 + 0.0555555555556 0.0 0.0 0.0 0.0 0.790849673203 1.0 0.598039215686 + 0.0 0.0 0.0 0.0 0.0326797385621 0.460784313725 0.584967320261 + 0.43137254902 0.0915032679739 0.0 0.0 0.0 0.0 0.0185185185185 + 0.509259259259 0.805555555556 0.462962962963 0.0 0.0 0.0 0.0 0.0 + 0.0392156862745 0.866013071895 0.738562091503 0.235294117647 0.0 + 0.0 0.0 0.0 0.0 0.147058823529 0.205882352941 0.366013071895 + 0.0228758169935 0.0 0.0 0.0 0.0 0.0 0.509803921569 0.990196078431 + 0.627450980392 0.209150326797 0.0 0.0 0.0 0.0 0.0401234567901 + 0.666666666667 0.604938271605 0.388888888889 + + + 0.425027125594 0.233313735439 0.112769049214 0.0464023393566 + 0.15905265725 0.427729153746 0.14778432237 0.151843844646 + 0.0126700598551 0.0472023653657 0.143637541917 0.290260483815 + 0.305837100906 0.0986277888045 + + + + + + + + + 1 1 13 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 3 + 11 2 12 2 12 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 10 4 + 11 4 10 3 11 3 11 4 11 2 11 4 10 3 11 3 11 3 11 3 11 3 11 3 11 3 11 4 + 10 4 11 3 11 3 11 2 12 2 12 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 + 11 3 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 + 12 2 12 3 11 2 13 1 12 3 11 3 11 2 12 2 13 2 12 2 12 2 12 2 12 2 12 2 + 12 2 12 2 12 2 12 2 11 4 11 3 11 2 12 3 11 3 12 2 11 4 10 3 11 3 11 3 + 12 2 11 3 11 3 12 2 12 2 12 2 12 2 12 3 11 2 12 3 11 3 11 3 11 3 11 3 + 11 3 11 3 11 3 11 3 11 3 12 2 12 2 12 2 12 3 11 3 11 3 11 3 11 3 11 3 + 11 3 11 3 11 3 11 3 11 3 11 4 11 3 10 3 11 4 10 4 10 4 11 3 11 3 11 3 + 11 3 11 3 11 3 11 3 11 4 10 3 12 2 12 3 10 5 9 5 10 3 11 3 11 4 10 4 + 10 3 11 5 9 4 10 4 11 3 9 5 10 5 10 4 10 3 11 4 10 4 10 4 10 3 12 2 + 12 2 12 2 12 3 11 3 11 3 11 3 12 2 12 2 12 3 11 3 11 3 11 3 12 2 12 2 + 12 2 12 2 13 1 12 1 13 2 13 1 13 1 + + + + 2646.0 + + + 0.0740740740741 + + + 520.0 + + + 0.869230769231 + + + 1.06942187137 + + + 0.448668639053 0.514627659574 0.0217619978949 5.53451738166 + 0.328921042899 0.00118146164147 0.0329485671934 0.0102771358958 + -1.51474727351 + + + 14.0 + + + 2.0 0.0 + + + 0.285714285714 3.14285714286 1.71428571429 2.0 0.0 0.0 0.0 0.0 + + + 189.0 + + + 2.0 7.0 0.166666666667 0.0 9.0 1.0 + + + 0.0 0.994708994709 + + + 0.196523053666 + + + 0.631205673759 0.0709219858156 0.0 0.0 0.207446808511 + 0.537234042553 0.377659574468 0.0 0.0 0.0 0.468085106383 + 0.368055555556 0.0 0.0 0.0 0.473958333333 + + + 0.0 0.0416666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.978260869565 + 0.895833333333 0.217391304348 0.0 0.0 0.0 0.0 0.0 0.173913043478 + 0.645833333333 1.0 0.645833333333 0.125 0.0 0.0 0.0 0.0 0.0 0.0 0.5 + 0.979166666667 0.391304347826 0.0 0.0 0.0 0.0 0.0 0.0 + 0.541666666667 1.0 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0 + 0.652173913043 0.895833333333 0.0416666666667 0.0 0.0 0.0 0.0 0.0 + 0.0 0.6875 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.104166666667 + 0.604166666667 + + + 0.378479356027 0.287996268922 0.0727765222604 0.0249649779987 + 0.20597678816 0.442742702024 0.248899654666 0.045920949488 + 0.0502392530413 0.0408470810057 0.275531614881 0.318973457901 + 0.437198545322 0.216975651271 + + + + + + + + + 2 1 75 3 74 3 74 2 33 2 40 2 33 1 41 2 16 1 15 2 41 36 41 37 40 36 41 + 36 41 35 42 36 41 36 41 36 41 36 41 36 41 36 41 36 41 36 41 36 40 37 + 40 37 41 36 41 36 41 36 41 36 41 36 48 22 53 30 48 30 49 28 46 31 44 + 33 42 35 42 1 1 33 44 33 45 32 44 33 45 3 1 15 1 12 44 33 36 1 5 35 + 36 1 7 33 36 1 7 33 35 2 3 37 34 3 3 37 34 3 3 37 33 4 3 40 2 1 3 9 3 + 16 3 74 3 6 1 67 3 3 31 40 4 2 31 40 3 3 32 39 3 3 32 39 3 3 32 39 3 + 3 32 39 3 3 32 39 38 39 37 40 37 40 37 41 36 43 34 42 35 42 35 42 36 + 41 36 40 37 34 2 4 37 40 37 40 38 39 37 4 5 31 37 4 2 34 37 40 38 39 + 38 39 38 39 37 40 37 40 38 39 38 39 38 39 38 39 38 1 2 4 2 30 38 39 + 38 39 38 39 38 39 38 40 37 18 1 21 38 1 4 5 10 4 1 2 3 1 4 4 44 3 27 + 3 44 3 27 3 45 1 29 2 75 2 75 2 75 2 75 2 75 2 75 3 74 2 76 1 76 1 76 + 1 76 1 76 2 75 2 74 3 74 3 75 2 75 2 + + + + 8470.0 + + + 0.7 + + + 3284.0 + + + 0.155298416565 + + + 1.43409567151 + + + 0.503878453747 0.448228273866 0.139495285702 0.181321567834 + 0.116306124031 -0.000381121841743 -0.00298345216172 + -0.0017067811297 -0.00354479917815 + + + 77.0 + + + 0.636363636364 0.354545454545 + + + 1.03896103896 0.779220779221 0.415584415584 0.207792207792 + 0.145454545455 0.690909090909 0.145454545455 0.4 + + + 110.0 + + + 9.0 46.0 0.139130434783 6.0 5.0 3.0 + + + 0.0 0.990909090909 + + + 0.38772136954 + + + 0.766081871345 0.669172932331 0.00584795321637 0.0 0.748538011696 + 0.770676691729 0.155945419103 0.0263157894737 0.0 0.308270676692 + 0.986354775828 0.265037593985 0.0 0.298214285714 0.9 0.321428571429 + + + 0.589743589744 0.904761904762 0.444444444444 0.634920634921 + 0.025641025641 0.0 0.0 0.0 0.538461538462 1.0 1.0 0.571428571429 + 0.0 0.0 0.0 0.0 0.547008547009 1.0 0.992063492063 0.571428571429 + 0.0 0.0 0.0 0.0 0.523076923077 0.9 0.842857142857 0.678571428571 + 0.353846153846 0.242857142857 0.1 0.0 0.0 0.0 0.0 0.607142857143 + 1.0 0.95 0.564285714286 0.0 0.0 0.0 0.0 0.626984126984 1.0 1.0 + 0.492063492063 0.0 0.0 0.0 0.0 0.635714285714 1.0 1.0 + 0.542857142857 0.0 0.0 0.0 0.0142857142857 0.542857142857 0.8 0.8 + 0.55 0.192857142857 + + + 0.563471839123 0.144191642087 0.0121658583503 0.00566514506176 + 0.246300207318 0.388385725027 0.0526069670402 0.0728079158257 + 0.0373447545093 0.00212326801328 0.119662913309 0.452168099612 + 0.134479340572 0.0310112559693 + + + + + + + + + 37 1 71 1 71 2 69 3 69 13 3 1 8 3 4 1 38 34 39 33 39 33 40 32 40 32 + 40 32 40 32 40 32 40 32 40 32 40 32 40 32 40 32 40 32 40 32 40 33 36 + 37 36 37 36 36 36 35 37 35 38 4 4 26 38 33 39 33 39 33 39 32 41 31 41 + 31 41 31 41 32 40 32 40 32 40 31 42 31 41 31 41 31 41 31 41 31 41 31 + 41 31 41 31 41 31 41 31 42 1 9 2 2 1 1 2 1 1 1 8 68 1 830 1 71 1 71 4 + 68 7 65 13 20 1 38 21 11 3 37 22 3 4 1 5 37 22 1 12 37 35 37 35 37 35 + 37 35 37 36 36 36 37 5 1 29 37 5 1 29 37 35 37 35 37 35 37 35 37 35 + 37 35 4 1 31 36 4 3 28 39 2 3 29 37 3 3 29 37 3 3 29 36 37 36 37 34 + 38 34 38 34 38 33 39 7 2 24 5 1 33 7 2 23 6 2 32 33 5 3 31 6 4 24 4 8 + 11 1 14 35 3 27 6 9 3 24 3 69 3 69 3 69 3 69 3 69 3 69 3 38 3 3 1 2 1 + 21 3 69 3 35 5 29 3 29 14 26 3 34 13 23 2 37 16 17 2 36 29 5 2 37 30 + 3 2 37 30 3 2 37 31 2 2 37 31 2 2 37 31 2 2 37 35 37 40 31 36 4 1 31 + 36 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 38 35 37 35 + 37 35 36 36 37 35 37 35 37 35 37 35 37 35 37 36 36 36 8 10 18 59 13 + 63 9 65 7 65 8 65 7 67 5 67 5 66 6 69 3 70 1 34 0 + + + + 10944.0 + + + 0.473684210526 + + + 4622.0 + + + 0.141280830809 + + + 0.604426002766 + + + 0.559327405367 0.530037740607 0.0787084406248 0.364988412131 + -0.103997499614 -0.00920998819998 0.00157536324747 0.0133666335783 + -0.0801566201293 + + + 72.0 + + + 1.25 0.302631578947 + + + 0.444444444444 0.833333333333 2.44444444444 1.27777777778 + 0.105263157895 0.289473684211 0.684210526316 0.131578947368 + + + 152.0 + + + 7.0 46.0 0.184782608696 4.0 10.0 4.0 + + + 0.0 0.993421052632 + + + 0.422331871345 + + + 0.0 0.0 0.460526315789 0.697368421053 0.00584795321637 + 0.077485380117 0.491228070175 0.790935672515 0.84649122807 + 0.501461988304 0.843567251462 0.0906432748538 0.760233918129 + 0.426900584795 0.755847953216 0.00877192982456 + + + 0.0 0.0 0.0 0.0 0.0818713450292 0.918128654971 0.953216374269 + 0.409356725146 0.0 0.0 0.0 0.0 0.0 0.842105263158 1.0 + 0.426900584795 0.0 0.0 0.0 0.0 0.0 0.847953216374 1.0 + 0.473684210526 0.00584795321637 0.0175438596491 0.0 0.309941520468 + 0.333333333333 0.783625730994 1.0 0.690058479532 0.766081871345 + 0.853801169591 0.356725146199 0.590643274854 0.970760233918 + 0.625730994152 0.116959064327 0.245614035088 0.766081871345 1.0 + 0.538011695906 0.520467836257 1.0 0.777777777778 0.0 0.0 + 0.748538011696 1.0 0.561403508772 0.444444444444 1.0 0.842105263158 + 0.0 0.0 0.502923976608 0.789473684211 0.450292397661 0.251461988304 + 0.561403508772 0.619883040936 0.0350877192982 0.0 + + + 0.371562715101 0.232626453456 0.146670509153 0.088043375946 + 0.104536560543 0.326488876395 0.156438629104 0.203489839493 + 0.112931856025 0.0899133646776 0.145470561057 0.069108699569 + 0.271452725325 0.0934411362229 + + + + + + + + + 12 1 21 2 18 4 17 5 17 5 15 8 14 8 13 10 12 10 12 10 11 11 11 13 9 13 + 8 15 7 16 6 18 4 18 3 19 3 19 3 19 3 18 4 18 4 10 4 4 3 12 2 4 3 19 2 + 21 1 10 1 10 1 9 3 8 2 8 5 7 2 9 4 6 1 1 2 7 2 8 5 17 4 17 5 17 5 17 + 5 13 2 1 7 4 1 6 3 1 6 12 10 13 1 2 7 14 8 12 1 1 9 13 9 13 10 11 11 + 11 12 1 2 7 16 6 13 8 14 8 15 6 17 3 18 6 17 5 18 4 18 4 19 2 11 0 + + + + 1232.0 + + + 0.392857142857 + + + 668.0 + + + 0.311377245509 + + + 0.92367816092 + + + 0.462360992301 0.480375612412 0.0363128354428 0.241199027641 + -0.024017964555 0.00100320400329 -0.000537110431485 + -0.00120211727775 0.0179636570362 + + + 22.0 + + + 1.18181818182 0.25 + + + 0.363636363636 1.45454545455 2.0 0.545454545455 0.0 0.285714285714 + 0.642857142857 0.0714285714286 + + + 56.0 + + + 9.0 26.0 0.301587301587 2.0 11.0 3.0 + + + 0.0 0.982142857143 + + + 0.542207792208 + + + 0.0142857142857 0.528571428571 0.9 0.114285714286 0.619047619048 + 0.964285714286 0.904761904762 0.738095238095 0.785714285714 + 0.914285714286 0.742857142857 0.357142857143 0.0833333333333 + 0.833333333333 0.178571428571 0.0 + + + 0.0 0.0 0.0 0.5 0.857142857143 0.642857142857 0.0 0.0 0.0 + 0.047619047619 0.52380952381 0.904761904762 1.0 1.0 0.380952380952 + 0.0 0.0952380952381 0.857142857143 1.0 1.0 1.0 0.952380952381 + 0.761904761905 0.285714285714 0.52380952381 1.0 1.0 0.857142857143 + 0.666666666667 1.0 1.0 0.904761904762 0.857142857143 1.0 1.0 + 0.928571428571 0.714285714286 0.857142857143 1.0 0.357142857143 + 0.380952380952 1.0 1.0 0.761904761905 1.0 0.428571428571 + 0.285714285714 0.0 0.0 0.333333333333 1.0 0.952380952381 + 0.619047619048 0.0 0.0 0.0 0.0 0.0 0.857142857143 0.52380952381 + 0.0952380952381 0.0 0.0 0.0 + + + 0.530266509302 0.161014610401 0.0459362561122 0.0198412981151 + 0.328801370508 0.292711901599 0.107699023296 0.0267462793965 + 0.0167777242748 0.0260004914261 0.109142226085 0.229984656153 + 0.184865631461 0.084970194528 + + + + + + + + + 10 1 22 2 4 5 11 5 4 14 6 9 4 18 1 8 5 27 5 27 5 27 5 27 6 9 4 13 6 1 + 13 2 4 2 2 2 8 1 11 2 5 1 11 3 10 3 3 6 7 7 5 5 1 7 7 8 3 15 6 26 6 + 26 5 11 1 5 3 6 6 11 1 6 1 7 6 26 6 26 7 25 7 24 8 5 3 16 8 5 7 13 7 + 5 6 7 3 4 7 4 8 7 1 4 8 4 9 6 3 2 8 4 10 4 4 1 8 5 12 2 4 3 6 4 14 1 + 3 4 6 4 17 4 7 5 16 4 6 8 14 2 9 7 15 1 9 7 13 4 8 5 1 2 24 8 25 4 28 + 6 26 7 1 2 22 11 21 12 20 13 19 15 17 17 15 18 14 20 12 21 11 23 10 + 23 9 25 7 26 6 26 6 27 5 27 5 27 5 27 5 27 5 4 1 13 3 6 5 4 1 10 17 + 10 4 1 17 11 3 1 17 19 2 4 7 26 6 27 5 27 5 27 5 27 5 27 5 27 5 1 1 6 + 4 7 1 7 5 4 10 4 1 8 5 9 3 15 5 27 5 27 5 27 5 4 1 6 1 15 6 10 1 15 6 + 26 6 26 5 27 5 27 5 27 6 4 1 1 5 15 6 4 6 17 5 4 7 16 5 5 7 15 3 1 1 + 5 8 14 3 1 1 4 1 1 7 14 3 6 9 1 1 11 4 6 9 13 5 7 9 11 6 6 11 8 7 6 + 15 4 7 5 17 2 8 6 28 1 1 1 29 3 27 4 30 4 28 5 25 6 25 7 25 7 26 6 26 + 6 26 6 27 4 28 4 29 3 29 3 29 3 29 3 29 3 29 3 29 4 29 3 29 2 30 2 22 + 0 + + + + 3808.0 + + + 0.268907563025 + + + 1933.0 + + + 0.312984997413 + + + 0.988714327743 + + + 0.487425529429 0.440870869028 0.0340088059216 0.45045147957 + 0.00814137324581 0.000954388879772 -0.0080431538828 + 0.000874005006271 -0.0308605702346 + + + 32.0 + + + 3.75 0.613445378151 + + + 2.625 5.5 4.125 2.75 1.04201680672 0.302521008403 0.672268907563 + 0.268907563025 + + + 119.0 + + + 17.0 65.0 0.260869565217 7.0 7.0 6.0 + + + 0.0 0.991596638655 + + + 0.507615546218 + + + 0.616379310345 0.591666666667 0.466666666667 0.266666666667 + 0.577586206897 0.666666666667 0.754166666667 0.295833333333 + 0.771551724138 0.491666666667 0.879166666667 0.0708333333333 + 0.435344827586 0.320833333333 0.791666666667 0.1375 + + + 0.482142857143 0.333333333333 0.4 0.0833333333333 0.0 + 0.0333333333333 0.0333333333333 0.0 0.714285714286 0.933333333333 + 0.883333333333 1.0 0.983333333333 0.85 0.7 0.333333333333 + 0.660714285714 0.55 0.45 0.983333333333 0.916666666667 0.75 0.6 + 0.583333333333 0.464285714286 0.633333333333 0.233333333333 1.0 + 0.766666666667 0.583333333333 0.0 0.0 0.678571428571 0.916666666667 + 0.0333333333333 1.0 0.85 0.916666666667 0.05 0.0 0.732142857143 + 0.75 0.1 0.833333333333 0.75 1.0 0.233333333333 0.0 0.821428571429 + 0.85 0.233333333333 0.666666666667 0.783333333333 1.0 + 0.316666666667 0.0 0.0357142857143 0.0333333333333 0.0 + 0.383333333333 0.55 0.833333333333 0.233333333333 0.0 + + + 0.556780625287 0.171255462101 0.0332234988743 0.015036384602 + 0.360592657659 0.393801507023 0.0898686164537 0.185756896753 + 0.0719240581198 0.0214113160368 0.23337259046 0.377043356355 + 0.226655928693 0.050278111225 + + + + + + + + + 4 3 12 5 12 6 10 6 10 8 10 5 34 2 1 5 8 1 1 7 14 1 4 1 11 1 2 3 10 3 + 1 2 11 2 1 1 3 0 + + + + 221.0 + + + 1.30769230769 + + + 62.0 + + + 1.33870967742 + + + 1.29787234043 + + + 0.451612903226 0.475806451613 0.301466885972 0.199993286563 + 0.191223859555 0.0579583907955 0.0298350343991 0.045473915857 + 0.0144409681388 + + + 17.0 + + + 0.411764705882 0.461538461538 + + + 0.0 0.941176470588 0.235294117647 0.470588235294 0.0 0.0 + 0.615384615385 0.923076923077 + + + 13.0 + + + 3.0 2.0 0.333333333333 1.0 1.0 2.0 + + + 0.0 0.923076923077 + + + 0.280542986425 + + + 0.333333333333 0.833333333333 0.0 0.0 0.833333333333 0.75 + 0.333333333333 0.0 0.0 0.0 0.583333333333 0.375 0.0 0.0 + 0.266666666667 0.4 + + + 0.0 0.0 0.5 0.75 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.5 0.0 0.0 0.5 0.75 0.5 0.5 0.5 0.5 0.0 0.0 + 0.0 0.0 0.0 0.0 0.25 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 1.0 0.5 1.0 + 0.0 0.0 0.0 0.0 0.5 1.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 + 0.666666666667 0.333333333333 + + + 0.344734567913 0.240739326937 0.206475473186 0.0815842924872 + 0.0377997802524 0.36611944997 0.129856686717 0.0794388263809 + 0.0791374896857 0.0963986262268 0.191823308114 0.344839404792 + 0.11570497226 0.0921098487781 + + + + + + + + + 72 1 130 2 3 8 26 1 101 15 3 3 1 10 7 2 101 15 2 4 1 11 1 7 101 21 1 + 19 101 21 1 19 102 20 1 19 102 1 1 1 1 15 2 19 107 15 1 19 107 22 1 + 11 108 34 108 22 2 11 102 3 2 25 1 2 1 6 102 4 1 33 104 40 103 39 102 + 40 102 40 102 40 103 39 103 39 103 39 103 39 103 39 103 39 103 40 102 + 40 102 40 101 42 101 42 67 3 30 42 67 2 31 43 65 3 31 42 67 1 33 41 + 67 1 33 40 68 1 33 26 1 13 68 1 33 20 1 19 68 1 33 20 1 19 68 4 30 19 + 2 19 69 9 24 40 69 17 16 40 34 1 34 31 1 21 1 20 33 1 34 52 3 26 3 3 + 3 6 2 11 33 51 3 35 1 19 33 50 1 1 1 56 33 46 8 55 33 38 24 47 33 37 + 31 41 33 37 33 39 34 5 1 30 33 39 34 36 33 39 34 36 33 39 34 36 33 39 + 34 36 33 39 34 36 33 39 34 36 33 39 34 37 32 39 34 37 32 39 34 37 32 + 39 35 36 32 39 35 36 32 39 35 4 4 28 31 40 35 32 35 40 35 36 33 2 1 + 33 37 36 37 26 2 1 1 1 38 36 37 33 37 35 38 33 36 35 40 31 36 35 40 + 31 36 36 31 39 36 36 30 41 35 36 30 41 35 36 30 41 36 35 30 40 37 35 + 30 41 5 1 29 37 29 41 4 12 19 37 29 41 3 19 11 39 30 40 3 69 29 41 3 + 69 29 41 3 69 29 41 3 69 29 41 3 69 29 41 3 36 11 23 28 41 3 35 26 9 + 28 41 3 35 29 6 28 30 2 8 4 35 31 4 29 7 29 4 4 35 31 3 29 5 32 3 3 + 36 32 2 29 5 33 2 2 38 32 1 29 5 33 2 2 39 30 1 29 7 32 2 2 39 61 6 + 32 2 2 39 61 6 32 2 2 39 60 6 33 3 2 37 61 7 32 4 1 37 62 5 33 3 2 37 + 62 4 35 2 3 36 62 3 36 1 4 4 2 30 63 2 41 4 2 30 63 2 41 4 1 6 1 25 + 62 2 41 4 1 32 62 1 42 3 5 28 106 4 1 23 1 8 106 15 2 19 106 27 2 7 + 106 36 106 36 106 36 106 36 106 6 3 14 2 11 107 6 2 14 3 10 107 6 1 + 17 1 1 2 7 107 34 1 1 106 34 108 36 106 36 106 36 106 36 107 6 3 27 + 106 3 12 21 106 3 19 14 107 2 27 6 107 2 28 5 108 1 29 4 139 3 141 1 + 101 0 + + + + 18034.0 + + + 1.11811023622 + + + 6657.0 + + + 0.141505182515 + + + 0.759355889553 + + + 0.491978262097 0.489907985627 0.225388595702 0.131406694696 + -0.0733256544567 0.00678770493721 -0.0201016345641 0.0390200034234 + -0.00292769170487 + + + 142.0 + + + 0.718309859155 1.24409448819 + + + 0.816901408451 0.901408450704 0.845070422535 0.281690140845 + 0.692913385827 1.41732283465 1.70078740157 1.07086614173 + + + 127.0 + + + 15.0 98.0 0.256449165402 12.0 4.0 4.0 + + + 0.0 0.992125984252 + + + 0.3691360763 + + + 0.00276497695853 0.103571428571 0.577678571429 0.714285714286 + 0.236559139785 0.711805555556 0.661458333333 0.112847222222 + 0.788940092166 0.525892857143 0.157142857143 0.0169642857143 0.0 + 0.595486111111 0.6796875 0.00520833333333 + + + 0.0 0.0 0.0 0.0 0.165441176471 0.955882352941 0.805147058824 + 0.444852941176 0.0 0.0104166666667 0.1875 0.215277777778 0.1875 1.0 + 0.975694444444 0.621527777778 0.0 0.0 0.430555555556 0.982638888889 + 1.0 0.375 0.201388888889 0.25 0.42962962963 0.513888888889 + 0.645833333333 0.788194444444 0.881944444444 0.388888888889 0.0 0.0 + 0.83137254902 1.0 0.860294117647 0.0 0.0 0.0 0.0 0.0 0.566666666667 + 0.760416666667 0.885416666667 0.347222222222 0.256944444444 + 0.354166666667 0.0659722222222 0.0 0.0 0.0 0.288194444444 1.0 + 0.986111111111 0.440972222222 0.0 0.0 0.0 0.0 0.260416666667 + 0.833333333333 0.829861111111 0.461805555556 0.0208333333333 0.0 + + + 0.382601944448 0.139700435375 0.113106167942 0.134728611059 + 0.0187414044924 0.216660458788 0.029729317479 0.174733661386 + 0.235322265471 0.0898194366183 0.0922246588288 0.0601770664671 + 0.0250908211761 0.0435140135552 + + + + + + + + + 56 5 57 4 58 2 1 3 54 2 3 2 787 1 8 1 52 3 1 5 52 11 50 11 50 3 5 3 + 1077 1 61 1 60 1 61 1 123 1 60 2 5 1 60 4 1 1 51 1 2 8 51 12 7 2 42 + 12 5 2 39 1 3 10 8 1 38 2 3 8 7 3 39 4 1 9 4 1 1 3 39 4 1 14 1 2 46 + 12 3 1 47 12 2 1 47 3 6 1 51 5 5 4 45 1 1 8 2 3 45 17 42 20 41 17 2 1 + 42 15 47 15 1 2 43 22 40 24 38 24 37 23 39 22 43 18 44 7 4 1 1 4 43 + 13 47 15 47 14 48 14 51 9 54 7 54 8 54 7 52 8 8 2 44 9 7 1 45 10 5 2 + 46 9 4 3 46 9 3 3 48 7 5 2 48 3 1 2 7 1 48 2 11 1 240 5 55 8 54 7 56 + 6 57 5 58 3 59 3 50 0 + + + + 5952.0 + + + 0.645833333333 + + + 649.0 + + + 0.645608628659 + + + 0.557299843014 + + + 0.247922402688 0.639510177601 0.235721516983 0.556519463865 + -0.300109157741 0.214853773875 0.394093284199 -0.299157881426 + -0.466978066068 + + + 62.0 + + + 0.983870967742 0.395833333333 + + + 2.1935483871 1.61290322581 0.0 0.129032258065 0.208333333333 + 0.166666666667 0.833333333333 0.375 + + + 96.0 + + + 5.0 16.0 0.262773722628 14.0 4.0 3.0 + + + 0.0 0.989583333333 + + + 0.109038978495 + + + 0.0 0.0416666666667 0.594444444444 0.441666666667 0.0 0.0546875 + 0.450520833333 0.0286458333333 0.05 0.0 0.0 0.0 0.0989583333333 0.0 + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0714285714286 0.678571428571 0.797619047619 + 0.0952380952381 0.0 0.0 0.0 0.15625 0.614583333333 0.958333333333 + 0.5 0.375 0.0 0.0 0.0 0.197916666667 0.770833333333 0.6875 0.09375 + 0.0208333333333 0.0 0.0 0.0 0.0208333333333 0.260416666667 + 0.0833333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1875 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.208333333333 0.0 0.0 0.0 0.0 0.0 0.0 + 0.1875 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.78619192232 0.0724764144851 0.139217792889 0.0502099339057 + 1.12595082968 0.122925166206 0.0580145404056 0.252235529061 + 0.02680008922 0.0598571984945 1.25422475208 0.244565524765 + 0.0408756189109 0.0605370565154 + + + + + + + + + 0 3 + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.33333333333 + + + 2.0 + + + 0.5 0.5 0.222222222222 0.0 0.0 0.0 0.0 0.0 0.0 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 1.0 + + + 0.0 0.0 0.0 3.0 3.0 3.0 + + + 0.0 -1.0 + + + 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.611531923285 0.624075847826 4.84190584415e-17 1.51341087023e-16 + 0.938065357227 0.958148015231 1.01963181359 6.53233907782e-17 + 2.04646500774e-16 3.70897674304e-16 1.15129051676 1.17773290199 + 1.25872203005 1.3993574542 + + + + + + + + + 235 4 13 1 48 20 5 13 37 38 37 39 36 39 36 39 36 39 36 39 36 39 36 39 + 36 39 35 39 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 + 38 37 38 46 29 39 1 5 30 37 38 38 37 38 37 38 37 38 36 39 2 2 2 2 28 + 39 6 2 8 1 19 39 4 5 7 1 19 39 6 3 27 39 7 1 8 1 19 39 7 1 8 1 20 38 + 16 2 18 39 36 39 37 19 5 14 37 7 20 1 6 4 71 4 71 15 4 2 6 4 3 3 38 + 38 37 39 36 39 36 39 36 39 36 39 36 39 36 39 36 38 37 38 39 36 39 36 + 38 36 39 37 38 38 37 38 36 39 36 39 36 38 37 38 37 38 37 38 38 37 38 + 37 4 1 32 38 37 38 38 37 37 38 37 38 8 2 28 37 38 37 38 37 8 2 28 37 + 38 37 38 37 38 37 38 37 39 37 37 38 13 4 7 4 9 38 1 17 1 9 1 5 3 73 2 + 1 0 + + + + 6525.0 + + + 0.862068965517 + + + 3104.0 + + + 0.132087628866 + + + 1.62513034411 + + + 0.509116397325 0.510578997842 0.134228132591 0.173650928286 + 0.110702258533 -0.00168529900334 -0.00152298540558 + -0.00189844687872 -0.000215308171158 + + + 75.0 + + + 0.453333333333 0.333333333333 + + + 0.853333333333 0.213333333333 0.426666666667 0.16 0.0919540229885 + 0.64367816092 0.137931034483 0.367816091954 + + + 87.0 + + + 7.0 41.0 0.09765625 1.0 1.0 1.0 + + + 0.0344827586207 0.988505747126 + + + 0.475708812261 + + + 0.777777777778 0.828282828283 0.0909090909091 0.0 0.799498746867 + 0.985645933014 0.138755980861 0.0430622009569 0.105263157895 + 0.11004784689 1.0 0.892344497608 0.0 0.0502392344498 0.913875598086 + 0.854066985646 + + + 0.533333333333 0.89898989899 0.707070707071 0.69696969697 + 0.141414141414 0.0 0.0 0.0 0.644444444444 1.0 0.989898989899 + 0.919191919192 0.222222222222 0.0 0.0 0.0 0.56 1.0 1.0 + 0.945454545455 0.236363636364 0.0 0.0 0.0 0.6 1.0 1.0 1.0 + 0.242424242424 0.0808080808081 0.111111111111 0.0707070707071 + 0.177777777778 0.262626262626 0.222222222222 0.141414141414 1.0 1.0 + 0.969696969697 0.808080808081 0.0 0.0 0.0 0.0909090909091 1.0 1.0 + 1.0 0.790909090909 0.0 0.0 0.0 0.141414141414 1.0 1.0 1.0 + 0.777777777778 0.0 0.0 0.0 0.0636363636364 0.8 0.872727272727 + 0.845454545455 0.8 + + + 0.362372829389 0.216413332818 0.014846111002 0.0079761662429 + 0.0416322236661 0.374663082082 0.0969554027252 0.0241979920711 + 0.0103306274102 0.0066280681784 0.0934937774688 0.215945305938 + 0.11085816244 0.066574087947 + + + + + + + + + 54 1 59 1 58 2 58 2 58 2 57 3 57 3 58 1 58 2 1 1 57 2 58 2 58 1 59 1 + 115 4 56 4 58 1 57 2 57 3 58 2 58 2 631 3 21 1 33 7 16 3 35 6 16 2 36 + 5 17 3 33 9 15 3 33 6 16 6 29 7 17 7 9 2 17 1 11 1 11 6 10 2 30 2 12 + 2 13 1 18 1 4 3 1 6 10 3 13 1 17 1 3 12 10 2 32 16 9 3 37 9 11 2 37 + 10 10 3 29 17 10 3 30 10 3 6 8 3 30 19 8 3 29 20 7 4 29 20 6 5 28 20 + 7 5 28 20 6 5 28 11 2 8 7 4 28 8 5 11 4 3 28 7 6 11 4 4 28 6 6 11 4 5 + 28 6 7 18 32 3 7 17 43 4 7 5 45 3 56 4 56 4 58 1 417 1 1 1 53 8 46 14 + 46 14 47 13 48 12 46 14 44 17 3 1 38 17 2 2 40 12 7 1 39 15 45 15 46 + 18 42 12 1 4 43 17 44 10 2 3 45 15 45 14 47 3 1 9 47 2 3 7 48 1 8 2 + 49 2 7 1 41 0 + + + + 5460.0 + + + 0.659340659341 + + + 790.0 + + + 0.629113924051 + + + 0.63347107438 + + + 0.382836301223 0.627285513361 0.174323783717 0.493475323453 + -0.199055348563 0.0794183134913 0.108196142968 -0.102813400322 + -0.0935123065038 + + + 60.0 + + + 1.3 0.571428571429 + + + 0.933333333333 3.46666666667 0.266666666667 0.533333333333 + 0.043956043956 0.923076923077 0.835164835165 0.395604395604 + + + 91.0 + + + 8.0 20.0 0.311764705882 17.0 4.0 3.0 + + + 0.0 0.989010989011 + + + 0.144688644689 + + + 0.0 0.00579710144928 0.228985507246 0.365217391304 0.0 + 0.298550724638 0.498550724638 0.43768115942 0.0 0.110144927536 + 0.182608695652 0.0 0.127272727273 0.0405797101449 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.025974025974 0.0119047619048 0.012987012987 + 0.0238095238095 0.0 0.0 0.0 0.0227272727273 0.772727272727 + 0.0833333333333 0.579545454545 0.75 0.0 0.0 0.0357142857143 + 0.454545454545 0.792207792208 0.214285714286 0.805194805195 + 0.797619047619 0.0 0.0 0.135416666667 0.590909090909 0.829545454545 + 0.208333333333 0.147727272727 0.09375 0.0 0.0 0.0 0.0 0.25974025974 + 0.214285714286 0.0 0.0 0.0 0.0 0.0416666666667 0.386363636364 + 0.284090909091 0.0 0.0 0.0 0.0 0.207792207792 0.0238095238095 + 0.0779220779221 0.0 0.0 0.0 0.0 0.25 0.0454545454545 0.0 + 0.0681818181818 0.0 0.0 0.0 0.0 + + + 0.718294628881 0.0904027946749 0.0828971142855 0.0331764075921 + 0.799542985181 0.217238067254 0.0507754448205 0.103307818015 + 0.100683987186 0.0432851297072 0.592422016231 0.376006226767 + 0.0665554935732 0.0460919875891 + + + + + + + + + 35 4 67 14 60 20 18 1 35 29 8 3 34 39 35 40 34 40 34 40 34 40 34 40 + 34 40 34 40 35 39 34 40 34 40 35 39 35 39 35 39 35 39 35 39 35 39 35 + 39 35 39 35 39 35 36 39 34 40 37 37 38 36 38 36 38 36 38 36 38 36 38 + 36 38 37 37 37 37 37 6 3 28 37 7 1 29 37 37 37 37 37 37 37 37 37 38 2 + 6 28 38 2 18 16 38 2 29 3 4 8 27 3 36 15 20 3 36 29 6 3 36 33 2 3 36 + 34 1 3 36 34 1 3 17 1 18 34 1 3 36 34 1 3 36 38 36 39 35 39 35 38 37 + 36 38 34 1 1 40 32 1 1 39 32 42 32 2 1 39 37 36 35 1 2 37 34 1 2 36 + 34 1 3 4 1 2 1 28 34 1 3 36 35 1 2 4 5 27 34 2 2 3 4 1 1 27 34 2 2 3 + 5 28 34 2 2 4 1 32 33 2 2 37 33 2 2 37 33 2 3 36 33 2 3 36 33 2 3 36 + 33 2 3 36 33 2 3 36 33 2 3 7 1 28 34 1 3 6 3 27 34 1 3 7 1 28 34 1 3 + 36 34 1 3 36 38 36 38 37 37 37 37 3 5 29 37 2 19 16 38 1 30 5 38 1 33 + 2 34 0 + + + + 6734.0 + + + 0.813186813187 + + + 3324.0 + + + 0.146811070999 + + + 0.647575757576 + + + 0.505777821736 0.492702901457 0.118225043032 0.185248600327 + -0.0927399744651 0.000164334168549 -0.001388090419 0.00406786248637 + 0.00162246650306 + + + 74.0 + + + 0.513513513514 0.593406593407 + + + 0.702702702703 0.27027027027 0.486486486486 0.486486486486 + 0.0879120879121 0.131868131868 0.879120879121 1.14285714286 + + + 91.0 + + + 3.0 35.0 0.224137931034 6.0 2.0 2.0 + + + 0.0 0.989010989011 + + + 0.493614493614 + + + 0.0 0.0555555555556 0.934782608696 0.685990338164 0.236842105263 + 0.141876430206 0.990846681922 0.903890160183 0.929292929293 + 0.990338164251 0.0724637681159 0.115942028986 0.753588516746 + 0.883295194508 0.132723112128 0.0594965675057 + + + 0.0 0.0 0.0 0.141414141414 0.878787878788 0.87037037037 + 0.606060606061 0.509259259259 0.0 0.0 0.0 0.0909090909091 1.0 + 0.990740740741 0.959595959596 0.685185185185 0.0 0.0 0.0 + 0.010101010101 0.989898989899 1.0 1.0 0.777777777778 0.472727272727 + 0.427272727273 0.325 0.2 0.972727272727 1.0 1.0 0.85 0.929292929293 + 1.0 1.0 0.959595959596 0.010101010101 0.157407407407 0.191919191919 + 0.268518518519 0.787878787879 1.0 1.0 1.0 0.121212121212 0.0 0.0 + 0.0 0.69696969697 1.0 1.0 1.0 0.181818181818 0.0 0.0 0.0 + 0.536363636364 0.8 0.733333333333 0.827272727273 0.254545454545 0.1 + 0.2 0.0333333333333 + + + 0.358851567541 0.193686297967 0.0231877048618 0.0151814775804 + 0.0789248652427 0.364698534653 0.0775011206656 0.0272020906675 + 0.0304480622837 0.0134276978405 0.11648007639 0.231761652759 + 0.110728795395 0.0344999510075 + + + + + + + + + 124 1 219 1 99 1 119 1 99 2 118 1 97 4 117 2 97 5 84 2 16 3 3 1 7 2 + 97 5 83 35 97 6 83 34 97 7 82 34 97 8 81 34 97 9 79 35 97 10 78 35 97 + 12 76 35 97 13 75 35 97 10 1 2 76 33 98 15 73 34 98 15 73 35 97 15 73 + 34 98 16 72 34 98 16 72 34 98 16 72 35 97 17 71 35 97 17 72 33 98 17 + 4 2 66 34 97 17 4 3 65 34 18 2 77 17 1 1 2 5 63 34 17 4 76 19 2 6 6 2 + 54 34 16 7 74 20 1 6 6 3 53 33 17 7 73 21 1 11 2 4 51 35 14 7 74 42 + 46 37 14 7 74 25 1 18 45 36 14 8 72 26 1 23 40 36 14 12 68 21 1 1 1 1 + 2 22 41 36 14 10 71 22 6 13 48 37 14 7 73 23 12 9 44 37 15 6 74 23 13 + 4 49 35 15 9 2 1 70 20 1 1 15 4 2 15 31 21 1 13 12 14 2 4 63 22 17 25 + 26 35 12 24 61 20 18 25 25 34 13 1 4 15 65 22 19 23 2 1 21 18 1 15 19 + 16 1 3 58 25 19 25 20 31 2 1 12 23 1 3 59 16 1 8 12 3 3 28 1 1 16 33 + 11 30 57 28 12 3 1 31 14 33 11 32 2 1 52 30 2 3 7 2 1 32 12 33 11 35 + 52 26 1 6 11 1 2 33 9 33 11 35 52 27 2 5 12 1 1 37 3 35 10 35 52 34 6 + 47 1 23 1 3 1 6 10 37 51 36 4 56 1 4 18 3 10 37 52 19 2 32 3 36 28 1 + 10 38 51 18 4 30 4 35 29 2 9 37 52 2 2 13 7 29 1 37 30 1 8 38 52 2 3 + 12 10 6 6 52 30 1 9 4 4 29 52 3 3 1 3 7 15 2 4 32 2 19 30 1 17 17 1 + 12 51 2 9 8 13 2 5 2 2 20 3 2 4 20 47 10 18 1 20 1 31 2 9 8 13 2 3 27 + 2 2 4 19 48 8 6 1 34 4 28 2 12 2 21 4 3 22 6 19 48 10 4 2 32 5 28 2 + 23 1 18 20 9 18 49 3 3 2 5 2 32 6 27 3 21 5 14 23 7 19 53 3 4 3 31 7 + 27 3 23 5 1 1 12 24 3 20 53 4 2 4 31 8 26 3 26 5 15 20 3 20 52 10 32 + 9 25 2 28 5 17 1 1 16 1 20 53 10 31 11 24 2 29 5 10 1 9 36 52 10 31 3 + 1 7 24 2 31 1 3 2 5 4 9 35 57 4 37 6 24 2 36 3 4 4 12 31 59 2 38 5 24 + 2 39 5 1 5 13 6 1 20 58 3 36 6 25 2 40 11 19 20 58 3 35 7 25 2 43 1 2 + 2 22 8 1 1 3 7 59 1 5 1 29 7 26 2 71 1 4 1 7 7 57 2 5 1 26 10 26 3 75 + 2 5 8 51 3 3 1 5 3 23 11 27 2 71 4 1 6 1 8 49 8 5 5 2 1 19 4 1 6 28 1 + 69 22 48 11 3 7 20 1 1 1 2 6 28 1 69 22 49 3 2 6 2 4 30 6 26 2 69 21 + 55 3 31 3 1 9 26 2 69 21 48 4 2 13 1 1 20 12 27 2 70 20 49 20 19 13 1 + 1 25 2 70 20 50 18 20 26 14 2 70 20 51 17 22 6 3 13 2 1 13 2 68 23 52 + 15 19 1 1 22 4 2 11 2 55 10 1 2 2 21 54 13 18 24 5 2 11 2 56 13 1 21 + 55 12 18 32 10 2 60 2 1 28 56 11 18 32 10 2 65 1 4 21 57 9 19 33 9 2 + 66 26 57 7 20 13 2 19 8 2 67 25 59 1 24 13 5 17 7 2 71 21 59 4 20 14 + 5 17 7 2 73 19 84 13 4 19 6 2 76 16 82 15 4 20 5 2 81 11 80 18 3 19 6 + 2 80 12 80 19 1 19 7 2 82 9 83 17 2 18 7 3 86 4 83 17 1 18 8 4 87 1 + 84 4 4 28 8 3 172 5 20 1 1 2 1 7 8 3 172 5 23 1 2 6 8 3 173 4 1 1 20 + 9 9 4 173 2 3 4 14 11 9 4 173 8 15 10 10 4 174 9 14 4 1 4 10 4 175 5 + 36 4 176 3 37 4 216 4 217 2 218 2 218 2 217 3 218 2 218 2 219 1 219 1 + 218 2 219 1 219 2 196 1 21 1 196 3 20 1 196 3 20 2 195 4 19 2 194 6 + 18 2 194 6 18 1 195 5 218 2 218 1 13 0 + + + + 26620.0 + + + 1.81818181818 + + + 6146.0 + + + 0.301334201106 + + + 1.40581090736 + + + 0.445974439328 0.410502766027 0.58041481462 0.0904962505522 + 0.0916089166347 0.0749678940783 0.0195351736772 0.0706659064147 + 0.00836022954107 + + + 220.0 + + + 1.43181818182 3.14876033058 + + + 1.98181818182 1.23636363636 1.41818181818 1.09090909091 + 1.5867768595 5.19008264463 4.72727272727 1.09090909091 + + + 121.0 + + + 26.0 158.0 0.2567132116 34.0 1.0 5.0 + + + 0.0 0.99173553719 + + + 0.230879038317 + + + 0.252727272727 0.606060606061 0.0636363636364 0.0428152492669 + 0.286666666667 0.621818181818 0.404848484848 0.00293255131965 + 0.242424242424 0.502424242424 0.141212121212 0.0 0.0 0.069696969697 + 0.365454545455 0.116715542522 + + + 0.232098765432 0.706172839506 0.856790123457 0.461728395062 + 0.0716049382716 0.0740740740741 0.123456790123 0.0532407407407 0.0 + 0.0880952380952 0.504761904762 0.604761904762 0.109523809524 0.0 + 0.0 0.0 0.0 0.0 0.37037037037 0.874074074074 0.362962962963 + 0.234567901235 0.0 0.0 0.42619047619 0.7 0.685714285714 + 0.557142857143 0.47619047619 0.538095238095 0.0119047619048 0.0 + 0.358024691358 0.545679012346 0.577777777778 0.128395061728 0.0 0.0 + 0.0 0.0 0.0 0.0809523809524 0.638095238095 0.654761904762 0.3 + 0.254761904762 0.0 0.0 0.0 0.0 0.041975308642 0.162962962963 + 0.116049382716 0.345679012346 0.158024691358 0.0 0.0 0.0 0.0 + 0.0761904761905 0.219047619048 0.771428571429 0.247619047619 + 0.0691964285714 + + + 0.495872133502 0.178945777851 0.100904521556 0.0557784525343 + 0.384201021247 0.268656031661 0.130315149308 0.104215772475 + 0.0723736043981 0.0676738056981 0.388409289536 0.168557483504 + 0.247948673895 0.104227205175 + + + + + + + + + 1 3 71 3 71 5 19 9 42 37 37 37 37 37 37 37 36 38 36 38 36 37 37 37 37 + 37 37 37 37 37 37 37 36 38 36 38 36 38 36 38 36 38 37 37 37 37 37 38 + 37 36 43 1 1 29 38 36 38 36 38 36 37 37 37 37 42 3 1 28 42 3 1 28 42 + 3 1 28 37 1 3 33 37 37 37 36 38 36 33 1 4 37 32 1 5 36 32 1 5 36 31 2 + 5 36 31 2 5 15 5 16 12 12 6 3 5 13 8 6 6 37 4 3 3 5 22 37 4 2 31 36 + 38 36 38 36 38 36 37 37 37 37 37 37 37 37 37 38 36 38 35 41 33 41 33 + 40 34 39 35 40 35 37 37 37 36 38 36 38 36 38 36 37 37 37 37 38 36 38 + 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 39 35 39 35 39 35 39 35 + 39 35 40 34 39 35 15 4 1 2 3 1 13 35 8 24 7 35 4 31 4 71 3 71 3 72 2 + 72 2 73 1 2 0 + + + + 6660.0 + + + 0.822222222222 + + + 3066.0 + + + 0.135355512068 + + + 1.52057511155 + + + 0.500853371936 0.483626142469 0.127954792503 0.180101626237 + 0.108103282387 -0.000955439447255 -0.00329589789489 + -0.0025115064864 -0.00205869498757 + + + 74.0 + + + 0.337837837838 0.266666666667 + + + 0.756756756757 0.162162162162 0.162162162162 0.27027027027 + 0.0444444444444 0.755555555556 0.0 0.222222222222 + + + 90.0 + + + 2.0 18.0 0.197115384615 4.0 1.0 2.0 + + + 0.0 0.988888888889 + + + 0.46036036036 + + + 0.84595959596 0.787439613527 0.0 0.0 0.885167464115 0.887871853547 + 0.177033492823 0.1647597254 0.0631313131313 0.188405797101 1.0 + 0.690821256039 0.0 0.153318077803 0.868421052632 0.654462242563 + + + 0.717171717172 0.939393939394 0.626262626263 0.722222222222 0.0 0.0 + 0.0 0.0 0.727272727273 1.0 0.969696969697 0.833333333333 0.0 0.0 + 0.0 0.0 0.747474747475 1.0 1.0 0.75 0.0 0.0 0.0 0.0 0.790909090909 + 1.0 1.0 0.816666666667 0.290909090909 0.381818181818 0.4 + 0.233333333333 0.141414141414 0.111111111111 0.121212121212 + 0.314814814815 1.0 1.0 1.0 0.453703703704 0.0 0.0 0.0 + 0.296296296296 1.0 1.0 1.0 0.361111111111 0.0 0.0 0.0 + 0.314814814815 1.0 1.0 1.0 0.407407407407 0.0 0.0 0.0 0.275 + 0.772727272727 0.727272727273 0.727272727273 0.525 + + + 0.418754223449 0.193550268445 0.0207423119103 0.0116055172876 + 0.00301777708063 0.391164939854 0.0786235644149 0.0504730976502 + 0.0303582546438 0.00267547872973 0.145042544635 0.278524850607 + 0.119207961457 0.0537081276147 + + + + + + + + + 3 1 42 2 42 2 42 3 41 3 40 4 39 5 40 6 38 5 39 6 38 6 38 6 33 1 4 4 + 35 1 4 4 34 2 5 3 34 2 5 4 32 3 5 5 1 5 1 18 6 3 6 31 1 6 6 38 6 38 6 + 38 5 39 5 39 5 39 6 38 6 38 6 38 6 38 6 38 6 38 6 38 6 38 6 38 7 37 7 + 37 7 37 7 37 15 25 16 28 10 38 11 33 6 38 6 38 5 39 5 39 5 39 6 38 6 + 38 6 37 7 38 6 38 6 38 6 38 6 38 6 38 6 38 7 37 7 37 7 37 7 4 10 1 14 + 8 7 3 29 5 7 3 30 5 6 3 31 4 6 3 32 3 7 2 32 3 7 2 32 3 6 3 31 3 7 3 + 32 3 6 4 30 4 6 4 30 5 5 3 31 4 7 1 32 5 39 6 39 5 38 6 38 6 38 5 40 + 3 41 3 41 3 42 2 42 2 42 2 42 2 42 2 42 2 42 2 42 2 42 3 41 3 41 3 41 + 3 42 2 42 2 41 3 41 3 41 3 42 2 42 2 43 1 43 1 1 0 + + + + 4444.0 + + + 0.435643564356 + + + 1847.0 + + + 0.210611802924 + + + 1.09028696232 + + + 0.512773699651 0.394369247428 0.0792758993464 0.162392841706 + 0.0338113195599 -0.000341560375352 0.0141673363986 0.00484090612719 + 0.0381069117583 + + + 44.0 + + + 0.75 0.227722772277 + + + 1.81818181818 0.0909090909091 0.0 1.09090909091 0.356435643564 0.0 + 0.554455445545 0.0 + + + 101.0 + + + 2.0 9.0 0.272727272727 3.0 2.0 2.0 + + + 0.0 0.990099009901 + + + 0.415616561656 + + + 0.505454545455 0.654545454545 0.389090909091 0.0 0.356363636364 + 0.996363636364 0.363636363636 0.0 0.356363636364 1.0 0.36 0.0 + 0.272727272727 0.694545454545 0.523636363636 0.234265734266 + + + 0.666666666667 0.553846153846 0.333333333333 0.353846153846 + 0.292307692308 0.1 0.0 0.0 0.125 0.692307692308 1.0 0.833333333333 + 0.807692307692 0.263888888889 0.0 0.0 0.0 0.676923076923 1.0 + 0.984615384615 0.692307692308 0.0 0.0 0.0 0.0 0.692307692308 1.0 + 1.0 0.705128205128 0.0 0.0 0.0 0.0 0.692307692308 1.0 1.0 + 0.692307692308 0.0 0.0 0.0 0.0 0.679487179487 1.0 1.0 + 0.692307692308 0.0 0.0 0.0 0.0 0.6 1.0 0.969230769231 + 0.815384615385 0.0 0.0 0.0 0.0138888888889 0.448717948718 0.5 + 0.410256410256 0.525641025641 0.694444444444 0.461538461538 + 0.397435897436 + + + 0.749393887583 0.0455650109787 0.0512133394249 0.0185041688796 + 0.837067088034 0.0903799568909 0.0313141894803 0.0870416114683 + 0.00422918013173 0.022634812777 0.642950111044 0.107531453404 + 0.0750083326587 0.0264735430604 + + + + + + + + + 1 1 2 7 1 0 + + + + 12.0 + + + 0.75 + + + 8.0 + + + 2.125 + + + 1.0 + + + 0.5 0.583333333333 0.0625 0.1171875 -0.03125 0.0 -0.00552427172802 + 0.00552427172802 -0.012429611388 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 4.0 + + + 1.0 3.0 0.166666666667 0.0 2.0 1.0 + + + 0.0 0.75 + + + 0.666666666667 + + + 0.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 + + + 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 + + + 0.0761289748776 0.203082161039 0.138418792387 0.174284917807 + 0.0602440781123 0.226363174331 0.114364922642 0.277581692417 + 0.268866006063 0.29637386518 0.222587430527 0.225041153463 + 0.109448623246 0.269793267423 + + + + + + + + + 22 2 33 2 27 3 1 4 26 10 25 10 25 3 2 5 32 3 32 7 28 7 29 6 29 6 29 6 + 29 6 29 6 29 6 29 6 29 5 30 4 31 5 30 6 29 10 24 13 24 9 28 6 28 2 1 + 3 20 2 7 1 2 3 18 4 3 4 5 1 18 5 2 4 24 4 3 2 1 1 4 1 18 6 2 4 4 2 17 + 13 2 2 17 18 17 14 3 1 17 15 1 2 17 17 17 18 16 19 16 19 15 19 16 19 + 16 19 15 19 15 20 15 10 5 5 15 9 8 2 15 10 8 2 15 10 6 4 16 9 27 8 26 + 9 25 10 25 9 25 6 2 1 26 5 12 1 17 5 12 1 17 5 11 1 18 5 31 1 1 2 33 + 1 73 1 30 1 2 2 30 6 26 10 22 13 2 2 17 10 2 2 1 4 15 11 2 2 1 2 17 + 12 1 5 17 18 17 12 1 6 17 10 3 5 18 9 1 6 20 15 20 14 22 13 22 7 1 5 + 23 1 1 9 27 2 4 1 34 2 26 3 2 4 26 3 2 4 27 9 26 8 28 6 31 3 32 3 21 + 0 + + + + 3010.0 + + + 0.406976744186 + + + 831.0 + + + 0.499398315283 + + + 0.664077611219 + + + 0.470800594606 0.518907057408 0.068014203928 0.583666711718 + -0.140715508984 0.00178625156467 0.00786875472711 -0.00363769504049 + -0.0105307586285 + + + 35.0 + + + 1.77142857143 0.46511627907 + + + 0.685714285714 2.51428571429 2.17142857143 1.14285714286 + 0.093023255814 0.651162790698 0.46511627907 0.651162790698 + + + 86.0 + + + 12.0 34.0 0.251396648045 10.0 4.0 2.0 + + + 0.0 0.988372093023 + + + 0.276079734219 + + + 0.0 0.00568181818182 0.184523809524 0.454545454545 0.037037037037 + 0.505050505051 0.550264550265 0.742424242424 0.417989417989 + 0.742424242424 0.0793650793651 0.0707070707071 0.222222222222 + 0.318181818182 0.00529100529101 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.636363636364 0.0 0.0 0.0 0.0 + 0.0227272727273 0.375 0.363636363636 1.0 0.181818181818 0.0 0.0 + 0.0181818181818 0.6 0.96 0.454545454545 0.836363636364 + 0.636363636364 0.175 0.0 0.5 1.0 0.7 0.0681818181818 0.886363636364 + 0.613636363636 0.325 0.0 0.340909090909 1.0 0.0 0.0 0.318181818182 + 0.0 0.66 0.6 0.6 1.0 0.24 0.0545454545455 0.0 0.0 0.225 + 0.681818181818 0.568181818182 0.545454545455 0.025 0.0 0.0 0.0 0.0 + 0.0545454545455 0.254545454545 0.0 0.0 0.0 0.0 0.0 + + + 0.446540247919 0.229141926492 0.0170969557351 0.00725390637771 + 0.305411100876 0.360124214502 0.172288142257 0.1623966181 + 0.103306249945 0.0232340648407 0.339380534653 0.242365289716 + 0.296169177552 0.132425078737 + + + + + + + + + 40 4 39 7 41 4 41 3 39 7 38 6 37 2 1 4 39 4 1 1 39 6 41 1 42 4 41 3 + 32 3 4 2 1 3 21 5 3 6 6 4 14 4 1 17 4 4 17 1 2 21 1 3 21 18 2 4 21 18 + 2 4 21 19 1 4 16 1 3 25 15 3 3 23 17 27 21 1 1 3 1 4 6 3 2 3 24 2 1 2 + 8 8 24 2 1 3 6 8 28 5 5 1 1 5 31 1 12 1 27 5 8 4 27 6 7 5 20 4 1 8 2 + 1 3 6 20 4 1 8 1 11 21 24 22 23 22 15 2 5 25 8 8 1 29 6 29 1 10 5 28 + 2 10 4 28 2 11 4 40 3 1 1 40 2 1 3 38 8 37 8 9 1 25 12 1 1 1 4 27 13 + 1 3 1 2 26 12 1 5 27 4 10 2 28 7 3 7 26 1 1 7 2 8 27 9 1 7 19 1 1 3 4 + 17 16 4 1 4 3 18 28 9 2 4 31 9 1 4 32 13 31 14 32 13 30 2 1 4 2 5 22 + 2 5 9 1 6 20 18 1 6 25 2 4 7 3 4 36 3 1 5 35 10 36 2 3 3 42 3 42 4 43 + 1 44 2 18 0 + + + + 3060.0 + + + 0.661764705882 + + + 830.0 + + + 0.602409638554 + + + 0.863196125908 + + + 0.524534501643 0.503830246359 0.0885219216247 0.352365856516 + -0.0901305521112 0.0071531098899 0.02443671633 -0.0223819753394 + 0.0141682223612 + + + 45.0 + + + 2.46666666667 0.970588235294 + + + 1.24444444444 3.64444444444 3.37777777778 1.51111111111 + 0.647058823529 1.35294117647 1.11764705882 0.764705882353 + + + 68.0 + + + 12.0 64.0 0.270042194093 14.0 6.0 1.0 + + + 0.0 0.985294117647 + + + 0.271241830065 + + + 0.0106951871658 0.0320855614973 0.048128342246 0.112299465241 + 0.16577540107 0.641711229947 0.625668449198 0.491978609626 + 0.213903743316 0.68449197861 0.310160427807 0.411764705882 + 0.382352941176 0.25 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.075 0.0222222222222 0.125 0.0666666666667 0.0 + 0.037037037037 0.0833333333333 0.037037037037 0.0416666666667 + 0.0555555555556 0.104166666667 0.148148148148 0.0 0.177777777778 + 0.325 0.466666666667 0.175 0.622222222222 0.5 0.177777777778 0.0 + 0.425925925926 0.916666666667 0.777777777778 0.770833333333 + 0.833333333333 0.9375 0.351851851852 0.0 0.425925925926 + 0.645833333333 0.537037037037 0.0 0.685185185185 0.895833333333 + 0.592592592593 0.0 0.377777777778 0.925 0.688888888889 0.025 + 0.444444444444 0.05 0.0 0.145833333333 0.481481481481 + 0.708333333333 0.314814814815 0.0 0.0 0.0 0.0 0.729166666667 + 0.185185185185 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.50898729085 0.161603179241 0.0480516353306 0.0514408462027 + 0.261606396752 0.33104762199 0.0722866900118 0.117975770015 + 0.1066113194 0.0747426964249 0.00181223888915 0.335521006912 + 0.114971789249 0.0549417403586 + + + + + + + + + 7 1 1 17 1 7 2 1 1 6 6 3 1 0 + + + + 54.0 + + + 1.5 + + + 35.0 + + + 1.0 + + + 1.06666666667 + + + 0.489285714286 0.508571428571 0.160606413994 0.052804664723 + 0.00377842565598 -0.0108161722157 0.00778276892311 + -0.00512603479539 0.00221540943034 + + + 9.0 + + + 0.111111111111 0.166666666667 + + + 0.0 0.0 0.0 0.444444444444 0.0 0.0 0.0 0.666666666667 + + + 6.0 + + + 2.0 4.0 0.0 0.0 1.0 4.0 + + + 0.0 0.833333333333 + + + 0.648148148148 + + + 0.0 1.0 1.0 0.25 0.0 1.0 1.0 0.5 0.0 1.0 1.0 0.75 0.333333333333 + 0.833333333333 0.333333333333 0.666666666667 + + + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.5 0.5 1.0 0.5 0.0 0.0 0.5 0.5 + + + 0.221744038058 0.185633873248 0.0387421125022 0.118047292628 + 0.130147671317 0.0952283959551 0.0430772667489 0.0321498318569 + 0.0596522555865 0.142161014803 0.0397054623209 0.0514965847123 + 0.0615973993053 0.11799972778 + + + + + + + + + 58 2 91 3 91 1 91 3 344 1 13 1 3 5 3 1 61 33 60 33 60 33 60 33 60 33 + 60 33 60 33 60 33 60 33 60 33 60 33 60 33 60 33 60 33 60 33 60 33 60 + 33 60 33 60 33 60 33 60 33 60 33 61 32 61 32 61 32 61 32 61 32 61 32 + 61 32 61 32 61 20 1 11 61 32 27 1 33 32 27 2 32 31 28 2 32 31 28 2 32 + 31 28 2 5 1 27 30 14 2 1 6 4 3 5 2 26 60 5 2 25 61 5 2 24 62 5 11 2 + 34 1 40 5 33 1 12 8 35 4 32 23 34 4 32 23 34 4 33 22 34 4 33 22 34 4 + 16 1 16 23 33 4 33 23 33 4 33 23 33 4 33 23 33 4 33 22 35 3 33 21 37 + 1 35 20 36 1 36 20 36 2 35 20 36 2 35 20 73 21 35 1 36 21 35 1 36 21 + 35 3 33 22 34 4 33 22 35 3 33 22 35 3 33 22 35 4 32 22 35 4 32 22 35 + 4 33 21 35 3 34 21 35 4 33 21 35 4 33 21 35 4 32 22 35 4 32 22 35 4 + 32 22 35 4 33 21 35 4 33 21 34 5 33 21 34 6 32 21 34 5 33 21 34 5 33 + 21 34 5 33 21 34 6 32 21 5 24 5 6 32 21 3 27 4 6 3 1 5 1 22 21 3 28 3 + 6 2 24 6 21 2 29 3 6 2 27 3 21 2 29 3 6 2 28 2 21 2 29 2 7 2 28 2 22 + 1 29 2 8 1 29 1 22 1 39 1 29 1 62 1 29 1 62 1 29 2 61 1 29 2 61 1 29 + 2 92 1 56 0 + + + + 9393.0 + + + 0.920792079208 + + + 4278.0 + + + 0.13768115942 + + + 0.991318502442 + + + 0.500414151269 0.549090696587 0.146464192861 0.117059307319 + -0.000785856246719 0.00273611808102 -0.00295299541174 + 0.0231879951861 -0.016618947839 + + + 93.0 + + + 0.236559139785 0.841584158416 + + + 0.172043010753 0.301075268817 0.387096774194 0.0430107526882 + 0.118811881188 0.673267326733 1.0297029703 1.54455445545 + + + 101.0 + + + 6.0 29.0 0.171052631579 7.0 1.0 11.0 + + + 0.0 0.990099009901 + + + 0.455445544554 + + + 0.0 0.0817391304348 0.925217391304 0.515050167224 0.533913043478 + 0.765217391304 0.533913043478 0.359531772575 0.471304347826 + 0.697391304348 0.52347826087 0.272575250836 0.0 0.21 0.946666666667 + 0.467948717949 + + + 0.0 0.0 0.0 0.174825174825 0.846153846154 0.848484848485 + 0.713286713287 0.188811188811 0.0 0.0 0.0 0.141025641026 + 0.99358974359 1.0 1.0 0.147435897436 0.189393939394 0.545454545455 + 0.492424242424 0.531468531469 1.0 1.0 1.0 0.188811188811 + 0.333333333333 1.0 1.0 0.99358974359 0.0897435897436 0.125 + 0.147435897436 0.141025641026 0.375 1.0 1.0 0.935897435897 + 0.0833333333333 0.0902777777778 0.0833333333333 0.0320512820513 + 0.166666666667 0.272727272727 0.272727272727 0.524475524476 1.0 1.0 + 0.951048951049 0.0629370629371 0.0 0.0 0.0 0.423076923077 1.0 1.0 + 0.923076923077 0.0 0.0 0.0 0.0 0.384615384615 0.871794871795 + 0.916666666667 0.839743589744 0.108974358974 + + + 0.373181243433 0.0325031054585 0.0311990986047 0.137593710143 + 0.115866384068 0.0751388717267 0.00279956963871 0.07268810144 + 0.305799628294 0.0100207675858 0.235139835138 0.0565852800363 + 0.0608445065372 0.0307842089881 + + + + + + + + + 13 1 39 3 8 3 27 3 7 4 27 4 5 5 27 5 4 5 27 6 2 9 24 16 25 17 24 12 2 + 4 23 7 1 2 5 3 23 7 1 2 5 3 23 7 2 1 5 4 22 7 2 9 22 8 3 10 19 9 2 12 + 13 14 2 13 12 30 6 38 3 40 1 1 2 1 1 36 4 32 2 1 7 27 18 11 1 5 1 1 + 23 9 2 2 32 5 2 2 32 2 1 2 37 1 1 1 38 3 37 2 37 4 36 5 36 5 37 4 38 + 5 23 0 + + + + 1394.0 + + + 1.20588235294 + + + 490.0 + + + 0.444897959184 + + + 0.993736951983 + + + 0.477346938776 0.468954854669 0.133068228374 0.0967772016762 + -0.0131190065364 0.00868352019038 -0.00686684167265 + 0.00797069173253 2.99457806196e-05 + + + 41.0 + + + 0.439024390244 0.735294117647 + + + 0.0975609756098 0.780487804878 0.780487804878 0.0975609756098 + 0.588235294118 1.29411764706 0.823529411765 0.235294117647 + + + 34.0 + + + 6.0 23.0 0.25 2.0 2.0 3.0 + + + 0.0 0.970588235294 + + + 0.351506456241 + + + 0.0 0.111111111111 0.4875 0.0 0.475 0.8 0.925 0.377777777778 0.5375 + 0.744444444444 0.75 0.0 0.0 0.151515151515 0.431818181818 0.0 + + + 0.0 0.0 0.0 0.0 0.65 0.0 0.0 0.0 0.0 0.0 0.0 0.4 1.0 0.3 0.0 0.0 + 0.5 0.6 0.6 0.88 1.0 0.8 0.1 0.64 0.05 0.75 0.85 0.84 1.0 0.9 0.45 + 0.28 0.45 0.95 0.45 0.8 1.0 0.65 0.0 0.0 0.15 0.6 0.65 1.0 1.0 0.35 + 0.0 0.0 0.0 0.0 0.05 0.56 1.0 0.1 0.0 0.0 0.0 0.0 0.0 0.0 + 0.666666666667 0.0 0.0 0.0 + + + 0.485822028499 0.0456998657012 0.0346198928784 0.0531512667324 + 0.175777139514 0.0799001299445 0.0645714130235 0.0160430184074 + 0.104676595704 0.0541761182734 0.0568925795949 0.0640725404703 + 0.0950223303823 0.0484604357606 + + + + + + + + + 3 1 71 2 71 2 70 4 69 4 68 7 66 7 66 7 66 8 65 7 68 5 67 6 66 5 69 4 + 29 2 39 3 29 2 40 2 29 2 41 1 28 3 41 2 26 4 41 3 1 28 41 33 39 34 39 + 34 39 34 39 34 39 34 39 34 40 33 40 33 40 33 40 33 40 33 40 33 40 33 + 40 33 40 33 40 33 40 33 40 33 40 34 39 34 39 3 2 29 39 34 39 34 39 34 + 39 34 29 1 9 34 29 1 9 34 29 1 9 34 28 2 9 34 29 1 10 33 29 2 9 33 28 + 3 9 33 28 3 9 39 4 21 9 64 9 64 9 64 9 64 9 64 9 64 9 13 4 1 7 2 1 36 + 9 4 25 35 9 3 27 35 8 3 27 35 8 3 28 34 8 3 28 35 7 3 28 36 6 3 28 36 + 5 5 25 38 6 3 26 37 36 37 36 38 36 37 36 36 38 18 2 14 39 34 39 35 38 + 35 38 35 38 35 38 35 38 35 38 35 39 34 39 34 39 34 39 35 38 35 38 35 + 38 35 38 35 38 36 37 35 38 35 38 36 36 36 37 6 15 3 1 2 2 7 37 6 24 7 + 36 6 25 1 1 3 37 5 26 6 37 4 27 5 37 4 27 5 37 4 28 4 37 3 29 4 37 3 + 29 4 36 4 30 2 37 4 30 2 38 3 30 2 38 3 30 2 38 3 30 2 38 3 30 2 38 3 + 30 2 38 3 30 2 38 3 31 1 38 3 71 2 70 3 70 3 70 3 70 3 71 2 71 2 71 2 + 71 2 71 2 72 1 72 1 33 0 + + + + 9198.0 + + + 0.579365079365 + + + 3167.0 + + + 0.168929586359 + + + 1.26810567547 + + + 0.513029330246 0.461221345122 0.124715225653 0.189012055363 + 0.105629376652 -0.00100843303428 -0.00789043130637 + -0.00459870861451 0.00476553731799 + + + 73.0 + + + 0.342465753425 0.396825396825 + + + 0.547945205479 0.109589041096 0.164383561644 0.383561643836 + 0.190476190476 0.47619047619 0.222222222222 0.666666666667 + + + 126.0 + + + 3.0 31.0 0.152380952381 4.0 1.0 3.0 + + + 0.0 0.992063492063 + + + 0.3443139813 + + + 0.47311827957 0.699652777778 0.0358422939068 0.0 0.442652329749 + 0.892361111111 0.0179211469534 0.0 0.0215053763441 0.397569444444 + 0.978494623656 0.203125 0.0 0.297697368421 0.913412563667 + 0.141447368421 + + + 0.533333333333 0.520833333333 0.541666666667 0.444444444444 + 0.148148148148 0.0 0.0 0.0 0.0 0.8125 1.0 0.8125 0.0 0.0 0.0 0.0 + 0.0 0.8125 1.0 0.756944444444 0.0 0.0 0.0 0.0 0.0296296296296 0.875 + 1.0 0.8125 0.0740740740741 0.0 0.0 0.0 0.0 0.0833333333333 + 0.173611111111 0.75 1.0 0.916666666667 0.486111111111 + 0.263888888889 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.0625 0.0 0.0 + 0.0 0.0 0.6875 0.985185185185 1.0 0.0972222222222 0.0 0.0 0.0 + 0.01875 0.49375 0.813333333333 0.86875 0.41875 0.03125 + + + 0.545186882019 0.144204965218 0.0192255480218 0.0210923907458 + 0.283799788 0.339772165366 0.055507502292 0.0324038055098 + 0.0153463984719 0.0306108251043 0.0386327687978 0.395339723629 + 0.115624509185 0.0354711719748 + + + + + + + + + 126 4 7 2 8 2 8 2 8 2 8 1 9 1 9 1 18 2 8 2 8 2 8 2 8 2 9 1 8 2 8 2 9 + 1 68 1 9 1 9 1 9 1 8 2 7 3 7 3 7 3 8 2 7 2 8 2 8 2 8 2 8 2 8 2 8 2 8 + 2 8 2 8 2 8 2 7 3 7 3 7 3 7 3 7 3 7 3 7 2 18 1 8 3 78 1 7 4 5 5 6 3 1 + 1 5 4 6 3 7 3 6 4 6 4 7 3 6 4 6 4 6 4 6 4 6 3 7 4 6 4 6 4 6 3 7 4 6 3 + 7 3 7 3 7 3 7 3 7 3 8 2 8 1 8 2 8 2 8 2 8 0 + + + + 1040.0 + + + 0.0961538461538 + + + 194.0 + + + 1.11340206186 + + + 0.686173264487 + + + 0.372279495991 0.626213592233 0.0272123750785 3.56224093953 + -0.286481028802 0.00124127726095 0.266294483954 -0.0198804066521 + -3.16799705163 + + + 10.0 + + + 1.7 0.00961538461538 + + + 1.2 2.0 1.6 0.4 0.0 0.0 0.0384615384615 0.0 + + + 104.0 + + + 1.0 10.0 0.179487179487 5.0 3.0 1.0 + + + 0.115384615385 0.990384615385 + + + 0.186538461538 + + + 0.0 0.0 0.0961538461538 0.903846153846 0.0 0.128205128205 + 0.435897435897 0.448717948718 0.115384615385 0.442307692308 + 0.211538461538 0.0 0.24358974359 0.0512820512821 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0769230769231 0.769230769231 0.846153846154 + 0.0 0.0 0.0 0.0 0.0 0.307692307692 1.0 1.0 0.0 0.0 0.0 0.0 0.0 + 0.384615384615 1.0 0.692307692308 0.0 0.0 0.0 0.384615384615 + 0.730769230769 0.384615384615 0.461538461538 0.0384615384615 0.0 + 0.0 0.0 0.923076923077 0.769230769231 0.0769230769231 0.0 0.0 + 0.0769230769231 0.384615384615 0.384615384615 0.461538461538 0.0 + 0.0 0.0 0.0 0.0769230769231 0.923076923077 0.307692307692 0.0 0.0 + 0.0 0.0 0.0 0.0769230769231 0.153846153846 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.487334574082 0.2332574109 0.217679426519 0.072786231835 + 0.416967629771 0.391385005272 0.193211983294 0.110399667525 + 0.161078345389 0.119522996204 0.185172370958 0.570073769583 + 0.262823512095 0.181099082622 + + + + + + + + + 4 1 41 2 41 2 42 1 42 1 41 1 42 3 4 1 5 3 27 17 4 5 10 1 6 17 3 4 3 1 + 5 4 6 17 3 10 2 5 6 37 7 36 7 36 6 37 6 37 6 37 6 37 7 36 7 36 7 36 7 + 36 6 30 3 1 1 2 6 37 3 1 1 39 3 42 2 41 2 40 3 39 5 38 6 37 6 36 7 36 + 7 36 7 36 7 36 7 36 7 36 7 37 6 37 6 36 8 35 8 35 8 35 8 36 7 36 7 36 + 7 36 7 36 7 36 7 36 7 36 7 2 14 1 3 1 3 12 34 1 4 4 40 3 40 3 40 3 40 + 3 40 3 40 3 41 2 41 2 41 2 2 0 + + + + 2666.0 + + + 0.693548387097 + + + 1644.0 + + + 0.156326034063 + + + 1.08651867098 + + + 0.516365426949 0.479059471102 0.0722790893513 0.104683002057 + 0.0133151853 9.44027338298e-05 0.0014818853619 0.000294925769889 + 0.0016076646339 + + + 43.0 + + + 0.279069767442 0.258064516129 + + + 0.372093023256 0.0 0.186046511628 0.558139534884 0.58064516129 + 0.193548387097 0.0 0.258064516129 + + + 62.0 + + + 4.0 16.0 0.155405405405 2.0 2.0 5.0 + + + 0.0 0.983870967742 + + + 0.616654163541 + + + 0.433333333333 0.70625 0.56 0.16875 0.539393939394 1.0 1.0 0.3125 + 0.448484848485 1.0 1.0 0.340909090909 0.309090909091 0.772727272727 + 0.757575757576 0.471590909091 + + + 0.285714285714 0.35 0.3 0.525 0.2 0.05 0.0 0.0 0.0285714285714 1.0 + 1.0 1.0 1.0 1.0 0.675 0.0 0.0238095238095 1.0 1.0 1.0 1.0 1.0 0.625 + 0.0 0.0857142857143 0.925 1.0 1.0 1.0 1.0 0.625 0.0 0.0 0.825 1.0 + 1.0 1.0 1.0 0.675 0.0 0.0 0.854166666667 1.0 1.0 1.0 1.0 0.6875 0.0 + 0.0 0.725 0.925 1.0 1.0 1.0 0.775 0.0 0.0 0.458333333333 + 0.479166666667 0.75 0.52380952381 0.583333333333 0.645833333333 + 0.4375 + + + 0.550010356021 0.0479860100084 0.0123762175948 0.00736490031561 + 0.219504700335 0.0817780352945 0.0496918393251 0.0050505758628 + 0.00576506449546 0.00987898793095 0.159433726556 0.0497104974252 + 0.115532988663 0.0347217594146 + + + + + + + + + 32 4 101 30 7 2 67 39 67 39 67 39 67 39 67 39 67 39 67 23 2 12 69 23 + 3 11 69 24 3 10 69 25 4 1 1 2 1 1 71 30 76 26 1 11 68 39 67 39 67 39 + 67 39 66 40 67 39 67 38 68 38 68 36 70 38 68 38 68 38 68 38 68 38 68 + 38 68 38 67 39 67 39 67 39 68 38 68 37 70 36 69 37 69 37 70 36 70 36 + 70 36 39 1 30 36 38 4 28 36 20 4 11 18 1 5 11 36 7 21 1 1 4 36 1 3 12 + 4 5 12 2 71 26 43 1 36 28 41 1 36 28 41 1 36 28 41 1 36 29 40 2 17 1 + 17 29 40 2 16 2 15 31 40 2 32 32 40 1 34 31 40 1 36 28 41 1 36 29 40 + 1 36 29 40 1 36 28 41 1 36 28 41 1 36 28 20 1 20 1 36 28 18 3 20 1 36 + 28 18 2 20 2 36 28 18 3 19 2 36 28 18 3 19 4 1 1 31 33 15 2 14 7 30 + 40 34 2 3 2 3 1 23 34 1 4 33 2 3 2 28 31 3 4 34 1 4 2 30 28 41 1 4 2 + 30 28 41 1 4 5 27 27 42 1 4 5 27 27 42 1 3 7 26 27 42 1 36 27 7 2 11 + 1 21 1 36 27 20 1 21 1 36 27 42 1 37 25 43 1 36 27 42 1 7 2 27 27 20 + 2 20 1 7 1 28 27 20 1 59 25 43 2 36 25 21 1 21 2 36 26 19 3 20 2 36 + 26 18 4 20 1 36 26 19 4 18 3 37 25 19 10 11 4 5 12 20 25 11 25 3 6 4 + 13 20 24 5 40 3 20 14 24 5 40 3 22 12 25 4 40 3 22 12 25 2 67 12 103 + 3 103 2 105 1 69 0 + + + + 10070.0 + + + 1.11578947368 + + + 4927.0 + + + 0.142480211082 + + + 0.988018382942 + + + 0.48788309316 0.543045485363 0.17290395911 0.116272675405 + 0.00263201700581 0.00394387195897 -0.00320395235306 0.0276879898634 + -0.0159518465463 + + + 106.0 + + + 0.801886792453 1.09473684211 + + + 0.679245283019 0.679245283019 1.32075471698 0.490566037736 + 0.336842105263 0.589473684211 1.64210526316 1.68421052632 + + + 95.0 + + + 16.0 81.0 0.192148760331 4.0 2.0 4.0 + + + 0.0 0.989473684211 + + + 0.489275074479 + + + 0.0 0.165064102564 0.963141025641 0.655448717949 0.787439613527 + 0.757716049383 0.337962962963 0.359567901235 0.546822742475 + 0.612179487179 0.535256410256 0.432692307692 0.0 0.166666666667 + 0.924382716049 0.558641975309 + + + 0.0 0.0 0.0 0.365384615385 0.980769230769 0.891025641026 + 0.891025641026 0.358974358974 0.0 0.0 0.0 0.294871794872 + 0.980769230769 1.0 1.0 0.371794871795 0.587412587413 0.621794871795 + 0.634615384615 0.602564102564 0.724358974359 0.679487179487 + 0.794871794872 0.698717948718 0.909090909091 1.0 1.0 0.77380952381 + 0.0 0.0 0.0 0.0 0.818181818182 0.923076923077 1.0 0.846153846154 + 0.108974358974 0.121794871795 0.25 0.179487179487 0.223776223776 + 0.217948717949 0.224358974359 0.378205128205 1.0 0.910256410256 + 0.987179487179 0.314102564103 0.0 0.0 0.0 0.358974358974 1.0 + 0.910256410256 0.942307692308 0.134615384615 0.0 0.0 0.0 + 0.309523809524 0.928571428571 0.863095238095 0.934523809524 + 0.220238095238 + + + 0.29469289694 0.0649278546883 0.0587111892376 0.166321990491 + 0.186049384055 0.0737864509188 0.0150734531519 0.102044274497 + 0.301666655112 0.0263659629202 0.193515803181 0.0278432004993 + 0.0886479338749 0.0443508477368 + + + + + + + + + 4 1 282 2 112 5 164 3 89 12 1 18 159 6 86 33 156 9 84 34 156 11 81 35 + 156 12 81 35 155 10 1 2 82 1 2 1 4 24 155 16 87 25 156 15 82 30 156 + 15 76 36 156 16 74 37 156 17 73 38 155 17 73 38 155 17 73 38 155 17 + 73 37 156 17 74 36 156 16 7 1 67 37 155 16 7 3 65 37 155 17 5 6 6 2 + 55 37 155 18 5 7 5 4 52 37 155 20 3 9 3 5 51 37 155 20 4 18 49 37 155 + 20 4 20 47 37 154 21 3 24 43 39 153 20 5 4 2 1 4 3 1 10 41 39 153 21 + 5 23 43 38 153 21 1 2 2 3 5 10 48 37 154 21 2 1 3 6 10 2 47 37 155 20 + 1 2 4 6 14 1 43 37 156 22 24 5 4 1 34 37 156 22 24 17 27 37 156 22 1 + 1 2 3 4 1 11 21 24 37 156 36 11 23 20 25 1 3 1 7 156 22 6 5 14 25 19 + 36 156 24 3 8 11 29 15 10 1 26 156 31 1 4 11 3 3 25 12 37 157 29 3 5 + 10 31 11 37 157 30 1 2 15 32 9 37 157 35 18 29 7 5 1 31 157 21 1 14 5 + 43 4 38 157 21 2 103 158 19 2 32 4 68 158 19 4 32 1 69 158 18 7 3 1 + 27 8 29 2 30 158 17 9 1 5 1 1 3 5 15 8 28 29 2 159 3 3 12 15 1 2 1 5 + 14 12 3 1 20 191 3 7 9 22 18 8 25 191 3 8 5 26 21 5 24 192 2 9 4 26 + 23 8 19 192 2 39 23 1 2 5 19 192 2 40 1 2 23 1 1 2 19 192 2 45 23 2 + 19 193 1 28 2 16 43 193 1 29 4 16 1 4 35 66 1 126 1 32 1 23 10 2 21 + 65 4 124 1 56 33 64 6 123 2 56 32 64 7 122 1 45 2 12 7 2 21 63 10 120 + 1 47 1 16 3 2 20 63 11 190 19 62 12 189 20 64 10 190 8 4 8 63 10 190 + 8 5 7 64 8 191 9 4 7 64 8 190 9 1 1 3 7 63 9 190 21 63 9 190 21 60 13 + 189 21 59 14 172 7 11 20 59 14 5 6 161 14 4 20 59 16 3 7 108 1 57 3 6 + 23 59 28 106 2 50 38 58 29 107 1 53 35 58 30 106 1 56 32 58 32 104 1 + 59 29 58 33 166 27 57 34 167 25 57 9 10 15 170 22 57 7 1 1 10 17 171 + 19 56 37 174 16 56 27 3 9 173 15 56 27 6 7 175 12 56 39 178 10 56 39 + 14 3 163 8 55 31 4 5 14 3 82 1 80 9 54 40 14 5 79 3 79 10 53 40 13 7 + 78 3 81 7 54 6 1 33 12 9 78 2 82 5 55 4 7 29 11 11 77 2 84 3 55 5 6 + 28 13 9 222 5 7 26 14 10 221 1 2 2 9 24 14 11 223 3 1 3 6 22 13 13 76 + 1 145 8 5 22 13 14 75 1 150 7 1 21 13 16 74 1 150 29 13 16 74 2 148 1 + 2 5 2 20 14 11 77 3 152 3 6 11 3 3 14 10 6 1 72 2 153 6 2 5 1 1 1 2 5 + 1 16 21 67 2 152 6 5 2 4 3 4 1 16 21 232 2 2 6 1 3 12 19 2 5 1 2 212 + 4 12 2 5 6 13 29 213 5 9 3 5 1 3 2 13 30 227 2 2 5 1 3 13 31 226 2 2 + 9 12 33 224 14 12 34 223 13 13 35 222 3 2 5 2 1 13 36 221 2 3 4 16 5 + 2 10 1 20 219 2 4 4 16 4 3 1 1 5 1 23 219 2 5 3 25 5 1 24 256 4 1 23 + 254 3 1 1 1 14 5 3 250 22 1 1 6 4 250 21 1 1 7 4 221 2 27 6 1 16 7 3 + 221 2 29 2 4 13 233 2 34 6 2 5 234 1 31 1 1 8 3 6 23 1 241 11 1 5 23 + 4 240 11 2 2 24 5 240 14 24 4 241 14 24 3 241 14 24 4 3 3 236 2 2 6 2 + 1 23 5 2 4 240 9 23 11 241 7 24 11 241 7 24 11 242 6 23 12 234 3 7 4 + 23 12 233 5 7 2 23 19 228 3 8 2 4 3 3 1 12 15 1 3 232 1 4 6 1 8 12 13 + 4 2 232 11 2 7 11 15 2 6 222 26 12 25 221 25 12 26 221 24 11 28 221 1 + 1 21 11 6 1 22 224 19 11 30 223 18 12 13 2 15 224 17 11 7 2 2 3 18 + 224 16 11 5 4 2 1 1 1 19 224 6 2 4 14 5 3 10 3 13 224 1 6 5 12 32 235 + 4 12 36 223 1 6 5 12 36 224 11 12 38 222 11 11 40 222 10 10 41 223 10 + 9 7 1 34 224 9 8 6 2 34 229 3 9 5 6 31 242 4 5 32 229 1 13 3 6 30 229 + 1 15 1 12 24 259 24 245 10 4 23 245 38 246 3 3 1 1 2 1 26 246 3 14 19 + 247 2 17 7 2 8 256 4 8 4 5 6 258 2 7 4 4 8 267 15 251 5 11 7 2 7 252 + 8 7 16 253 4 10 15 268 15 266 17 267 15 269 5 279 1 282 1 1703 2 280 + 5 278 5 278 5 278 4 279 4 279 4 278 5 278 5 279 4 11 0 + + + + 53204.0 + + + 1.50531914894 + + + 7890.0 + + + 0.284664131812 + + + 1.75565003356 + + + 0.484297386943 0.385332411568 0.860597630499 0.274861911814 + 0.420509189083 0.0910092701068 0.122985723752 0.161207284388 + 0.0669463006268 + + + 283.0 + + + 1.43816254417 2.11170212766 + + + 1.86572438163 0.763250883392 1.17314487633 1.90812720848 + 2.46808510638 2.48936170213 2.59574468085 0.893617021277 + + + 188.0 + + + 57.0 245.0 0.228171334432 58.0 0.0 8.0 + + + 0.0 0.994680851064 + + + 0.148297120517 + + + 0.448024316109 0.0881458966565 0.00334346504559 0.0 0.529517530716 + 0.251423434222 0.0 0.0 0.0 0.299970032964 0.133353311358 0.0 0.0 + 0.00779142942763 0.324243332334 0.286185196284 + + + 0.429813664596 0.782142857143 0.0496894409938 0.0214285714286 + 0.0136645962733 0.0 0.0 0.0 0.023602484472 0.538095238095 + 0.23850931677 0.047619047619 0.0 0.0 0.0 0.0 0.314009661836 + 0.605324074074 0.600241545894 0.395833333333 0.0 0.0 0.0 0.0 + 0.590062111801 0.605952380952 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.182608695652 0.539285714286 0.111801242236 0.0 0.0 0.0 0.0 0.0 + 0.006038647343 0.458333333333 0.405797101449 0.0219907407407 0.0 + 0.0 0.0 0.0 0.0 0.0309523809524 0.498136645963 0.404761904762 + 0.214906832298 0.00119047619048 0.0 0.0 0.0 0.0 0.0 0.394675925926 + 0.752415458937 0.18287037037 + + + 0.418760345477 0.241978782705 0.146892807343 0.0784026831875 + 0.207529723313 0.388553841839 0.180394873316 0.203176346313 + 0.0572475354766 0.103718845682 0.160437414322 0.270334156722 + 0.321448862215 0.136443685005 + + + + + + + + + 37 6 38 8 37 9 20 3 13 9 21 1 13 8 37 7 37 8 23 4 39 6 37 7 37 8 36 9 + 36 13 29 17 27 18 27 18 27 20 24 22 23 21 23 23 21 15 3 5 21 1 1 10 1 + 2 31 10 2 2 31 6 1 3 7 3 32 3 6 5 30 6 39 5 40 4 40 5 40 5 40 3 41 4 + 41 3 42 1 356 5 39 7 35 1 2 5 36 8 38 1 1 3 43 1 85 2 42 3 189 2 43 2 + 43 1 44 1 43 1 31 2 9 3 32 1 9 1 33 0 + + + + 2700.0 + + + 0.75 + + + 396.0 + + + 0.742424242424 + + + 0.812609930997 + + + 0.443181818182 0.32939565143 0.243884552597 0.424148638719 + -0.22539791858 0.094127121145 -0.0552629139498 -0.0490721379799 + 0.30883965406 + + + 45.0 + + + 0.688888888889 0.216666666667 + + + 0.711111111111 1.33333333333 0.711111111111 0.0 0.133333333333 + 0.466666666667 0.0666666666667 0.2 + + + 60.0 + + + 0.0 8.0 0.460526315789 9.0 1.0 2.0 + + + 0.0 0.983333333333 + + + 0.146666666667 + + + 0.00606060606061 0.151515151515 0.121212121212 0.0787878787879 + 0.363636363636 0.70303030303 0.10303030303 0.0666666666667 + 0.151515151515 0.321212121212 0.0 0.0 0.305555555556 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.075 0.171428571429 0.075 0.0 0.0208333333333 + 0.404761904762 0.166666666667 0.0 0.354166666667 0.0952380952381 + 0.0 0.0 0.375 1.0 0.7 0.314285714286 0.15 0.0 0.275 0.0714285714286 + 0.875 0.952380952381 0.270833333333 0.0 0.0 0.0 0.0 0.0238095238095 + 0.5 0.785714285714 0.166666666667 0.0 0.0 0.0 0.0 0.0 0.0 + 0.342857142857 0.0 0.0 0.0 0.0 0.0 0.571428571429 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.738095238095 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.695306287084 0.0943423349023 0.0920957740169 0.0613510033422 + 0.805056719044 0.195131525517 0.0405055703455 0.203605119341 + 0.116461252637 0.0560774572169 0.866080629886 0.174833626955 + 0.100711034657 0.0203258378756 + + + + + + + + + 34 1 72 1 34 1 37 1 34 1 37 2 32 2 37 2 32 2 37 3 30 3 37 7 3 1 22 3 + 37 25 1 10 37 36 37 36 37 36 37 36 38 35 38 35 38 35 38 4 1 30 38 35 + 38 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 36 37 + 36 38 3 1 31 38 35 38 35 38 35 38 35 38 35 38 35 37 37 36 38 35 38 35 + 38 35 38 35 38 36 36 37 36 37 36 1 1 35 36 1 1 35 36 1 2 34 36 1 3 33 + 36 1 4 32 36 1 9 26 8 5 24 1 30 5 4 29 4 1 39 30 3 1 39 29 4 1 39 29 + 4 1 39 29 4 1 39 28 5 1 39 28 45 27 7 1 38 28 6 1 38 28 6 1 38 28 6 1 + 38 35 38 35 38 35 38 35 38 35 38 35 38 35 39 34 39 34 4 1 34 36 1 3 1 + 1 24 42 34 1 1 36 39 34 39 34 39 34 39 35 38 35 38 35 38 35 38 35 38 + 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 + 5 21 12 35 5 26 7 36 3 29 5 35 5 29 5 34 6 28 5 35 4 30 4 35 3 32 3 + 34 5 30 3 70 4 32 0 + + + + 7519.0 + + + 0.708737864078 + + + 3393.0 + + + 0.138815207781 + + + 0.68172300329 + + + 0.502144938927 0.504484434505 0.119220078694 0.196421464806 + -0.102318080545 -0.000825614447187 0.00146886986415 + 0.000776706734873 -0.00261211607068 + + + 73.0 + + + 0.424657534247 0.398058252427 + + + 0.602739726027 0.328767123288 0.547945205479 0.164383561644 + 0.349514563107 0.233009708738 0.621359223301 0.31067961165 + + + 103.0 + + + 4.0 27.0 0.217993079585 3.0 5.0 3.0 + + + 0.0 0.990291262136 + + + 0.451256816066 + + + 0.0 0.042735042735 0.944444444444 0.660256410256 0.0755555555556 + 0.0235042735043 0.982905982906 0.679487179487 0.733333333333 + 0.987179487179 0.168803418803 0.222222222222 0.646315789474 + 0.935222672065 0.111336032389 0.0 + + + 0.0 0.0 0.0 0.17094017094 0.957264957265 0.820512820513 + 0.786324786325 0.547008547009 0.0 0.0 0.0 0.0 1.0 1.0 1.0 + 0.307692307692 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.307692307692 + 0.194444444444 0.111111111111 0.0512820512821 0.042735042735 + 0.957264957265 0.974358974359 1.0 0.410256410256 0.481481481481 + 0.991452991453 0.991452991453 0.982905982906 0.333333333333 + 0.34188034188 0.444444444444 0.444444444444 0.416666666667 1.0 1.0 + 0.974358974359 0.0 0.0 0.0 0.0 0.407407407407 1.0 1.0 1.0 0.0 0.0 + 0.0 0.0 0.391666666667 0.761538461538 0.823076923077 0.930769230769 + 0.423076923077 0.0 0.0 0.0 + + + 0.401764512037 0.191649698135 0.00652995269555 0.00805511484816 + 0.0250517109201 0.380483441016 0.0755674021386 0.0274185709813 + 0.019287488485 0.00992670268076 0.158464761902 0.286177973325 + 0.123044111723 0.0478327741104 + + + + + + + + + 40 1 43 1 9 4 29 2 9 14 2 5 4 3 5 2 8 15 2 13 2 4 8 16 1 13 1 6 7 37 + 7 16 2 19 7 16 2 19 8 15 1 20 6 17 1 20 4 40 4 40 3 41 3 41 3 41 2 42 + 2 131 2 42 2 42 3 40 4 40 4 3 3 3 2 29 4 1 5 2 4 28 3 5 1 35 3 41 4 4 + 1 35 5 2 2 35 4 40 4 40 5 39 5 40 4 40 4 40 4 40 4 40 4 40 5 39 5 39 + 5 39 5 39 5 39 5 39 5 39 5 39 5 5 14 21 5 3 31 5 5 3 33 3 5 3 33 3 5 + 3 41 3 41 3 41 3 42 2 42 2 42 2 42 2 36 0 + + + + 2596.0 + + + 0.745762711864 + + + 1778.0 + + + 0.14848143982 + + + 0.988437001595 + + + 0.514034582886 0.443058841783 0.0771347839613 0.0974304137493 + 0.000890042160241 -0.000110370538345 -0.000531303530232 + 0.00122658699473 0.0015982513833 + + + 44.0 + + + 0.409090909091 0.389830508475 + + + 1.0 0.363636363636 0.0909090909091 0.181818181818 0.813559322034 + 0.338983050847 0.0677966101695 0.271186440678 + + + 59.0 + + + 5.0 29.0 0.187817258883 0.0 3.0 3.0 + + + 0.0 0.983050847458 + + + 0.684899845917 + + + 0.512987012987 0.836363636364 0.69696969697 0.333333333333 + 0.727272727273 0.969696969697 1.0 0.2 0.746753246753 1.0 1.0 + 0.260606060606 0.603896103896 0.860606060606 0.884848484848 + 0.315151515152 + + + 0.0 0.314285714286 0.9 0.6 0.457142857143 0.275 0.114285714286 0.0 + 0.642857142857 0.97619047619 1.0 0.785714285714 0.952380952381 1.0 + 0.738095238095 0.416666666667 0.571428571429 1.0 1.0 0.857142857143 + 1.0 1.0 0.428571428571 0.0 0.452380952381 0.904761904762 1.0 1.0 + 1.0 1.0 0.428571428571 0.0 0.571428571429 0.942857142857 1.0 1.0 + 1.0 1.0 0.542857142857 0.0 0.47619047619 1.0 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.371428571429 1.0 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.404761904762 0.666666666667 0.8125 + 0.666666666667 0.738095238095 0.833333333333 0.761904761905 0.0 + + + 0.508886217724 0.0260289156037 0.0171228970235 0.00503631256137 + 0.124844437 0.0475149405108 0.0534985793629 0.00414953146926 + 0.0145980036269 0.0210808906424 0.198653765156 0.0179570640903 + 0.134451338901 0.028497347018 + + + + + + + + + 39 2 78 3 58 6 2 1 3 12 47 34 42 39 40 40 41 41 40 41 40 20 1 20 39 + 21 1 20 39 21 1 20 40 20 1 20 40 20 1 20 40 41 40 41 40 41 39 42 40 + 41 40 41 40 41 40 41 40 41 40 41 40 35 46 4 1 29 47 4 1 31 45 39 42 + 40 41 41 40 41 40 41 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 + 41 40 41 40 41 40 41 40 41 40 41 34 1 5 41 34 3 2 42 10 4 2 4 1 8 2 7 + 1 42 5 33 2 42 3 34 2 42 2 35 2 42 2 34 3 42 2 33 6 40 3 33 4 40 3 34 + 4 41 2 34 5 76 5 32 4 40 6 33 2 41 3 78 2 80 1 36 1 43 1 36 1 43 1 36 + 1 43 1 35 2 43 1 35 2 43 1 30 1 4 2 43 2 8 28 43 2 4 32 43 39 42 38 + 42 39 42 39 42 40 42 39 41 40 41 40 42 3 1 35 42 39 42 39 42 39 42 39 + 42 39 42 39 42 39 42 39 42 39 42 36 45 31 59 22 56 1 1 29 44 39 42 1 + 1 1 2 34 43 38 42 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 + 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 40 41 17 17 5 42 9 72 4 + 34 1 42 5 32 3 40 7 75 5 76 5 76 5 75 6 76 4 77 3 79 1 38 0 + + + + 9801.0 + + + 0.669421487603 + + + 3595.0 + + + 0.160222531293 + + + 1.90445517982 + + + 0.504450625869 0.466316643486 0.141281083556 0.325952221354 + 0.16614605462 -0.000599744074855 -0.000322777109768 + -0.00056928493588 0.00547221122748 + + + 81.0 + + + 0.691358024691 0.338842975207 + + + 0.197530864198 0.395061728395 1.38271604938 0.740740740741 + 0.297520661157 0.561983471074 0.330578512397 0.165289256198 + + + 121.0 + + + 6.0 36.0 0.173252279635 5.0 2.0 3.0 + + + 0.0 0.99173553719 + + + 0.366799306193 + + + 0.845 0.538333333333 0.0 0.0 0.901666666667 0.545 0.0 0.0 0.08 + 0.115 0.76 0.690322580645 0.0 0.0111111111111 0.766666666667 + 0.623655913978 + + + 0.673333333333 0.893333333333 0.806666666667 0.253333333333 0.0 0.0 + 0.0 0.0 0.813333333333 1.0 1.0 0.0933333333333 0.0 0.0 0.0 0.0 0.8 + 1.0 1.0 0.0733333333333 0.0 0.0 0.0 0.0 0.886666666667 0.92 + 0.993333333333 0.113333333333 0.0 0.0 0.0 0.0 0.18 0.14 0.2 0.26 + 0.593333333333 0.786666666667 0.873333333333 0.61875 0.0 0.0 0.0 + 0.0 0.66 1.0 1.0 0.3 0.0 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.25 + 0.0 0.0 0.0 0.0424242424242 0.630303030303 0.781818181818 + 0.987878787879 0.301136363636 + + + 0.287579320986 0.271491532684 0.0123245068791 0.00592022368569 + 0.189803488618 0.485232709634 0.130056959362 0.0149816570905 + 0.00766572785379 0.00557739650961 0.16530921038 0.258350210625 + 0.248544284378 0.0559635059709 + + + + + + + + + 4 1 140 22 5 1 113 33 108 34 107 34 107 34 107 34 107 17 1 16 107 17 + 1 16 107 34 107 34 107 34 107 34 107 34 107 34 107 34 107 35 106 35 + 106 35 106 35 107 34 107 34 107 34 106 36 104 37 105 36 105 36 106 36 + 105 35 106 34 108 33 108 33 108 2 1 14 1 15 108 1 1 15 2 7 1 1 4 1 + 108 33 108 33 108 33 109 32 109 32 109 32 109 32 109 32 109 32 109 4 + 2 26 110 1 19 11 110 1 25 2 139 2 139 2 139 2 139 1 140 2 139 2 140 1 + 140 1 140 1 140 1 140 1 140 1 26 3 111 1 25 5 136 6 135 8 133 9 132 + 10 131 11 130 12 128 13 128 12 2 1 68 1 33 1 23 15 68 1 33 1 23 15 68 + 1 33 1 23 16 67 1 33 1 23 17 66 2 19 6 7 1 23 22 61 2 9 20 3 1 22 17 + 1 8 58 3 3 26 2 1 22 17 1 9 57 36 21 16 3 9 56 36 21 16 3 4 4 1 56 36 + 21 17 2 4 3 4 54 36 21 23 1 7 53 36 21 32 52 36 21 33 51 36 21 33 51 + 36 21 35 49 37 20 36 48 37 19 38 47 39 16 40 44 41 17 39 44 40 17 39 + 16 1 28 40 17 39 14 4 27 40 17 39 14 7 24 40 17 5 5 28 15 8 24 39 19 + 5 1 27 1 1 15 8 26 16 2 19 20 35 15 10 24 38 19 35 15 12 22 38 18 36 + 14 14 22 37 18 37 13 16 19 7 1 30 24 27 1 3 13 17 18 4 1 33 25 9 1 15 + 2 3 12 18 19 37 25 8 3 10 3 1 3 2 12 19 18 37 25 8 2 12 2 1 2 3 12 20 + 17 37 26 7 2 12 1 1 3 3 12 21 16 37 18 1 3 12 1 15 2 3 12 23 14 37 18 + 15 2 19 12 24 14 37 18 2 1 33 12 25 13 37 23 31 12 26 12 37 28 1 5 20 + 12 27 11 37 35 2 3 3 1 10 12 29 9 37 35 4 1 2 3 9 12 29 9 38 36 5 10 + 2 11 31 8 38 37 8 7 1 11 32 7 38 39 9 16 4 4 18 3 4 7 37 43 5 16 4 4 + 3 1 13 5 4 6 37 43 5 16 4 4 16 4 7 5 37 43 5 16 5 3 16 10 1 5 38 42 5 + 1 1 13 6 2 17 9 3 4 16 4 1 5 12 42 8 12 6 2 18 8 3 4 9 22 7 42 8 12 7 + 1 7 1 10 8 3 4 2 30 6 41 10 11 27 7 3 37 5 41 10 11 16 1 10 8 2 38 4 + 43 7 12 17 1 9 48 4 43 2 1 4 12 4 4 18 50 3 46 4 12 4 5 17 6 1 43 3 + 47 3 13 3 7 3 2 11 4 4 42 2 47 3 14 1 8 17 2 5 42 3 46 3 13 2 8 14 1 + 2 2 5 43 2 45 3 12 6 1 23 1 5 43 2 46 2 11 37 44 1 47 1 11 6 1 9 5 15 + 45 1 59 5 3 7 6 15 108 1 4 2 2 4 5 15 109 32 110 31 111 29 113 28 114 + 27 115 1 4 21 117 1 2 21 118 5 3 15 126 14 128 3 3 7 122 2 4 3 2 8 + 123 2 1 15 124 17 124 17 125 17 125 15 127 13 128 14 127 13 128 14 + 132 6 136 5 137 4 137 4 138 3 140 1 8 0 + + + + 21855.0 + + + 0.909677419355 + + + 5827.0 + + + 0.204221726446 + + + 1.57602339181 + + + 0.408203192037 0.520865696857 0.312924745571 0.246901848872 + 0.175150966491 0.080430292404 -0.0161103712594 0.0566711738153 + -0.070914572247 + + + 141.0 + + + 1.21985815603 1.4064516129 + + + 1.27659574468 0.765957446809 1.0780141844 1.75886524823 + 0.232258064516 0.774193548387 2.94193548387 1.44516129032 + + + 155.0 + + + 26.0 147.0 0.234015345269 15.0 7.0 11.0 + + + 0.0 0.993548387097 + + + 0.266620910547 + + + 0.833834586466 0.252014652015 0.906227106227 0.0014652014652 0.1 + 0.175824175824 0.342124542125 0.0263736263736 0.0 0.0835164835165 + 0.544322344322 0.0498168498168 0.0 0.0 0.425213675214 + 0.524928774929 + + + 0.727554179567 0.69040247678 0.176470588235 0.213622291022 + 0.910216718266 0.794117647059 0.0061919504644 0.0 0.918128654971 + 0.985380116959 0.338888888889 0.271929824561 0.994152046784 0.925 + 0.0 0.0 0.164086687307 0.247678018576 0.117647058824 + 0.0526315789474 0.260061919505 0.329411764706 0.111455108359 0.0 + 0.0 0.0 0.00833333333333 0.526315789474 0.619883040936 + 0.163888888889 0.0 0.0 0.0 0.0 0.0 0.330409356725 0.997076023392 + 0.572222222222 0.0438596491228 0.0 0.0 0.0 0.0 0.0030959752322 + 0.368421052632 0.226470588235 0.164086687307 0.0 0.0 0.0 0.0 0.0 + 0.27485380117 0.894444444444 0.739766081871 0.105555555556 0.0 0.0 + 0.0 0.0 0.00877192982456 0.494444444444 0.716374269006 + 0.558333333333 + + + 0.402084137059 0.176012125597 0.0935612266292 0.129323690994 + 0.105524021989 0.233085498862 0.108785917993 0.174646972551 + 0.261198098362 0.122429980122 0.0771050739311 0.219479330239 + 0.174974887292 0.0494457034039 + + + + + + + + + 43 2 43 2 44 1 43 2 43 1 43 2 42 3 41 3 42 3 40 5 40 4 41 4 41 3 42 4 + 41 3 41 3 41 6 40 4 40 4 38 6 39 2 1 3 41 4 39 6 39 5 36 2 1 5 35 10 + 35 2 1 2 1 4 34 4 2 3 37 4 1 3 39 7 38 6 39 6 38 3 1 2 26 1 13 2 1 2 + 22 2 1 2 13 2 2 1 21 2 1 4 11 3 24 2 1 4 11 3 24 1 2 4 1 1 8 3 28 6 9 + 1 28 8 8 1 28 3 1 4 8 1 26 4 2 4 34 5 2 3 34 11 33 12 4 1 2 1 26 12 3 + 7 23 13 1 7 22 23 22 22 22 23 22 23 22 23 24 12 1 7 24 11 2 7 25 11 2 + 7 25 18 1 1 23 21 23 21 24 20 25 18 26 14 1 3 26 21 24 21 24 21 24 21 + 24 9 1 11 24 8 2 11 24 8 3 10 25 6 2 11 25 6 2 12 24 19 26 18 27 17 + 29 5 3 4 2 2 30 3 3 5 3 1 29 4 3 8 30 4 2 10 29 1 1 14 30 14 32 13 33 + 11 31 14 32 12 36 9 37 8 37 8 38 6 39 6 39 6 39 6 39 5 41 4 42 1 35 0 + + + + + 4185.0 + + + 0.483870967742 + + + 990.0 + + + 0.412121212121 + + + 0.662298387097 + + + 0.365817263545 0.592479139218 0.108005187061 0.395820258498 + -0.164063123841 0.0313345384234 0.0969926497409 -0.0606233876545 + -0.125101979915 + + + 45.0 + + + 1.22222222222 0.494623655914 + + + 1.6 1.42222222222 1.06666666667 0.8 0.0430107526882 1.16129032258 + 0.430107526882 0.344086021505 + + + 93.0 + + + 9.0 53.0 0.34703196347 5.0 5.0 3.0 + + + 0.0 0.989247311828 + + + 0.236559139785 + + + 0.0 0.0632411067194 0.640316205534 0.609848484848 0.0 + 0.312252964427 0.95256916996 0.359848484848 0.0 0.256916996047 + 0.237154150198 0.0 0.289855072464 0.11231884058 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.05 0.690909090909 0.716666666667 0.116666666667 + 0.0 0.0 0.0 0.222222222222 0.861111111111 0.893939393939 + 0.819444444444 0.722222222222 0.0 0.0 0.0181818181818 + 0.766666666667 1.0 0.981818181818 0.9 0.433333333333 0.0 0.0 0.0 + 0.444444444444 0.916666666667 0.924242424242 0.208333333333 0.0 0.0 + 0.0 0.0757575757576 0.111111111111 0.791666666667 0.0151515151515 + 0.0 0.0 0.0 0.0 0.672727272727 0.25 0.0333333333333 0.0 0.0 0.0 + 0.030303030303 0.486111111111 0.454545454545 0.0138888888889 0.0 + 0.0 0.0 0.0 0.393939393939 0.236111111111 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.705889309958 0.107872829508 0.113536636827 0.0445563501789 + 0.784406042615 0.259961816605 0.0637366085173 0.22894786106 + 0.0563531857003 0.0507512528567 0.705016432643 0.363314328993 + 0.13484107331 0.0494476899857 + + + + + + + + + 39 1 42 1 41 2 5 9 1 4 15 1 5 3 5 38 5 38 5 38 5 38 5 38 5 38 5 39 4 + 39 5 38 4 39 4 39 3 41 2 42 1 42 1 41 1 43 1 42 1 42 1 42 3 40 3 39 4 + 39 4 39 4 39 4 4 1 34 4 39 5 38 5 38 5 38 5 38 5 38 5 38 5 38 5 38 5 + 38 5 38 5 39 5 38 5 37 6 38 5 38 5 38 6 37 24 11 2 6 + + + + 2064.0 + + + 0.895833333333 + + + 1713.0 + + + 0.116170461179 + + + 1.09553084805 + + + 0.523587134796 0.527381351617 0.0754703483286 0.0926574766456 + 0.00817061207245 -0.00033191359678 0.000558758285018 + -0.000882640138617 0.000734271616508 + + + 43.0 + + + 0.116279069767 0.104166666667 + + + 0.186046511628 0.0 0.0 0.0 0.25 0.0 0.0833333333333 0.0833333333333 + + + 48.0 + + + 5.0 14.0 0.125 1.0 3.0 3.0 + + + 0.0 0.979166666667 + + + 0.829941860465 + + + 0.6 0.858333333333 0.641666666667 0.491666666667 0.704545454545 1.0 + 1.0 0.916666666667 0.674242424242 1.0 1.0 0.977272727273 + 0.55303030303 0.939393939394 0.909090909091 0.94696969697 + + + 0.3 0.6 0.666666666667 0.766666666667 0.4 0.2 0.166666666667 0.0 + 0.5 1.0 1.0 1.0 0.966666666667 1.0 1.0 0.8 0.472222222222 1.0 1.0 + 1.0 1.0 1.0 1.0 0.833333333333 0.333333333333 1.0 1.0 1.0 1.0 1.0 + 1.0 0.833333333333 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.9 + 0.361111111111 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.333333333333 1.0 1.0 + 1.0 1.0 1.0 1.0 0.933333333333 0.361111111111 0.555555555556 + 0.805555555556 0.972222222222 0.833333333333 0.833333333333 + 0.888888888889 0.972222222222 + + + 0.358269737104 0.0420816411113 0.00262252930919 0.0126856522842 + 0.0760823442373 0.0354003645883 0.0853399335066 0.00636899987654 + 0.0205947139224 0.00257383857161 0.139921585443 0.0359851506422 + 0.106006806659 0.041374879757 + + + + + + + + + 2 1 129 4 127 3 128 3 128 4 127 5 126 5 125 6 126 4 127 4 127 3 25 1 + 102 4 18 8 101 30 101 30 101 30 101 30 101 30 101 30 101 30 101 30 + 101 30 101 30 101 30 101 30 101 30 101 30 101 30 101 30 101 30 101 30 + 101 30 101 30 16 2 83 30 16 2 82 31 16 3 82 30 17 4 80 30 17 5 79 30 + 13 1 4 5 78 30 11 4 3 6 77 30 11 3 4 7 76 30 10 4 3 7 77 30 10 14 77 + 18 2 10 10 14 77 25 3 2 9 15 77 30 9 15 77 30 9 15 77 30 9 15 77 19 1 + 4 1 2 1 2 9 15 4 3 70 19 1 2 3 5 9 15 2 8 67 30 8 27 66 31 7 28 65 30 + 8 29 64 30 8 30 63 20 7 3 7 32 91 1 7 33 90 2 6 34 89 2 6 35 88 2 7 + 34 88 2 6 36 87 2 6 36 87 2 5 38 86 2 5 38 86 3 4 38 85 3 4 40 84 3 5 + 39 84 3 5 38 85 4 4 38 86 3 4 10 3 24 87 3 5 9 10 17 88 2 4 5 2 3 14 + 13 88 2 5 3 3 3 1 2 8 1 1 13 89 1 6 2 4 6 8 15 89 1 7 11 7 16 98 11 6 + 16 99 5 3 1 7 15 103 1 12 11 1 3 117 1 3 6 2 2 117 2 2 6 2 2 123 7 + 124 7 123 8 123 8 122 9 121 9 123 8 124 3 1 3 124 4 1 2 124 7 124 7 + 124 5 125 7 123 8 123 7 124 7 34 1 1 1 87 7 34 4 87 6 34 5 86 6 34 5 + 87 4 34 7 86 1 1 2 34 8 123 9 121 11 120 11 124 8 121 1 1 8 121 1 1 7 + 119 12 119 11 120 11 119 11 120 11 120 11 120 11 119 14 117 16 2 1 + 112 20 111 20 110 20 111 19 112 18 5 1 106 19 3 4 105 27 104 28 2 1 + 100 32 98 33 98 34 96 15 1 20 95 38 93 38 93 37 94 5 3 29 94 4 7 7 1 + 18 93 5 10 2 1 1 5 14 93 2 14 3 5 13 95 1 5 5 12 13 96 11 11 13 96 11 + 11 12 101 1 2 2 13 12 120 11 121 10 122 8 124 7 124 7 124 6 123 8 121 + 10 120 3 5 3 129 2 129 2 1302 3 128 4 126 5 125 7 123 1 1 5 126 5 126 + 5 126 5 126 4 128 2 130 1 11 0 + + + + 21877.0 + + + 0.784431137725 + + + 3421.0 + + + 0.256650102309 + + + 2.10819070905 + + + 0.424369842376 0.400749446192 0.446820530679 0.447022770182 + 0.416383672297 0.112845788293 0.156068970049 0.137702915344 + 0.171701116576 + + + 131.0 + + + 0.625954198473 0.658682634731 + + + 0.488549618321 0.763358778626 0.24427480916 0.977099236641 + 0.383233532934 1.46107784431 0.383233532934 0.383233532934 + + + 167.0 + + + 9.0 67.0 0.24644549763 13.0 2.0 3.0 + + + 0.0 0.994011976048 + + + 0.156374274352 + + + 0.705792682927 0.281994047619 0.0 0.0 0.049519586105 0.559884559885 + 0.0295815295815 0.0 0.0 0.181096681097 0.0634920634921 + 0.02886002886 0.0 0.0 0.340548340548 0.274891774892 + + + 0.51875 0.940476190476 0.535714285714 0.0 0.0 0.0 0.0 0.0 0.403125 + 0.9375 0.532738095238 0.0595238095238 0.0 0.0 0.0 0.0 0.0 + 0.0812324929972 0.602240896359 0.336134453782 0.0 0.0 0.0 0.0 0.0 + 0.113095238095 0.824404761905 0.488095238095 0.122023809524 0.0 0.0 + 0.0 0.0 0.0 0.27380952381 0.473214285714 0.157738095238 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0980392156863 0.112044817927 0.0 0.0 0.0 0.0 + 0.0 0.258928571429 0.883928571429 0.291666666667 0.0 0.0 0.0 0.0 + 0.0 0.0 0.24649859944 0.655462184874 0.137254901961 + + + 0.54512247729 0.190902615632 0.18417075217 0.0643358627522 + 0.367453222353 0.425311752225 0.119722379087 0.370480532282 + 0.0283385228745 0.0672739794736 0.280345833453 0.406612343128 + 0.310549887955 0.0776892904144 + + + + + + + + + 59 1 195 4 192 6 1 10 6 3 10 1 159 37 159 37 159 37 160 37 159 37 159 + 37 159 37 159 36 160 36 160 37 159 37 159 37 159 37 159 37 159 37 159 + 37 160 36 160 37 159 36 160 36 160 36 19 4 137 36 19 5 136 37 17 8 + 134 37 17 9 132 39 14 13 4 1 125 39 15 18 124 39 15 12 130 38 16 12 4 + 1 125 38 16 18 125 37 16 18 125 35 17 19 126 33 18 15 1 5 124 33 18 + 14 2 7 122 33 17 15 1 9 121 36 14 15 1 10 120 36 15 26 119 36 16 26 + 118 36 14 17 2 10 87 3 3 2 9 5 8 36 13 31 86 34 1 4 1 14 2 10 13 32 + 85 34 25 7 13 33 84 34 30 2 12 35 83 34 44 36 82 33 45 36 83 32 45 37 + 82 32 45 37 81 33 44 40 80 32 44 41 79 32 44 6 4 31 79 32 45 3 6 30 + 80 32 54 30 80 32 54 4 1 25 17 2 61 32 54 19 5 3 19 4 60 32 55 19 5 2 + 17 7 59 32 55 20 1 2 21 7 58 32 57 23 19 2 1 5 57 32 58 24 18 7 58 32 + 60 20 20 9 1 1 53 32 61 20 19 12 52 32 61 9 1 5 2 3 18 11 54 32 62 7 + 10 1 18 12 54 32 63 6 29 12 54 32 63 6 26 2 1 12 54 32 64 5 26 15 22 + 1 31 32 65 4 27 1 1 12 22 1 31 32 65 2 28 15 22 1 31 32 64 2 28 15 23 + 1 31 32 64 3 2 1 4 4 16 14 24 2 30 33 61 16 16 13 3 2 20 2 29 34 57 + 20 15 15 2 2 20 2 29 33 58 19 16 20 3 3 13 5 25 35 61 4 1 3 3 3 17 20 + 2 4 13 7 2 2 2 3 1 3 9 36 53 1 1 2 5 2 7 4 16 28 12 22 2 3 3 35 53 22 + 16 32 8 20 4 3 2 36 53 4 1 17 16 34 6 22 1 42 53 3 3 16 16 33 7 65 53 + 3 5 13 17 35 5 65 52 3 7 12 16 36 5 66 51 3 7 11 17 37 4 17 2 1 3 16 + 4 3 2 18 51 3 9 9 16 38 5 16 2 1 1 15 2 1 24 3 52 1 11 8 16 38 4 17 2 + 17 28 2 65 7 16 1 1 37 3 35 30 1 65 7 18 38 2 35 30 1 66 5 19 15 2 21 + 2 35 30 1 67 4 16 17 3 21 2 35 30 2 67 3 16 17 3 20 3 36 27 4 67 2 16 + 19 2 60 27 3 67 2 16 19 2 21 1 38 27 2 86 20 1 20 2 38 27 4 84 41 2 + 37 29 2 86 20 1 18 3 38 116 19 2 18 2 39 116 5 8 1 8 17 3 38 116 5 17 + 17 2 38 117 6 5 3 15 9 5 36 120 3 5 3 13 10 6 37 120 11 7 14 7 37 120 + 11 6 12 1 2 8 36 122 5 11 2 4 4 12 36 145 1 14 36 160 36 161 35 161 + 35 161 35 161 35 146 4 11 36 143 6 9 38 143 6 10 37 144 4 11 37 146 3 + 11 36 144 5 11 36 141 6 1 1 10 5 2 31 140 4 1 1 12 4 4 2 2 15 4 7 139 + 6 13 1 1 2 8 3 12 1 6 4 139 6 13 4 31 3 139 6 13 4 31 3 139 6 14 3 31 + 4 137 7 14 3 32 3 137 7 15 3 31 2 138 7 15 2 32 2 139 2 1 1 18 1 33 2 + 140 3 17 1 33 1 161 2 194 2 194 2 194 1 195 1 195 2 195 1 188 0 + + + + 26068.0 + + + 1.47368421053 + + + 6842.0 + + + 0.201695410699 + + + 0.920556302257 + + + 0.439217053043 0.480664213016 0.452282577024 0.132424380735 + -0.0213105873306 0.112101432384 -0.0171365760521 0.105706576982 + -0.00792985947991 + + + 196.0 + + + 0.826530612245 1.94736842105 + + + 0.612244897959 0.367346938776 1.24489795918 1.08163265306 + 0.451127819549 2.10526315789 3.87969924812 1.35338345865 + + + 133.0 + + + 15.0 97.0 0.246616541353 19.0 0.0 6.0 + + + 0.0 0.992481203008 + + + 0.262467392972 + + + 0.0 0.240568954855 0.666666666667 0.423169267707 0.700680272109 + 0.463821892393 0.201607915894 0.0 0.0754483611626 0.525664811379 + 0.156462585034 0.0 0.0 0.0735930735931 0.596165739023 + 0.0918367346939 + + + 0.0 0.0 0.0 0.0 0.436274509804 0.9296875 0.860294117647 + 0.129901960784 0.0 0.0 0.305 0.628235294118 0.743529411765 0.5675 + 0.618823529412 0.0894117647059 0.494791666667 0.519607843137 + 0.588541666667 0.68137254902 0.737745098039 0.0651041666667 0.0 0.0 + 0.785 0.981176470588 0.615 0.0 0.0 0.0 0.0 0.0 0.0 0.183823529412 + 0.434895833333 0.132352941176 0.0441176470588 0.00260416666667 0.0 + 0.0 0.0 0.110588235294 0.745 0.778823529412 0.461176470588 0.095 + 0.0 0.0 0.0 0.0 0.0 0.208333333333 0.502450980392 0.5546875 + 0.0661764705882 0.0 0.0 0.0 0.0 0.08 0.515294117647 0.8175 + 0.176470588235 0.12 + + + 0.393455744274 0.154931799535 0.185619203262 0.165168707362 + 0.0678169986576 0.235509796871 0.0527612138506 0.301199988956 + 0.239514596997 0.126997582802 0.138804781487 0.0863850873375 + 0.139869722561 0.0862281856556 + + + + + + + + + 2 1 2 4 1 4 1 4 1 4 1 3 2 4 1 4 4 1 2 1 4 2 2 4 1 3 2 3 2 3 2 3 2 3 2 + 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 9 1 4 1 4 1 4 1 4 2 3 1 4 + 2 2 2 1 4 1 20 2 2 3 3 2 2 4 3 1 2 0 + + + + 235.0 + + + 0.106382978723 + + + 143.0 + + + 0.888111888112 + + + 1.12631578947 + + + 0.361888111888 0.462450592885 0.00818409914209 1.05014248307 + 0.00105361898115 7.5563863391e-05 -0.000427000741857 + -4.80095386818e-05 0.0856736678149 + + + 5.0 + + + 2.6 0.0 + + + 4.0 1.6 1.6 3.2 0.0 0.0 0.0 0.0 + + + 47.0 + + + 4.0 8.0 0.106382978723 3.0 16.0 1.0 + + + 0.0 0.978723404255 + + + 0.608510638298 + + + 0.636363636364 1.0 0.916666666667 0.416666666667 0.818181818182 1.0 + 1.0 0.5 0.818181818182 1.0 1.0 0.583333333333 0.318181818182 + 0.291666666667 0.541666666667 0.0833333333333 + + + 0.8 0.5 1.0 1.0 1.0 0.833333333333 0.5 0.333333333333 0.8 0.5 1.0 + 1.0 1.0 0.833333333333 0.5 0.333333333333 0.8 0.833333333333 1.0 + 1.0 1.0 1.0 0.333333333333 0.666666666667 0.8 0.833333333333 1.0 + 1.0 1.0 1.0 0.333333333333 0.666666666667 1.0 0.666666666667 1.0 + 1.0 1.0 1.0 0.333333333333 0.833333333333 0.8 0.5 0.166666666667 + 1.0 1.0 1.0 0.166666666667 0.166666666667 0.8 0.5 0.166666666667 + 1.0 1.0 1.0 0.166666666667 0.166666666667 0.0 0.0 0.0 0.0 + 0.166666666667 0.0 0.0 0.0 + + + 0.491754550966 0.228006260841 0.0358777457481 0.0119874668235 + 0.466577724771 0.351415140289 0.193292209954 0.174257965503 + 0.123458872786 0.0393141048398 0.457515058855 0.375547342756 + 0.287409231524 0.173294228245 + + + + + + + + + 5 2 4 7 2 19 3 5 3 4 1 2 3 4 1 1 1 1 5 1 6 0 + + + + 80.0 + + + 1.25 + + + 46.0 + + + 1.02173913043 + + + 1.0 + + + 0.429951690821 0.45652173913 0.124393852223 0.0724192487877 + -0.0230747102819 0.0050935892565 -0.00185882419415 + -0.00114200721112 0.00478773680618 + + + 10.0 + + + 0.3 0.375 + + + 0.8 0.0 0.0 0.4 0.0 0.0 0.5 1.0 + + + 8.0 + + + 1.0 6.0 0.0952380952381 1.0 1.0 1.0 + + + 0.0 0.875 + + + 0.575 + + + 0.25 1.0 0.5 0.5 0.5 1.0 0.833333333333 0.5 1.0 1.0 1.0 0.25 + 0.166666666667 0.833333333333 0.0 0.166666666667 + + + 0.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 0.5 0.5 0.5 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 + 1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.5 0.0 0.0 0.0 0.0 + + + 0.34413857784 0.107853185725 0.0385625103734 0.0355127412487 + 0.0001749928956 0.0714611198286 0.0419133250563 0.0688749867435 + 0.0540316497896 0.0802468187212 0.0822137792034 0.0181393290152 + 0.111572800287 0.0529270243838 + + + + + + + + + 2 2 71 1 72 1 71 2 71 2 36 1 34 3 34 2 34 10 1 28 33 40 33 40 33 40 + 34 39 34 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 38 35 39 34 + 38 36 37 35 38 35 38 35 38 35 33 48 25 40 4 1 33 35 38 35 4 1 33 35 + 37 37 37 35 38 35 38 35 38 35 38 36 36 37 36 37 36 37 36 37 37 37 36 + 37 36 37 36 37 35 22 9 7 36 6 25 6 67 6 67 6 2 30 35 6 1 32 34 40 33 + 40 33 40 33 40 33 40 33 39 34 39 34 39 34 38 37 36 38 35 37 35 38 36 + 37 37 35 38 34 39 34 39 34 44 29 39 1 4 29 39 2 3 29 39 34 39 34 39 + 34 39 34 39 34 39 2 2 30 39 2 1 31 39 34 39 35 38 35 38 35 38 1 1 33 + 38 35 38 35 38 35 38 35 38 35 38 14 15 6 38 4 69 2 35 0 + + + + 6643.0 + + + 0.802197802198 + + + 3067.0 + + + 0.131072709488 + + + 1.55538540071 + + + 0.492183820599 0.507919429048 0.126413231095 0.184037203629 + 0.109747558745 -0.000128703313256 0.00271709000299 0.00117030970413 + 0.0039156592172 + + + 73.0 + + + 0.465753424658 0.164835164835 + + + 0.657534246575 0.219178082192 0.931506849315 0.0547945205479 + 0.131868131868 0.0879120879121 0.175824175824 0.263736263736 + + + 91.0 + + + 6.0 23.0 0.218604651163 3.0 2.0 2.0 + + + 0.0 0.989010989011 + + + 0.461688995936 + + + 0.719696969697 0.888888888889 0.152173913043 0.0 0.727272727273 + 0.990338164251 0.190821256039 0.0 0.143939393939 0.140096618357 + 0.934782608696 0.87922705314 0.0 0.0 0.853546910755 0.766590389016 + + + 0.545454545455 0.888888888889 0.777777777778 0.777777777778 + 0.272727272727 0.0 0.0 0.0 0.444444444444 1.0 1.0 1.0 + 0.363636363636 0.0 0.0 0.0 0.454545454545 1.0 1.0 1.0 + 0.363636363636 0.0 0.0 0.0 0.454545454545 1.0 0.962962962963 1.0 + 0.373737373737 0.0555555555556 0.0 0.0 0.232323232323 + 0.343434343434 0.268518518519 0.292929292929 0.818181818182 1.0 + 0.848484848485 0.87962962963 0.0 0.0 0.0 0.0 0.909090909091 1.0 1.0 + 0.796296296296 0.0 0.0 0.0 0.0 0.939393939394 1.0 1.0 0.75 0.0 0.0 + 0.0 0.0 0.690909090909 0.8 0.7 0.65 + + + 0.399191289166 0.203116847484 0.0197803597404 0.0095779456608 + 0.011113942973 0.390370474285 0.0863699716116 0.0423453620484 + 0.0211190231418 0.00867472730678 0.110339940719 0.260622894169 + 0.13179322252 0.0540011427331 + + + + + + + + + 3 2 1 8 1 9 3 1 3 2 3 2 2 0 + + + + 40.0 + + + 0.625 + + + 24.0 + + + 1.25 + + + 0.92 + + + 0.489583333333 0.440476190476 0.0606915509259 0.166377314815 + -0.0345775462963 0.00119480941973 0.00472017397949 + -0.00870943467853 0.0283604196766 + + + 5.0 + + + 0.4 0.0 + + + 0.0 0.8 0.0 0.0 0.0 0.0 0.0 0.0 + + + 8.0 + + + 1.0 4.0 0.272727272727 0.0 2.0 2.0 + + + 0.0 0.875 + + + 0.6 + + + 0.0 1.0 0.5 0.0 0.5 1.0 0.5 1.0 0.5 1.0 1.0 1.0 1.0 0.75 0.25 0.0 + + + 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 + 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 + + + 0.32738857377 0.174526303153 0.136450038389 0.124136992583 + 0.220782838667 0.0321194388473 0.152439045588 0.0966558733757 + 0.0838567493086 0.180788902252 0.112872066383 0.0441067835703 + 0.0445204255936 0.0943384692445 + + + + + + + + + 1 2 175 6 171 3 174 4 173 5 172 7 170 8 169 9 168 11 161 1 4 12 124 1 + 35 1 4 13 122 12 4 2 1 11 1 3 2 2 4 15 121 37 4 16 120 37 4 17 119 37 + 4 18 118 37 4 20 116 37 4 20 116 37 4 19 117 37 4 21 115 37 4 22 114 + 37 4 19 2 1 114 37 4 23 113 37 4 23 113 37 5 3 1 14 2 1 114 37 4 4 2 + 13 2 4 111 37 4 4 2 14 1 6 110 36 4 4 1 15 1 7 109 36 4 28 109 36 4 + 20 1 9 107 36 4 20 1 12 104 36 4 35 102 36 4 37 100 31 9 38 99 36 4 + 39 98 36 5 40 96 36 5 19 2 20 95 36 5 20 1 21 94 36 5 43 93 36 5 45 + 91 36 5 46 90 36 5 47 52 2 35 36 4 49 51 24 13 36 4 32 2 2 1 14 49 73 + 4 37 1 14 48 22 2 18 2 29 4 53 48 21 2 49 5 52 48 21 3 3 2 43 5 53 47 + 20 1 51 5 30 2 22 46 72 5 31 4 22 43 21 1 4 2 44 5 2 4 27 7 18 42 4 3 + 16 1 2 3 43 5 2 5 53 41 1 1 1 4 64 5 3 5 16 1 37 39 2 4 65 5 2 8 42 3 + 9 37 3 4 3 1 45 6 9 5 3 8 60 30 40 28 3 5 3 10 14 2 44 28 40 30 1 5 3 + 11 15 1 45 26 40 30 2 3 5 11 16 3 42 25 46 25 10 11 9 6 2 1 48 17 46 + 27 2 1 6 13 9 7 12 1 37 17 44 27 2 3 5 14 1 2 5 8 47 19 43 28 2 3 5 + 20 4 7 18 1 26 20 42 28 5 1 5 21 14 2 13 2 13 1 10 20 43 27 5 1 5 24 + 11 4 13 1 11 5 10 18 41 28 5 1 5 28 7 7 24 1 13 17 42 27 5 1 5 24 5 + 15 36 18 40 29 3 3 3 26 3 17 36 17 40 29 2 4 3 48 33 18 40 29 2 4 3 + 49 34 3 2 11 40 29 2 5 2 51 33 2 2 11 40 29 2 5 2 52 9 2 26 10 41 28 + 2 5 2 54 36 9 41 27 3 5 2 55 38 6 41 28 2 5 2 58 5 3 28 6 40 28 2 5 2 + 58 38 3 41 28 2 5 2 59 38 1 42 28 3 4 2 59 81 28 3 4 2 59 81 28 3 4 2 + 62 78 28 3 4 2 65 6 4 65 29 1 5 2 66 75 28 2 4 2 67 74 28 2 4 2 68 19 + 4 50 28 2 4 2 69 11 1 6 7 10 3 34 28 2 4 2 71 9 3 3 14 1 10 30 28 2 4 + 2 73 7 3 1 9 4 22 1 4 17 28 2 4 2 75 5 13 7 32 9 34 2 76 5 1 2 9 3 1 + 2 4 1 30 7 35 1 78 8 7 1 4 6 31 7 34 1 79 5 2 1 6 1 4 6 32 6 34 1 82 + 2 1 3 9 8 30 6 35 2 82 5 8 9 29 1 1 5 35 2 82 6 7 9 32 4 35 2 82 1 1 + 10 1 9 32 4 35 2 84 10 2 8 33 4 34 2 84 10 3 7 33 4 34 2 78 1 5 11 2 + 7 34 2 35 2 78 3 4 10 3 6 35 2 34 2 80 2 1 21 35 3 33 2 80 24 35 3 33 + 2 80 24 36 2 33 2 77 27 71 2 78 26 71 2 85 7 2 10 71 2 85 19 71 2 85 + 19 71 2 81 2 1 21 70 3 80 2 1 21 70 3 82 22 70 3 87 17 70 3 89 15 70 + 3 87 17 70 3 88 16 70 3 88 16 70 3 90 14 70 3 91 14 69 3 92 13 68 4 + 94 11 68 4 93 13 67 6 94 10 68 4 96 8 69 3 98 8 68 4 97 10 65 6 100 5 + 67 5 100 5 66 7 100 4 67 4 103 2 68 4 104 1 69 2 175 2 175 3 174 3 + 174 3 174 3 175 2 175 2 175 2 175 2 175 2 175 2 176 1 176 1 176 1 176 + 1 176 1 176 1 176 1 176 1 169 0 + + + + 26019.0 + + + 1.20408163265 + + + 7109.0 + + + 0.205373470249 + + + 0.950449656145 + + + 0.522427556618 0.378789572161 0.405409740443 0.0968024388208 + -0.00198784098059 -0.0719545150539 -0.00572646565007 + -0.0534929764027 0.0140343038879 + + + 177.0 + + + 1.19209039548 2.04761904762 + + + 1.51412429379 0.83615819209 1.69491525424 0.700564971751 + 1.22448979592 3.53741496599 2.82993197279 0.462585034014 + + + 147.0 + + + 30.0 180.0 0.272267206478 13.0 4.0 14.0 + + + 0.0 0.993197278912 + + + 0.273223413659 + + + 0.454545454545 0.592751842752 0.0460687960688 0.0644963144963 0.0 + 0.512899262899 0.154176904177 0.0 0.0 0.574938574939 0.538083538084 + 0.10257985258 0.581481481481 0.587987987988 0.154954954955 0.0 + + + 0.517676767677 0.90404040404 0.822966507177 0.224747474747 + 0.0833333333333 0.1004784689 0.179292929293 0.0813397129187 0.0 + 0.396464646465 0.94976076555 0.340909090909 0.0 0.0 0.0 0.0 0.0 0.0 + 0.504784688995 0.704545454545 0.0227272727273 0.0 0.0 0.0 0.0 0.0 + 0.0382775119617 0.830808080808 0.558080808081 0.0502392344498 0.0 + 0.0 0.0 0.0 0.22966507177 0.406565656566 0.686868686869 + 0.863636363636 0.318181818182 0.0 0.0 0.0 0.677033492823 1.0 + 0.60101010101 0.011961722488 0.103535353535 0.0 0.338383838384 + 0.744949494949 0.856459330144 0.585858585859 0.512626262626 + 0.066985645933 0.0 0.0 0.381642512077 0.857487922705 0.773455377574 + 0.123188405797 0.0652173913043 0.0 0.0 0.0 + + + 0.522064346495 0.133008005463 0.100898873627 0.0706054242893 + 0.217582902606 0.328237008224 0.0149748500485 0.261640142468 + 0.2379179222 0.0482759348092 0.0127623950457 0.279236741799 + 0.108677706616 0.0371222684368 + + + + + + + + + 5 1 6 2 5 2 5 1 6 1 6 1 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 4 3 4 + 3 5 2 39 3 4 3 4 2 5 2 5 2 5 2 5 2 5 2 5 2 5 1 6 1 6 1 5 2 5 2 5 2 6 + 1 5 2 5 2 5 2 5 2 6 1 6 1 5 2 5 2 5 2 5 2 5 2 5 1 5 2 6 1 6 1 6 1 6 1 + 6 1 6 1 6 1 6 1 6 1 6 1 12 2 6 1 54 1 6 1 6 1 6 1 6 1 6 2 53 2 5 2 6 + 1 6 1 6 1 6 1 6 1 5 1 6 1 6 1 49 1 5 1 6 0 + + + + 728.0 + + + 0.0673076923077 + + + 123.0 + + + 1.74796747967 + + + 0.958585858586 + + + 0.490514905149 0.388112716079 0.0177540898947 5.91188623367 + -0.299237935865 -0.000161622980449 -0.3063477527 0.00981158437395 + 7.92547559758 + + + 7.0 + + + 1.85714285714 0.0 + + + 1.14285714286 2.28571428571 0.571428571429 0.571428571429 0.0 0.0 + 0.0 0.0 + + + 104.0 + + + 1.0 3.0 0.216216216216 7.0 11.0 1.0 + + + 0.0 0.990384615385 + + + 0.168956043956 + + + 0.0 0.0 0.0 0.230769230769 0.0 0.25 0.384615384615 0.192307692308 + 0.365384615385 0.615384615385 0.0 0.0 0.442307692308 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.153846153846 0.307692307692 0.0 0.0 0.0 + 0.0 0.0 0.0 0.153846153846 0.307692307692 0.0 0.0 0.0 0.0 + 0.153846153846 0.384615384615 0.461538461538 0.230769230769 0.0 0.0 + 0.230769230769 0.769230769231 0.923076923077 0.0769230769231 + 0.0769230769231 0.0 0.0 0.307692307692 1.0 0.923076923077 0.0 0.0 + 0.0 0.0 0.538461538462 0.615384615385 0.538461538462 0.0 0.0 0.0 + 0.0 0.0 1.0 0.615384615385 0.0 0.0 0.0 0.0 0.0 0.0 0.153846153846 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.61190229435 0.171363209529 0.159906572933 0.0533567112983 + 0.612830230003 0.366058190523 0.122565226947 0.209583549584 + 0.0549252814984 0.0749754262026 0.560091262214 0.478759108406 + 0.25243341378 0.100806580323 + + + + + + + + + 69 9 208 20 4 1 192 20 2 19 176 41 176 21 1 19 176 20 2 19 176 18 4 + 19 177 17 1 22 177 3 1 35 178 25 2 13 177 3 1 12 4 7 1 5 1 6 177 3 1 + 13 1 1 1 8 3 1 4 2 179 39 178 40 177 40 177 40 177 40 177 40 177 41 + 176 40 177 40 177 40 177 40 177 40 23 5 149 40 22 6 150 39 23 7 148 + 39 21 9 147 41 20 13 143 41 18 1 1 18 138 41 19 18 139 40 20 19 138 + 40 20 19 139 40 18 16 1 3 139 40 17 15 3 4 138 39 19 14 3 6 136 39 18 + 16 2 7 136 38 18 15 3 7 136 38 18 14 4 9 134 39 17 15 2 12 131 40 16 + 31 98 4 2 6 2 3 15 40 16 18 1 14 95 25 8 39 17 34 94 37 3 32 17 35 93 + 36 10 2 2 22 16 36 93 36 23 3 6 5 15 37 92 36 35 1 16 38 91 36 52 39 + 90 36 52 40 90 35 52 39 91 35 52 39 91 34 54 4 2 32 91 35 61 30 91 35 + 62 29 91 35 63 28 91 35 60 30 17 3 72 35 60 30 16 5 71 35 60 30 16 6 + 70 35 61 28 16 7 70 35 60 29 16 8 69 36 60 28 15 11 67 36 62 21 1 4 + 15 12 66 35 62 18 7 1 16 12 66 36 61 19 23 12 66 36 62 5 3 6 2 2 22 + 13 66 36 63 4 4 5 3 2 21 14 66 35 63 4 4 6 2 1 22 12 1 1 66 35 64 3 4 + 6 2 1 22 12 1 1 66 35 65 4 1 7 2 1 21 13 1 1 65 36 64 18 19 12 68 36 + 63 12 2 9 15 12 68 36 65 3 1 7 1 8 16 13 67 36 64 21 16 13 66 38 60 + 25 15 14 4 4 22 3 2 4 26 38 62 5 2 15 15 16 2 7 20 25 10 38 64 20 15 + 24 21 19 2 52 64 20 15 20 1 2 5 1 16 19 10 2 4 38 65 18 15 20 4 7 15 + 21 3 1 3 45 68 15 15 20 2 7 17 18 2 53 70 13 15 20 2 7 3 1 13 18 3 52 + 72 11 15 20 3 5 5 1 12 73 73 9 15 21 3 5 17 20 1 53 74 8 15 20 3 4 19 + 20 1 21 12 20 75 6 16 20 2 6 18 20 1 20 20 14 75 2 1 1 16 32 1 1 14 + 39 26 9 79 2 15 36 10 41 29 5 77 4 14 41 4 44 31 2 79 1 15 17 1 24 4 + 43 29 4 95 17 1 24 3 44 30 2 95 45 1 44 30 3 94 90 30 3 94 7 2 37 2 + 41 29 5 94 5 6 2 1 32 2 41 128 5 14 27 2 41 129 4 16 25 2 41 131 1 5 + 2 11 24 3 40 138 2 10 24 3 40 151 13 2 7 4 3 2 1 1 33 134 1 2 2 12 22 + 4 4 2 34 133 7 12 20 4 41 152 20 4 37 160 16 4 33 1 2 4 1 158 14 5 40 + 158 3 3 1 1 6 5 41 156 5 1 9 5 41 155 4 4 7 6 20 1 20 155 3 5 7 6 7 2 + 32 155 5 2 8 6 41 155 14 7 41 155 14 7 41 155 3 6 1 1 3 7 41 166 3 7 + 41 168 1 8 40 177 18 2 20 177 17 3 20 177 17 3 20 177 3 7 1 3 2 4 2 1 + 17 178 1 24 2 3 9 177 1 34 5 213 4 214 4 160 2 51 4 159 4 50 3 159 5 + 50 3 159 6 50 2 158 8 50 1 159 7 50 1 159 6 212 5 212 5 211 6 212 5 + 213 3 215 2 9 0 + + + + 28861.0 + + + 1.63157894737 + + + 7463.0 + + + 0.184912233686 + + + 0.911124826416 + + + 0.438210604414 0.477028086033 0.492675131597 0.122042304364 + -0.0228184984335 0.129987575637 -0.0104317938487 0.115668297352 + -0.0063490100952 + + + 217.0 + + + 0.824884792627 1.96992481203 + + + 0.755760368664 0.626728110599 0.976958525346 0.940092165899 + 0.872180451128 2.16541353383 3.57894736842 1.26315789474 + + + 133.0 + + + 36.0 152.0 0.244186046512 21.0 3.0 6.0 + + + 0.0 0.992481203008 + + + 0.25858424864 + + + 0.0 0.219977553311 0.671717171717 0.401416122004 0.662177328844 + 0.496071829405 0.231762065095 0.0 0.110549943883 0.517396184063 + 0.154320987654 0.0 0.0 0.0848484848485 0.496418732782 + 0.112834224599 + + + 0.0 0.0 0.0 0.0 0.453159041394 0.921296296296 0.862745098039 + 0.0217864923747 0.0 0.0 0.319444444444 0.553376906318 + 0.721132897603 0.601851851852 0.601307189542 0.119825708061 + 0.409722222222 0.400871459695 0.560185185185 0.751633986928 + 0.797385620915 0.108796296296 0.0 0.0 0.833333333333 1.0 0.6875 0.0 + 0.0 0.0 0.0 0.0 0.0555555555556 0.174291938998 0.363425925926 + 0.041394335512 0.0 0.0 0.0 0.0 0.0 0.202614379085 0.821759259259 + 0.851851851852 0.57734204793 0.0231481481481 0.0 0.0 0.0 0.0 + 0.0300925925926 0.291938997821 0.518518518519 0.395833333333 0.0 + 0.0 0.0 0.0 0.0 0.0147058823529 0.233193277311 0.850446428571 + 0.308823529412 0.134453781513 + + + 0.460939765612 0.150045860686 0.168892564788 0.134981727573 + 0.167609680026 0.282727653187 0.0545396951129 0.303128223116 + 0.218511082891 0.109502485394 0.083851918091 0.186626436604 + 0.152554814978 0.0676215819937 + + + + + + + + + 22 1 25 2 24 2 24 2 24 2 23 3 23 3 24 2 24 2 24 2 23 3 23 3 22 4 22 4 + 22 4 22 4 22 4 23 2 24 2 24 3 22 4 22 4 22 4 22 3 23 4 22 4 22 4 22 4 + 22 4 22 4 22 3 23 3 23 3 23 3 23 3 23 3 23 3 23 4 22 4 22 3 23 3 23 3 + 23 3 23 3 23 3 23 3 6 2 15 3 6 2 15 3 5 3 15 4 4 3 15 4 5 1 17 2 6 1 + 17 3 5 2 16 3 4 3 15 4 4 4 13 6 3 3 15 4 4 3 15 4 4 4 14 4 4 4 14 4 3 + 5 13 5 4 3 15 4 4 3 15 4 3 5 14 4 4 4 14 4 3 5 14 4 3 5 14 4 3 5 14 4 + 3 5 14 4 3 4 15 4 3 4 15 4 3 4 15 5 2 5 14 5 2 4 15 5 2 4 15 4 3 4 16 + 3 3 4 16 3 3 4 16 3 3 4 16 4 2 4 16 4 2 4 16 4 1 5 16 4 2 4 17 3 2 4 + 16 3 3 4 16 3 3 4 17 3 2 4 16 4 2 4 17 3 2 4 18 2 2 4 16 4 2 4 15 5 2 + 4 15 4 2 5 15 5 1 5 16 4 1 5 15 5 2 4 16 4 3 3 15 5 3 3 15 5 3 3 15 6 + 2 3 16 5 1 4 15 6 1 4 15 6 2 4 14 6 2 4 14 6 2 5 14 5 2 4 21 4 22 4 + 16 5 2 4 14 6 2 4 15 5 2 4 15 5 3 2 17 4 3 2 17 4 3 3 16 4 3 3 15 5 2 + 5 14 5 2 5 14 4 3 4 15 4 3 5 13 5 3 5 13 5 3 5 13 5 3 5 13 5 3 4 15 4 + 3 4 15 4 3 5 14 4 3 5 14 4 4 4 14 4 4 4 14 4 4 4 14 4 4 4 14 4 3 5 15 + 3 3 5 14 4 3 5 14 4 4 4 14 4 4 4 14 4 4 4 14 4 4 4 14 4 4 4 14 4 5 3 + 14 4 5 3 15 3 5 3 15 3 5 3 15 3 5 3 14 4 5 3 14 4 4 4 14 4 4 4 14 4 4 + 4 15 3 4 5 14 3 5 4 14 3 5 4 14 3 5 4 13 4 6 3 14 3 5 4 14 3 5 4 14 4 + 4 4 14 4 4 4 14 4 4 4 14 4 5 4 13 4 5 3 14 4 5 3 14 4 5 3 14 4 5 3 14 + 4 5 3 15 3 5 3 15 3 4 5 13 4 4 5 13 4 6 3 23 3 22 5 21 5 22 4 22 3 24 + 2 24 3 23 3 22 5 21 4 22 4 22 3 24 3 22 4 22 4 23 3 23 3 23 3 23 4 22 + 4 23 4 22 5 21 6 20 6 22 5 20 6 20 5 21 4 13 0 + + + + 5044.0 + + + 0.134020618557 + + + 1193.0 + + + 0.66051969824 + + + 1.02032447852 + + + 0.550645431685 0.532397534843 0.0676183520143 1.86425428976 + -0.0813553987681 -0.00253623137607 0.0746862467524 + -0.00751024315139 -0.233849571104 + + + 26.0 + + + 2.42307692308 0.603092783505 + + + 2.92307692308 1.53846153846 0.0 4.92307692308 0.0412371134021 + 0.989690721649 0.948453608247 0.412371134021 + + + 194.0 + + + 1.0 8.0 0.175895765472 3.0 0.0 2.0 + + + 0.0 0.994845360825 + + + 0.236518636003 + + + 0.0138888888889 0.646258503401 0.559027777778 0.122448979592 0.0 + 0.0 0.0863095238095 0.434402332362 0.0 0.0 0.0 0.0238095238095 + 0.443452380952 0.562682215743 0.604166666667 0.209912536443 + + + 0.0 0.0 0.430555555556 0.693333333333 0.333333333333 + 0.0972222222222 0.0 0.0 0.0 0.0555555555556 0.791666666667 + 0.666666666667 0.888888888889 0.916666666667 0.5 0.0 0.0 0.0 0.0 + 0.0 0.0972222222222 0.305555555556 0.75 0.613333333333 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0208333333333 0.47 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0933333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.347222222222 + 0.666666666667 0.652777777778 0.386666666667 0.402777777778 + 0.277777777778 0.0138888888889 0.0 0.458333333333 0.333333333333 + 0.520833333333 0.67 0.854166666667 0.75 0.739583333333 0.0 + + + 0.548850153612 0.189599162074 0.0351341006086 0.0144043826336 + 0.469494961302 0.354405319534 0.141566631272 0.0227953354042 + 0.0412158291542 0.026549323977 0.406561892456 0.354617578923 + 0.262921917231 0.118028644574 + + + + + + + + + 41 2 69 3 69 4 70 2 56 1 11 6 53 3 9 7 53 3 9 9 52 2 10 7 53 2 10 7 + 32 3 19 1 11 7 31 3 18 2 11 9 29 4 17 2 10 11 28 8 3 2 8 2 9 14 26 16 + 2 6 8 11 1 3 25 9 3 3 6 1 10 11 3 2 24 11 3 1 18 11 4 1 22 23 10 18 + 21 24 8 20 20 24 9 20 19 12 1 3 3 6 8 22 17 11 2 4 1 7 7 24 16 11 1 5 + 1 6 8 25 15 11 1 5 1 7 7 26 14 25 7 26 14 25 7 27 7 1 5 25 7 27 7 2 4 + 25 7 28 6 3 3 25 7 28 6 2 4 25 7 28 6 2 4 25 7 28 6 2 4 25 7 7 2 19 6 + 2 4 25 7 4 1 2 1 10 1 1 1 1 4 1 13 24 8 4 5 1 1 7 1 3 4 1 14 10 2 12 + 8 3 8 6 1 3 4 2 12 4 1 3 14 1 10 3 8 6 1 4 4 1 12 10 4 1 5 5 8 3 2 1 + 1 1 3 6 2 3 17 12 2 11 8 9 2 6 2 8 6 2 5 11 1 12 8 9 2 6 1 9 6 2 5 6 + 1 4 2 11 8 6 1 3 2 5 2 8 6 3 4 10 3 3 3 5 8 3 1 2 2 1 3 4 3 4 1 3 6 2 + 5 16 4 4 7 7 1 2 2 5 3 4 1 3 6 2 4 17 2 1 1 4 7 7 1 2 2 5 4 2 3 2 13 + 24 7 7 6 4 4 2 2 2 14 11 3 2 3 5 7 4 10 3 4 2 2 3 13 11 3 1 6 1 1 1 8 + 3 10 3 4 2 2 2 14 11 2 1 18 3 10 3 4 2 18 11 2 1 6 3 9 3 9 4 4 1 19 + 10 3 3 3 5 8 3 9 4 3 3 3 1 13 10 9 6 14 10 3 4 1 2 13 9 11 3 18 2 1 5 + 2 9 13 11 27 5 1 5 1 9 13 16 2 4 18 9 1 9 13 22 18 8 3 8 13 22 11 2 6 + 18 13 24 9 2 6 17 14 24 9 2 7 16 14 4 4 2 4 10 9 2 8 15 14 3 19 2 8 3 + 9 14 14 4 18 3 7 3 10 13 12 2 1 2 19 3 7 3 10 13 13 1 1 2 19 2 8 3 14 + 9 13 1 1 2 29 3 15 7 47 3 18 5 36 3 7 3 21 2 34 5 7 3 21 1 35 6 6 3 + 19 4 35 4 6 5 19 2 37 2 7 6 17 3 37 2 8 4 19 2 37 2 8 5 57 3 7 6 57 2 + 7 6 66 6 65 13 60 11 1 2 58 3 5 3 1 3 57 10 2 4 56 17 55 20 52 22 50 + 23 49 25 48 25 47 25 46 28 44 29 44 29 43 29 43 28 44 28 43 29 43 5 3 + 3 2 5 4 7 43 11 2 5 4 1 49 6 1 12 3 1 50 24 48 26 46 27 45 29 43 29 + 45 7 1 8 2 9 47 2 5 7 3 8 54 7 3 8 55 6 3 8 58 2 4 2 1 5 55 1 2 2 4 1 + 3 4 43 3 1 3 4 3 1 3 2 7 45 18 1 9 44 28 44 4 1 2 3 18 44 2 9 7 2 8 + 44 3 2 2 4 7 2 10 42 7 4 8 1 8 45 7 4 12 1 6 42 5 9 3 2 10 43 2 12 16 + 42 2 12 16 42 2 13 15 42 2 17 6 3 2 61 4 4 4 58 7 2 5 55 17 56 16 60 + 11 64 8 65 6 60 14 58 13 62 10 63 9 63 1 3 5 68 3 2 0 + + + + 9432.0 + + + 0.549618320611 + + + 3163.0 + + + 0.394878280114 + + + 1.23563998191 + + + 0.582924038063 0.433814051898 0.109267555072 0.36250501395 + 0.105040378692 -0.0176268786985 0.041512638541 -0.00612455601713 + 0.100241858213 + + + 72.0 + + + 3.59722222222 2.00763358779 + + + 1.16666666667 3.5 4.83333333333 4.88888888889 1.86259541985 + 4.30534351145 0.671755725191 1.12977099237 + + + 131.0 + + + 29.0 119.0 0.256333830104 29.0 12.0 4.0 + + + 0.0 0.992366412214 + + + 0.335347752332 + + + 0.4375 0.486531986532 0.0 0.0 0.401041666667 0.373737373737 + 0.0353535353535 0.0 0.649305555556 0.405723905724 0.649831649832 + 0.215488215488 0.251736111111 0.425925925926 0.393939393939 + 0.651515151515 + + + 0.0972222222222 0.430555555556 0.333333333333 0.194444444444 0.0 + 0.0 0.0 0.0 0.243055555556 0.979166666667 0.915032679739 + 0.486111111111 0.0 0.0 0.0 0.0 0.0902777777778 0.944444444444 + 0.503267973856 0.347222222222 0.0 0.0 0.0 0.0 0.159722222222 + 0.409722222222 0.372549019608 0.263888888889 0.145833333333 0.0 0.0 + 0.0 0.513888888889 0.75 0.483660130719 0.222222222222 + 0.604166666667 0.59477124183 0.3125 0.0522875816993 0.354166666667 + 0.979166666667 0.516339869281 0.388888888889 0.430555555556 + 0.954248366013 0.520833333333 0.0 0.0138888888889 0.840277777778 + 0.516339869281 0.75 0.201388888889 0.915032679739 0.763888888889 + 0.43137254902 0.0 0.152777777778 0.202614379085 0.243055555556 + 0.0347222222222 0.392156862745 0.618055555556 0.797385620915 + + + 0.502864822745 0.157644326406 0.131811980114 0.0837786791281 + 0.1946563677 0.307229997895 0.0852017852296 0.174656356602 + 0.126115785454 0.0811587921882 0.134974509843 0.263622901834 + 0.126101217282 0.0651602485539 + + + + + + + + + 32 4 68 7 29 2 34 16 5 2 4 11 34 38 34 38 34 38 34 38 34 38 34 38 34 + 38 34 38 34 38 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 + 35 37 36 36 36 36 36 36 36 36 35 38 34 39 34 6 1 31 34 38 33 39 33 39 + 34 37 35 37 35 37 35 37 36 36 2 2 2 1 28 37 1 8 1 5 1 9 4 43 1 71 1 + 71 1 71 1 71 1 71 1 37 9 18 2 1 2 2 1 37 36 36 36 36 36 36 36 36 36 + 36 36 36 36 36 36 37 35 37 35 37 35 37 35 37 35 37 35 32 1 4 35 37 35 + 4 3 30 35 5 1 31 36 36 36 37 34 38 35 37 35 37 35 37 35 37 35 37 35 + 37 35 37 36 36 36 36 36 37 35 37 35 37 35 37 35 37 35 3 4 4 1 25 35 2 + 31 4 35 2 33 2 36 1 34 1 36 1 71 1 67 0 + + + + 6192.0 + + + 0.837209302326 + + + 3157.0 + + + 0.117833386126 + + + 0.663691424928 + + + 0.49839168046 0.48082133075 0.118894132246 0.155686579631 + -0.089244984184 0.000161908222671 -0.000106700887109 + -0.000346098055286 0.00078984319466 + + + 72.0 + + + 0.194444444444 0.232558139535 + + + 0.222222222222 0.333333333333 0.222222222222 0.0 0.139534883721 + 0.279069767442 0.279069767442 0.232558139535 + + + 86.0 + + + 5.0 23.0 0.201923076923 1.0 3.0 2.0 + + + 0.0 0.988372093023 + + + 0.509851421189 + + + 0.0 0.229797979798 0.939153439153 0.674242424242 0.198412698413 + 0.313131313131 0.997354497354 0.772727272727 0.899470899471 + 0.997474747475 0.150793650794 0.161616161616 0.798941798942 + 0.944444444444 0.0793650793651 0.0 + + + 0.0 0.0 0.0 0.474747474747 0.922222222222 0.838383838384 + 0.767676767677 0.40404040404 0.0 0.0 0.0 0.444444444444 1.0 1.0 1.0 + 0.525252525253 0.0 0.0 0.0 0.424242424242 1.0 1.0 1.0 + 0.545454545455 0.444444444444 0.353535353535 0.272727272727 + 0.555555555556 1.0 0.989898989899 1.0 0.545454545455 0.833333333333 + 1.0 0.989898989899 1.0 0.2 0.222222222222 0.333333333333 + 0.313131313131 0.744444444444 1.0 1.0 1.0 0.188888888889 0.0 0.0 + 0.0 0.755555555556 1.0 1.0 1.0 0.2 0.0 0.0 0.0 0.644444444444 + 0.777777777778 0.888888888889 0.888888888889 0.133333333333 0.0 0.0 + 0.0 + + + 0.401504452396 0.183657528541 0.00185174690041 0.00260972201234 + 0.0223080547122 0.354830923987 0.0621327767689 0.00322709758582 + 0.00282057744563 0.00417752576983 0.114281063376 0.224501272581 + 0.0737198052468 0.0439777716075 + + + + + + + + + 61 2 156 1 157 1 156 3 155 3 154 5 154 3 155 3 155 3 155 3 138 1 5 14 + 123 1 2 32 123 35 123 35 123 35 123 35 124 34 124 34 124 34 124 34 + 124 34 124 34 124 35 123 35 123 35 123 34 124 34 124 34 124 34 125 34 + 124 34 124 27 131 30 128 33 22 1 102 34 21 2 101 34 20 7 97 34 20 7 + 97 34 20 8 96 31 23 9 95 34 19 11 95 33 20 10 95 31 22 10 95 31 22 9 + 96 33 21 9 95 33 19 11 95 33 19 12 5 2 87 33 18 12 6 3 86 34 17 13 3 + 11 52 1 26 35 18 28 50 4 20 38 18 29 49 62 13 1 4 30 48 62 13 1 3 32 + 46 63 13 3 1 33 45 34 10 4 12 3 13 38 44 33 28 2 13 39 43 33 29 1 12 + 40 43 17 1 15 29 1 12 40 43 17 1 15 29 2 11 40 43 33 29 2 10 41 43 33 + 29 2 10 41 15 1 27 33 29 2 10 41 14 3 25 35 28 3 8 43 11 7 22 38 25 4 + 8 43 11 8 21 37 26 5 7 8 3 31 12 7 22 37 26 5 7 8 3 30 14 7 21 36 28 + 3 9 7 3 29 15 8 20 37 27 3 9 7 6 27 13 10 20 36 27 3 8 9 8 23 14 11 + 20 35 27 3 8 12 6 18 1 3 13 14 18 35 27 3 8 15 3 17 2 3 13 15 17 35 + 27 3 8 16 2 16 4 2 13 15 18 16 2 16 28 2 9 2 1 30 4 2 13 17 16 34 28 + 2 8 10 1 2 1 19 19 19 15 34 28 2 9 18 3 11 19 20 14 34 28 2 9 18 3 12 + 4 1 13 22 13 16 1 16 28 2 14 4 1 1 5 1 5 12 2 1 14 22 13 33 28 2 14 6 + 12 5 2 7 13 25 11 33 28 2 16 5 12 1 4 4 3 1 13 25 11 33 28 2 17 3 18 + 4 2 2 12 28 9 33 28 3 37 8 12 29 7 35 29 1 37 8 12 29 7 35 28 1 38 7 + 13 30 7 34 68 3 15 32 6 34 68 3 15 33 5 17 3 14 67 4 14 35 4 35 63 7 + 14 35 4 35 63 6 15 29 1 5 4 35 63 7 14 27 7 1 4 35 63 8 13 27 13 34 + 63 9 12 14 1 11 13 35 64 1 4 2 14 25 13 35 85 15 1 9 14 2 24 8 85 25 + 14 2 26 6 86 24 5 2 7 2 27 5 85 3 2 21 4 3 6 2 28 4 85 3 4 19 2 5 6 2 + 28 4 85 4 5 24 6 2 28 4 86 2 6 24 6 3 28 2 86 3 6 24 6 3 28 2 85 3 8 + 13 3 7 6 2 30 2 85 2 13 7 6 5 6 3 29 3 99 7 7 4 7 1 30 3 83 3 14 6 1 + 3 3 3 8 2 29 3 83 4 5 4 4 5 2 4 2 3 8 2 29 3 84 32 40 2 85 31 40 2 90 + 25 41 2 87 3 1 24 42 1 88 3 1 23 131 26 134 24 135 23 137 21 138 20 + 141 16 142 16 144 14 151 7 151 7 144 3 2 8 146 12 145 13 148 10 149 9 + 149 9 150 8 151 7 150 8 152 3 9 0 + + + + 20382.0 + + + 1.22480620155 + + + 5629.0 + + + 0.2115828744 + + + 1.27351700174 + + + 0.462588528695 0.498049997779 0.395760064223 0.121672157795 + 0.102405663518 0.0681467016181 0.0170523814694 0.0765716519768 + -0.00221878708502 + + + 158.0 + + + 0.867088607595 1.72868217054 + + + 0.556962025316 0.556962025316 0.936708860759 1.39240506329 + 0.062015503876 1.82945736434 3.78294573643 1.24031007752 + + + 129.0 + + + 23.0 66.0 0.25 13.0 4.0 10.0 + + + 0.0 0.992248062016 + + + 0.276175056422 + + + 0.168269230769 0.516025641026 0.795673076923 0.034965034965 + 0.42578125 0.4546875 0.0640625 0.00606060606061 0.0 0.574519230769 + 0.367788461538 0.0 0.0 0.0203125 0.58515625 0.431060606061 + + + 0.0 0.0 0.0 0.809210526316 0.871710526316 0.621710526316 + 0.0657894736842 0.0 0.165625 0.490625 0.425 0.81875 0.8875 0.796875 + 0.078125 0.0 0.346875 0.99375 1.0 0.325 0.0 0.0 0.025 0.0 0.159375 + 0.203125 0.215625 0.278125 0.25 0.00625 0.0 0.0 0.0 0.0 + 0.430921052632 0.9375 0.625 0.0 0.0 0.0 0.0 0.0 0.05 0.890625 + 0.6375 0.203125 0.0 0.0 0.0 0.0 0.0 0.08125 0.521875 0.6875 + 0.384375 0.0323529411765 0.0 0.0 0.0 0.0 0.375 0.75625 0.796875 + 0.529411764706 + + + 0.417304256239 0.177755306407 0.173323340091 0.118815613062 + 0.0633936945283 0.31845243205 0.0709485108387 0.220039389198 + 0.158635310085 0.101311328818 0.10149524673 0.209077562082 + 0.0938267825213 0.0598861076566 + + + + + + + + + 4 3 21 4 20 4 17 8 16 9 16 9 18 6 20 3 20 4 19 5 19 4 20 3 94 1 22 2 + 22 2 22 2 22 2 21 3 19 5 19 5 21 2 22 3 20 4 11 6 3 4 10 7 2 5 10 4 1 + 2 2 5 11 2 2 2 2 5 11 1 3 1 4 4 10 1 9 3 11 1 9 2 21 5 18 5 20 4 20 4 + 20 5 10 3 2 26 3 5 2 5 1 8 2 4 12 6 2 4 12 6 2 4 12 6 2 5 11 6 3 3 12 + 2 1 3 2 4 12 2 2 2 17 2 2 2 23 2 17 7 18 5 19 5 20 4 20 4 19 5 19 5 + 18 6 20 3 19 5 19 1 1 4 18 1 1 2 44 1 22 3 68 3 19 5 18 6 17 6 17 5 + 19 3 11 0 + + + + 1704.0 + + + 0.338028169014 + + + 370.0 + + + 0.905405405405 + + + 1.30864197531 + + + 0.510223266745 0.500347490347 0.148239906817 0.887733974296 + 0.185218289144 0.00747435997739 -0.0486982453026 0.00158801573012 + -0.136589898193 + + + 24.0 + + + 2.29166666667 0.352112676056 + + + 2.16666666667 2.0 2.33333333333 2.66666666667 0.0 0.56338028169 + 0.732394366197 0.112676056338 + + + 71.0 + + + 3.0 11.0 0.228571428571 9.0 2.0 1.0 + + + 0.0 0.985915492958 + + + 0.217136150235 + + + 0.245098039216 0.481481481481 0.407407407407 0.0 0.392156862745 + 0.12962962963 0.111111111111 0.0462962962963 0.0 0.037037037037 + 0.12962962963 0.277777777778 0.0 0.212962962963 0.722222222222 + 0.268518518519 + + + 0.208333333333 0.0 0.0740740740741 0.222222222222 0.37037037037 + 0.037037037037 0.0 0.0 0.666666666667 0.148148148148 0.666666666667 + 0.962962962963 1.0 0.222222222222 0.0 0.0 0.791666666667 + 0.481481481481 0.296296296296 0.222222222222 0.259259259259 0.0 0.0 + 0.0 0.25 0.0740740740741 0.0 0.0 0.185185185185 0.0 0.0 + 0.185185185185 0.0 0.0 0.0 0.0 0.222222222222 0.0 0.0 + 0.444444444444 0.0 0.0 0.0 0.148148148148 0.222222222222 + 0.0740740740741 0.185185185185 0.481481481481 0.0 0.0 + 0.111111111111 0.333333333333 0.740740740741 0.666666666667 + 0.666666666667 0.037037037037 0.0 0.0 0.111111111111 0.296296296296 + 0.740740740741 0.740740740741 0.37037037037 0.0 + + + 0.397118305924 0.222669288927 0.0807114930438 0.0397815554517 + 0.387128955492 0.165942525804 0.224108148832 0.0885257433157 + 0.078855067889 0.0776162426163 0.240505327688 0.185323921486 + 0.184678586965 0.211949811649 + + + + + + + + + 5 2 5 2 4 3 4 3 4 3 4 2 5 2 5 3 4 3 4 3 4 2 4 3 4 3 4 4 3 3 4 3 4 3 4 + 3 5 2 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 2 4 + 4 4 3 4 4 3 3 5 2 4 3 5 2 4 4 2 4 3 4 4 3 4 3 4 2 2 2 1 2 5 2 5 3 3 3 + 5 2 5 2 5 2 5 2 5 3 4 3 4 3 4 2 5 2 5 2 5 3 4 2 5 2 5 2 5 3 4 3 4 3 3 + 4 3 3 4 4 3 4 3 4 3 3 4 4 3 4 4 3 4 3 4 3 4 3 4 2 5 2 5 2 5 2 5 2 5 2 + 4 3 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 6 1 13 1 5 2 5 3 4 2 + 6 1 6 1 6 1 6 1 6 1 6 1 5 2 5 2 5 2 6 2 4 2 5 2 6 1 6 1 6 1 5 2 6 2 5 + 2 5 2 4 3 4 3 4 3 4 3 1 2 2 2 1 2 1 5 1 13 2 6 1 6 1 6 2 5 2 5 2 5 2 + + + + 966.0 + + + 0.0507246376812 + + + 544.0 + + + 0.634191176471 + + + 0.995192307692 + + + 0.580269607843 0.529948475741 0.00372315695444 2.43028977649 + -0.0129891955971 -3.45874303655e-05 0.0510445815641 + 0.000985784858349 -0.867952492598 + + + 7.0 + + + 4.71428571429 0.0217391304348 + + + 0.0 5.14285714286 1.14285714286 3.42857142857 0.0 0.0289855072464 + 0.0 0.0579710144928 + + + 138.0 + + + 6.0 34.0 0.0898203592814 3.0 39.0 1.0 + + + 0.0 0.992753623188 + + + 0.56314699793 + + + 0.0 0.0 0.0294117647059 0.0 0.0 0.685714285714 0.852941176471 0.6 + 0.794117647059 0.971428571429 1.0 0.714285714286 0.632352941176 + 0.457142857143 0.426470588235 0.728571428571 + + + 0.0 0.0 0.0 0.0 0.0 0.0588235294118 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0588235294118 0.0 0.0 0.0 0.0 0.235294117647 0.611111111111 + 0.411764705882 1.0 0.882352941176 0.0555555555556 0.0 0.0 + 0.882352941176 1.0 1.0 1.0 1.0 0.5 0.352941176471 0.941176470588 + 0.941176470588 1.0 1.0 1.0 1.0 0.388888888889 0.882352941176 1.0 + 0.941176470588 1.0 1.0 1.0 1.0 0.5 1.0 1.0 0.764705882353 + 0.944444444444 0.588235294118 0.941176470588 1.0 0.888888888889 + 0.529411764706 0.0 0.117647058824 0.0 0.0 0.176470588235 + 0.588235294118 0.444444444444 + + + 0.485198080565 0.234160688021 0.106554665207 0.0361648218133 + 0.361942721655 0.425943334202 0.185352164779 0.0496984585835 + 0.0812922014096 0.0602837460989 0.308615820475 0.443728975853 + 0.349164012815 0.157120603184 + + + + + + + + + 91 1 235 3 233 5 233 3 235 2 472 1 235 3 200 7 27 3 200 31 4 2 200 37 + 200 37 200 37 201 36 201 36 201 36 201 36 201 36 201 36 201 36 201 36 + 201 36 202 35 202 35 202 36 201 35 202 35 203 34 203 34 203 35 202 35 + 202 35 21 4 177 35 21 5 176 35 20 7 111 1 63 35 20 9 109 1 63 35 20 + 11 107 1 64 34 20 11 107 2 64 33 20 12 106 2 64 1 1 2 1 1 1 26 21 11 + 106 2 65 32 21 11 106 2 32 1 3 2 1 2 22 1 2 30 21 13 105 2 31 18 14 5 + 1 28 20 11 1 1 105 2 30 17 1 6 9 4 3 28 18 10 3 1 71 1 33 2 30 24 1 + 43 17 15 71 2 9 18 4 3 30 30 1 37 17 15 71 36 30 25 1 42 17 14 72 37 + 30 17 1 49 17 14 5 3 64 36 31 67 16 16 3 7 61 36 31 67 15 30 58 36 31 + 36 3 28 15 33 55 36 31 19 1 17 7 2 3 18 16 33 54 37 30 36 27 4 16 34 + 53 37 31 35 28 3 15 36 52 37 31 35 29 2 15 36 52 37 31 35 29 3 14 37 + 51 37 31 35 30 1 15 37 51 37 31 35 30 1 15 37 51 37 31 36 29 2 13 38 + 51 37 31 36 29 2 13 38 51 37 4 2 26 35 29 2 13 38 51 37 4 2 26 35 29 + 1 12 40 51 37 3 3 26 36 28 2 11 40 51 37 2 5 25 37 27 1 11 41 15 2 34 + 39 1 4 24 38 38 44 12 7 29 40 1 4 25 37 39 42 13 6 31 38 2 6 24 36 40 + 6 4 30 14 6 31 38 2 6 23 36 41 6 4 3 1 25 16 5 31 38 2 6 23 37 40 6 + 11 23 14 8 29 39 1 4 25 23 1 13 40 6 4 1 7 22 13 10 28 38 2 4 26 20 3 + 7 1 2 1 2 41 6 1 4 1 3 3 20 14 11 28 37 3 3 26 16 7 6 1 3 2 1 44 3 1 + 8 4 19 14 13 26 37 3 3 25 16 7 11 48 2 5 5 3 14 2 3 13 15 25 37 3 3 + 25 16 8 6 61 5 1 19 13 16 24 37 3 4 24 16 3 2 2 6 64 3 1 14 1 4 13 18 + 22 37 3 6 6 2 13 22 2 12 1 2 46 4 5 2 5 10 18 18 23 37 3 49 2 15 47 2 + 13 11 17 20 21 37 3 49 2 15 61 12 2 2 13 21 20 37 3 66 61 7 1 7 14 22 + 19 37 3 33 8 1 4 20 61 6 2 4 2 1 13 25 17 37 4 34 6 1 4 20 63 2 3 5 2 + 1 13 25 17 37 4 31 9 26 67 8 13 26 17 36 4 30 13 23 67 8 12 29 15 36 + 4 30 17 19 67 5 2 1 12 30 14 36 4 34 17 15 65 6 16 31 13 36 4 34 22 + 11 64 6 15 33 12 36 4 34 28 5 64 7 14 34 11 36 4 34 29 4 63 8 14 35 + 10 3 27 6 4 35 29 3 64 7 17 33 43 2 4 35 29 3 64 7 14 28 2 6 44 1 4 + 35 30 2 64 7 13 29 3 4 51 34 30 2 69 2 14 28 3 3 52 34 117 28 58 34 + 117 28 58 35 116 29 57 35 115 29 8 2 48 35 115 29 8 3 47 31 119 29 7 + 4 47 4 3 7 1 15 120 5 4 21 5 2 1 2 47 4 3 6 3 13 122 4 5 20 56 15 2 + 15 1 4 115 3 7 18 57 15 4 18 114 3 9 17 7 1 50 26 1 6 1 1 128 19 3 2 + 50 33 131 23 51 35 132 11 1 6 52 35 115 3 5 5 4 10 2 7 51 35 115 15 3 + 19 50 35 117 13 4 18 50 36 116 13 4 17 52 35 119 10 4 17 52 35 117 33 + 51 36 118 31 53 36 118 30 53 36 119 29 53 36 120 28 53 36 127 20 54 + 36 127 20 54 6 2 2 3 2 1 20 129 1 2 15 55 3 20 12 133 13 56 2 22 11 + 134 2 2 8 56 2 22 3 3 5 133 2 4 7 56 3 22 2 4 4 132 3 4 7 56 3 21 3 5 + 3 129 7 1 8 57 3 22 3 5 3 129 15 57 4 19 5 4 3 130 16 56 3 21 4 5 2 + 132 14 56 2 22 4 5 2 133 12 81 4 5 2 134 11 82 3 5 2 136 9 81 4 5 2 + 136 9 82 2 144 9 82 2 147 4 85 1 148 2 86 1 203 0 + + + + 31521.0 + + + 1.78195488722 + + + 8754.0 + + + 0.195796207448 + + + 0.912498133493 + + + 0.468673884675 0.516251445227 0.588414247113 0.0844108323748 + 0.00620172064099 0.0975531401624 -0.0162705083528 0.0452526142811 + -0.000515156617782 + + + 237.0 + + + 0.852320675105 2.70676691729 + + + 1.16455696203 0.810126582278 1.04641350211 0.371308016878 + 0.12030075188 3.51879699248 4.87218045113 2.31578947368 + + + 133.0 + + + 21.0 114.0 0.262513904338 32.0 0.0 8.0 + + + 0.0 0.992481203008 + + + 0.277719615494 + + + 0.0195172059579 0.391371340524 0.610169491525 0.369890329013 + 0.435541859271 0.490498202363 0.105803800719 0.0 0.00154083204931 + 0.333846944016 0.485875706215 0.132103688933 0.0 0.432828282828 + 0.476767676768 0.171568627451 + + + 0.0 0.0 0.0258620689655 0.0588235294118 0.513184584178 + 0.855603448276 0.813387423935 0.0851926977688 0.04375 + 0.0333333333333 0.45625 0.98431372549 0.788235294118 0.283333333333 + 0.380392156863 0.205882352941 0.443965517241 1.0 0.956896551724 + 0.279918864097 0.249492900609 0.0862068965517 0.0 0.0 + 0.110416666667 0.188235294118 0.375 0.378431372549 0.0843137254902 + 0.0 0.0 0.0 0.0 0.00588235294118 0.3 0.949019607843 0.547058823529 + 0.104166666667 0.0 0.0 0.0 0.0 0.0 0.0446247464503 0.553752535497 + 0.741379310345 0.468559837728 0.0689655172414 0.0 0.0 0.1 + 0.301960784314 0.343137254902 0.372916666667 0.411764705882 + 0.274509803922 0.0 0.0 0.3625 0.943137254902 0.96862745098 0.2 0.0 + 0.0 + + + 0.266300944316 0.257998935342 0.139031304806 0.0998904990872 + 0.0146023178384 0.308968304282 0.173743702086 0.175370353 + 0.137487107922 0.117548176273 0.0158143315417 0.281635880064 + 0.135444829891 0.130654762179 + + + + + + + + + 3 1 137 1 137 1 137 1 33 1 102 2 33 1 102 2 33 1 102 2 33 2 101 2 33 + 2 101 2 33 2 102 2 9 17 1 2 2 3 102 36 102 36 101 37 101 37 101 37 + 102 36 102 36 102 36 102 36 101 37 101 37 101 38 99 39 98 40 98 40 16 + 1 81 43 12 4 79 42 13 10 74 41 13 10 74 41 13 5 79 40 14 7 77 40 14 + 10 75 40 12 13 74 37 13 14 74 36 15 13 74 36 15 14 73 36 14 16 3 2 68 + 35 14 22 67 35 16 13 4 1 1 2 66 35 14 15 5 5 64 35 14 16 2 8 63 35 14 + 27 62 35 14 28 61 35 14 30 59 35 14 31 58 36 12 32 58 36 12 35 55 36 + 12 36 55 35 12 37 54 35 12 39 52 35 12 40 51 35 12 40 51 13 17 4 12 + 41 51 2 44 40 52 1 45 40 52 1 45 33 3 4 98 32 4 4 98 33 4 3 98 2 1 1 + 5 25 4 2 97 3 8 26 19 1 81 4 8 27 16 3 80 4 9 27 14 5 79 4 9 23 1 3 + 14 6 90 28 14 7 89 23 2 2 15 7 89 22 3 2 15 9 88 19 6 1 15 10 94 13 + 21 11 87 20 4 1 15 11 83 25 2 2 14 12 82 30 14 12 83 29 14 13 84 5 2 + 20 13 15 91 7 2 9 14 15 85 2 4 18 14 15 85 2 1 21 14 15 86 23 14 15 6 + 1 80 22 14 15 3 3 82 21 13 16 3 4 84 18 13 17 2 4 85 17 13 17 1 4 87 + 16 13 22 88 14 14 24 87 13 14 30 82 12 14 31 83 10 13 33 83 9 13 34 + 83 8 12 36 83 7 12 36 84 5 12 38 84 3 14 39 98 39 99 39 99 39 98 6 4 + 28 102 5 5 25 102 36 103 14 2 20 102 12 6 18 102 12 6 18 103 11 6 18 + 104 12 5 17 110 5 8 15 122 16 122 16 123 14 129 9 129 9 129 9 125 13 + 126 12 126 12 127 11 127 1 1 9 128 10 128 7 1 2 128 6 3 1 128 6 133 6 + 132 7 131 8 130 8 130 8 130 8 130 8 130 8 131 7 132 5 6 0 + + + + 17526.0 + + + 1.08661417323 + + + 4253.0 + + + 0.19774276981 + + + 1.83440860215 + + + 0.477306701495 0.443182963286 0.38408266697 0.187031339496 + 0.23647911322 0.0205142180356 0.0314823418944 0.0333365846935 + 0.0255285741176 + + + 138.0 + + + 0.550724637681 0.897637795276 + + + 0.0579710144928 0.724637681159 0.753623188406 0.579710144928 + 0.503937007874 1.41732283465 1.32283464567 0.283464566929 + + + 127.0 + + + 11.0 61.0 0.213004484305 15.0 5.0 2.0 + + + 0.0 0.992125984252 + + + 0.242668036061 + + + 0.677419354839 0.568933823529 0.0 0.0 0.170506912442 0.533035714286 + 0.0651785714286 0.0 0.0 0.419117647059 0.428308823529 + 0.0202205882353 0.0 0.0196428571429 0.604464285714 0.376785714286 + + + 0.360784313725 0.915441176471 0.786764705882 0.235294117647 0.0 0.0 + 0.0 0.0 0.396078431373 1.0 1.0 0.253676470588 0.0 0.0 0.0 0.0 + 0.145098039216 0.371323529412 0.319852941176 0.117647058824 0.0 0.0 + 0.0 0.0 0.0 0.163194444444 0.850694444444 0.809027777778 + 0.253472222222 0.0 0.0 0.0 0.0 0.0 0.459558823529 0.970588235294 + 0.930147058824 0.378676470588 0.0 0.0 0.0 0.0 0.0110294117647 + 0.235294117647 0.150735294118 0.253676470588 0.0808823529412 0.0 + 0.0 0.0 0.0 0.0808823529412 0.727941176471 0.963235294118 + 0.308823529412 0.0 0.0 0.0 0.0 0.0 0.0416666666667 0.711805555556 + 0.736111111111 0.4375 + + + 0.46206809541 0.221081434353 0.0911236423225 0.0405857953287 + 0.205285969266 0.433476028977 0.139896642543 0.0636024343361 + 0.040044149173 0.0550313052338 0.17113185158 0.302507118408 + 0.327607105915 0.088119820405 + + + + + + + + + 1795 5 283 5 3 2 5 9 270 37 269 38 269 38 269 38 269 38 269 38 270 37 + 270 37 269 39 268 39 268 38 269 39 268 39 268 39 268 39 268 38 269 39 + 268 39 268 39 268 39 269 38 269 4 1 28 2 1 270 39 268 39 269 38 269 + 38 269 38 269 35 1 2 269 38 268 39 38 1 229 39 38 1 229 39 37 2 229 + 40 36 2 229 41 13 1 4 4 12 3 229 78 80 3 146 27 2 1 3 45 77 9 109 3 1 + 1 29 78 77 11 107 14 1 10 10 77 76 11 108 91 2 19 76 11 108 112 76 12 + 107 112 76 14 105 112 75 16 104 112 75 13 107 49 22 41 75 13 107 39 + 33 40 76 12 107 37 35 40 72 2 1 12 108 37 35 40 72 2 3 10 108 37 35 + 40 71 5 2 11 107 36 35 40 71 22 103 37 32 42 71 22 103 38 31 44 70 16 + 108 38 31 44 70 17 106 39 32 42 71 17 45 4 56 40 32 42 70 18 47 9 49 + 39 34 40 71 19 47 10 47 40 33 41 69 21 51 7 45 40 32 42 70 29 47 3 44 + 39 33 41 71 28 48 8 40 38 33 41 71 30 45 15 35 37 33 41 71 37 28 1 2 + 25 32 37 33 41 72 37 26 1 5 25 30 37 33 41 72 37 34 29 24 37 34 40 72 + 40 5 2 25 31 21 37 34 40 72 18 1 31 20 36 18 34 1 2 34 40 72 8 1 8 6 + 29 18 38 16 37 34 41 74 1 6 6 11 27 17 37 16 37 34 40 73 4 4 4 17 22 + 18 41 13 37 33 41 72 5 4 4 21 19 14 48 9 38 33 40 37 6 27 7 1 1 2 2 1 + 3 21 23 3 51 1 3 7 38 33 40 37 17 15 7 2 11 20 76 2 2 7 38 33 41 36 + 31 1 7 2 4 2 4 25 73 1 4 5 38 32 42 35 24 4 3 3 6 2 10 28 76 3 39 33 + 41 36 23 3 4 3 6 2 10 34 112 33 41 36 39 3 9 38 108 33 41 36 51 44 26 + 7 69 33 40 37 39 1 1 1 9 47 20 1 7 1 5 5 61 32 40 37 39 4 7 51 29 8 + 59 33 40 37 38 8 4 53 29 5 5 1 4 2 12 5 31 34 6 7 4 9 2 3 7 38 36 12 + 3 56 26 7 7 4 10 6 30 33 4 28 5 40 35 72 27 6 1 2 5 4 9 16 2 1 2 4 12 + 32 6 71 35 77 26 6 3 3 11 31 6 33 5 71 36 80 26 1 4 3 7 1 4 32 4 33 4 + 72 37 83 28 2 8 37 3 33 4 72 37 86 36 38 1 33 3 73 38 86 1 1 34 72 2 + 73 38 89 35 70 2 73 38 94 30 70 2 73 38 96 5 3 21 145 37 98 2 5 2 3 + 15 145 37 104 21 144 34 109 20 144 33 109 21 145 33 108 21 145 35 107 + 20 145 34 108 20 145 38 104 20 145 38 104 20 145 38 104 20 145 38 84 + 2 17 21 145 38 80 11 1 32 145 38 81 44 144 38 87 38 144 38 90 35 145 + 38 94 30 111 5 3 2 23 39 96 29 109 26 5 42 99 25 109 20 2 4 1 4 3 40 + 101 23 109 31 3 40 106 19 108 74 109 16 108 74 109 16 108 74 111 14 + 108 39 2 11 2 20 114 11 108 39 5 8 1 21 115 10 108 38 19 1 5 2 2 8 + 115 10 107 38 31 5 116 10 107 39 31 5 116 8 107 40 32 4 118 6 107 40 + 32 3 118 2 112 40 32 3 232 40 32 3 232 41 266 40 269 37 270 37 270 37 + 270 37 270 38 269 38 270 3 1 3 1 29 270 3 4 30 270 3 2 32 270 37 270 + 37 270 37 270 37 270 37 270 37 270 37 270 37 270 37 270 30 1 2 274 30 + 1 4 2 1 269 38 270 37 270 37 270 37 269 38 270 2 4 31 270 2 20 15 271 + 1 29 6 271 1 30 5 304 3 305 2 306 1 266 0 + + + + 49734.0 + + + 1.8950617284 + + + 11263.0 + + + 0.155908727692 + + + 0.532225913621 + + + 0.526079087114 0.487441151509 0.806222934319 0.102945779933 + -0.209799282206 -0.158019817579 -0.0256222024961 0.0744892283678 + 0.00601898269218 + + + 307.0 + + + 0.706840390879 1.71604938272 + + + 0.742671009772 0.612377850163 1.05537459283 0.416938110749 + 0.222222222222 3.20987654321 2.69135802469 0.617283950617 + + + 162.0 + + + 21.0 146.0 0.228271251194 20.0 3.0 17.0 + + + 0.0308641975309 0.993827160494 + + + 0.226464792697 + + + 0.0 0.0953145057766 0.579934210526 0.440629011553 0.0 + 0.319923978461 0.0571428571429 0.0 0.0288961038961 0.549255622426 + 0.424350649351 0.0114032309154 0.38961038961 0.644599303136 + 0.0788961038961 0.0 + + + 0.0 0.0 0.0 0.0200501253133 0.075 0.409210526316 0.95 + 0.669172932331 0.0 0.0 0.0789473684211 0.27694235589 0.897368421053 + 0.938157894737 0.0907894736842 0.0601503759398 0.0 0.0 + 0.235897435897 0.529914529915 0.0538461538462 0.0 0.0 0.0 0.0 0.0 + 0.0 0.491228070175 0.176315789474 0.0 0.0 0.0 0.0 0.0 0.0 + 0.464912280702 0.675 0.415789473684 0.0 0.0 0.0461538461538 + 0.0679487179487 0.760256410256 0.940170940171 0.407692307692 + 0.205128205128 0.0461538461538 0.0 0.631578947368 0.939473684211 + 0.571052631579 0.127819548872 0.075 0.0 0.0 0.0 0.0 + 0.00769230769231 0.915384615385 0.958485958486 0.238461538462 0.0 + 0.0 0.0 + + + 0.329661293991 0.281607186836 0.165503622723 0.0638577511452 + 0.0670955038752 0.413595329865 0.205336554925 0.132824131091 + 0.0981822841262 0.10863021088 0.169307645084 0.182205750526 + 0.343442919976 0.143271814961 + + + + + + + + + 37 1 41 1 19 1 14 2 40 9 1 22 2 3 39 38 40 37 40 37 40 37 40 37 40 37 + 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 39 + 38 38 40 38 40 38 38 38 39 38 39 39 38 39 38 39 37 40 37 40 37 40 37 + 40 38 34 1 4 37 35 1 4 37 34 2 4 37 34 2 4 37 34 2 5 36 33 3 5 36 4 + 22 4 6 5 72 5 72 5 72 5 72 5 72 5 72 6 20 5 46 6 2 28 41 6 2 29 40 5 + 3 30 39 39 38 39 38 40 37 40 37 40 37 39 38 39 38 39 38 39 38 39 38 + 40 28 55 22 49 2 3 31 41 2 4 31 41 1 4 31 39 38 39 38 39 38 39 38 39 + 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 40 37 40 37 41 3 2 31 41 + 36 42 35 42 15 1 14 1 4 42 6 26 3 42 4 27 5 42 4 26 5 42 4 26 5 73 4 + 73 4 72 5 73 5 74 2 74 3 74 2 75 3 75 2 75 2 75 2 75 2 75 1 76 2 75 2 + 75 1 2 0 + + + + 7854.0 + + + 0.754901960784 + + + 3320.0 + + + 0.138855421687 + + + 1.46386420628 + + + 0.506471940393 0.418644876536 0.135729766695 0.158026188074 + 0.104112411506 7.29875139937e-05 0.00309444117741 0.00107339929839 + 0.00505970925965 + + + 77.0 + + + 0.428571428571 0.254901960784 + + + 0.155844155844 0.103896103896 0.727272727273 0.727272727273 + 0.156862745098 0.470588235294 0.117647058824 0.274509803922 + + + 102.0 + + + 2.0 18.0 0.164556962025 4.0 4.0 1.0 + + + 0.0 0.990196078431 + + + 0.422714540362 + + + 0.835789473684 0.718623481781 0.0 0.0 0.922105263158 0.81983805668 + 0.0357894736842 0.0 0.0610526315789 0.526315789474 0.962105263158 + 0.248987854251 0.0 0.463461538462 0.862 0.321153846154 + + + 0.666666666667 0.820512820513 0.777777777778 0.461538461538 0.0 0.0 + 0.0 0.0 0.825 1.0 1.0 0.615384615385 0.0 0.0 0.0 0.0 0.842592592593 + 1.0 1.0 0.581196581197 0.0 0.0 0.0 0.0 0.833333333333 1.0 1.0 + 0.692307692308 0.0416666666667 0.0923076923077 0.0 0.0 + 0.0916666666667 0.138461538462 0.130769230769 0.969230769231 + 0.891666666667 0.961538461538 0.538461538462 0.0 0.0 0.0 0.0 1.0 + 1.0 1.0 0.452991452991 0.0 0.0 0.0 0.0 0.984615384615 + 0.983333333333 1.0 0.461538461538 0.0 0.0 0.0 0.0846153846154 + 0.784615384615 0.658333333333 0.8 0.6 0.223076923077 + + + 0.567135732565 0.138226857987 0.0151520509305 0.00687224320343 + 0.256549098203 0.370158450332 0.0482169078462 0.00961310448083 + 0.0191601829474 0.0128548554594 0.104971199281 0.425571927605 + 0.11674963438 0.0291145046765 + + + + + + + + + 43 2 72 3 71 4 69 5 69 7 66 9 66 7 67 7 67 7 26 1 40 9 24 1 39 10 24 + 1 40 2 1 5 25 1 45 2 26 1 72 2 46 1 25 3 43 3 25 3 42 4 26 2 44 2 26 + 3 39 9 1 1 20 11 14 2 16 10 4 5 12 21 3 3 15 21 11 13 1 13 15 19 13 + 12 4 2 1 7 16 22 10 13 1 12 16 23 9 13 1 4 1 8 15 24 8 10 11 6 15 25 + 7 10 11 4 18 25 6 10 12 2 29 16 5 10 11 4 28 17 5 9 6 1 3 7 27 16 5 + 10 4 3 1 8 30 13 5 12 1 13 26 2 2 2 1 5 2 3 5 12 1 4 1 8 26 6 2 4 2 2 + 6 26 26 6 2 4 3 2 5 26 21 11 2 4 10 26 21 11 2 4 10 26 19 13 3 4 9 26 + 22 10 3 6 7 26 23 9 3 6 7 26 22 10 3 6 7 26 23 10 2 3 2 1 7 6 1 2 11 + 2 28 9 2 3 2 1 7 5 10 3 1 6 26 7 3 2 3 2 6 2 11 5 2 6 26 6 3 3 2 2 6 + 2 11 5 1 7 27 4 4 2 4 1 6 4 10 3 2 7 29 2 4 2 11 5 9 2 4 6 29 2 4 2 + 11 15 5 6 30 1 4 2 11 26 30 1 4 3 10 11 3 12 29 2 4 4 9 10 8 8 16 2 4 + 9 3 8 6 10 10 3 2 1 16 2 6 18 6 2 5 1 13 1 3 1 17 1 6 3 1 3 3 8 6 1 + 19 6 17 1 8 1 2 1 5 7 6 5 15 4 1 1 16 2 8 5 3 8 7 4 2 1 12 4 1 1 16 2 + 9 15 7 9 2 1 1 12 16 1 11 14 7 25 16 1 12 13 7 8 2 15 16 2 12 12 7 8 + 3 14 16 2 13 11 7 8 3 14 16 2 13 11 7 1 2 22 16 2 14 10 19 13 16 2 15 + 9 27 5 16 2 16 8 28 4 16 2 17 7 30 2 16 2 17 6 32 1 16 2 18 5 32 1 16 + 3 17 6 31 1 15 5 17 1 1 4 46 5 21 1 47 5 70 4 70 5 69 5 68 7 68 6 69 + 5 69 12 61 14 60 13 61 12 62 12 62 12 4 1 58 10 4 6 54 18 56 23 51 24 + 50 26 48 26 48 27 47 3 4 20 47 3 5 19 47 10 1 16 47 27 47 27 47 10 2 + 15 47 5 1 4 3 5 2 4 50 11 2 5 2 5 49 4 1 14 1 6 48 17 1 8 48 18 1 8 + 48 17 1 8 50 3 3 9 1 8 51 2 4 8 2 7 52 1 5 3 1 1 5 6 60 1 1 1 5 6 68 + 6 68 4 1 1 68 5 53 1 15 6 48 11 1 4 2 9 47 16 2 9 47 16 2 9 47 16 2 9 + 47 5 2 2 11 7 47 12 7 8 47 2 3 11 1 10 47 2 5 20 48 1 9 16 48 1 10 15 + 48 1 11 14 48 1 12 13 48 1 13 1 2 9 48 1 14 12 47 1 16 10 47 1 18 7 + 48 1 19 6 48 1 20 6 48 1 20 5 46 3 21 4 46 3 21 5 46 2 21 4 71 2 2 0 + + + + 9842.0 + + + 0.556390977444 + + + 2635.0 + + + 0.438330170778 + + + 1.30221707223 + + + 0.578347326558 0.461132194813 0.185492651168 0.428313224863 + 0.141768336481 -0.0449083105189 0.0559113737003 -0.0235109344943 + 0.104457892834 + + + 74.0 + + + 3.12162162162 1.66165413534 + + + 2.64864864865 1.51351351351 4.0 4.32432432432 1.5037593985 + 3.30827067669 0.631578947368 1.2030075188 + + + 133.0 + + + 29.0 107.0 0.286689419795 17.0 0.0 3.0 + + + 0.0 0.992481203008 + + + 0.267730136151 + + + 0.348484848485 0.579124579125 0.0 0.0 0.140350877193 0.377990430622 + 0.00478468899522 0.0 0.350168350168 0.171717171717 0.478114478114 + 0.212418300654 0.240829346093 0.472089314195 0.373205741627 + 0.543343653251 + + + 0.0694444444444 0.849673202614 0.729166666667 0.509803921569 0.0 + 0.0 0.0 0.0 0.0 0.437908496732 0.722222222222 0.372549019608 0.0 + 0.0 0.0 0.0 0.0 0.575163398693 0.861111111111 0.738562091503 + 0.0196078431373 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3125 + 0.222222222222 0.0 0.183006535948 0.339869281046 0.222222222222 + 0.0718954248366 0.0261437908497 0.263888888889 0.59477124183 + 0.395833333333 0.111111111111 0.464052287582 0.895833333333 + 0.575163398693 0.176470588235 0.0 0.725490196078 0.625 + 0.62091503268 0.0457516339869 0.895833333333 0.483660130719 + 0.320261437908 0.0 0.235294117647 0.1875 0.476470588235 + 0.0882352941176 0.51875 0.676470588235 0.664705882353 + + + 0.440635859322 0.156390848267 0.0906725387187 0.101888090969 + 0.0463828346102 0.273418109717 0.0693814695162 0.0925503309991 + 0.211477244813 0.0936045364446 0.223613865793 0.148868777602 + 0.0931035893839 0.0442299964266 + + + + + + + + + 23 1 4 4 4 2 116 13 3 20 116 36 116 36 116 36 116 37 115 37 115 37 + 115 37 115 37 115 36 116 36 116 36 117 35 116 36 116 36 116 36 116 36 + 117 35 117 35 116 37 114 39 112 39 114 38 115 38 114 38 114 38 115 37 + 114 37 115 35 1 1 115 3 1 1 4 25 2 1 115 5 5 27 115 37 116 36 116 36 + 116 36 116 36 116 36 116 37 115 36 116 36 116 16 1 19 116 4 6 1 21 4 + 116 3 32 1 117 2 32 1 36 3 78 2 32 1 35 5 77 2 32 1 34 7 77 1 32 1 34 + 7 77 1 32 1 34 8 76 1 66 10 75 1 68 9 74 1 68 9 74 1 68 9 74 1 68 9 + 74 1 66 11 141 11 140 13 138 15 138 14 137 15 137 15 137 15 4 4 129 + 16 3 4 129 3 2 11 3 5 1 1 126 17 2 9 124 30 122 31 121 33 119 33 119 + 31 1 2 118 35 116 37 115 37 115 38 114 37 116 36 16 1 99 36 14 4 96 + 38 13 6 94 39 12 12 90 38 12 10 92 6 2 30 12 9 93 5 5 27 13 10 92 4 7 + 26 13 11 91 4 16 17 12 13 90 4 16 17 11 15 89 5 16 11 2 3 12 14 90 5 + 6 2 7 11 1 3 13 15 91 13 4 11 2 3 13 15 3 1 88 4 1 1 1 4 5 11 2 2 13 + 21 91 1 11 11 17 15 1 4 1 1 89 3 11 9 18 15 1 7 102 9 18 24 100 15 12 + 26 99 6 2 6 13 27 100 1 4 3 3 1 13 29 103 3 16 31 102 7 12 32 100 8 + 12 33 99 5 15 34 98 5 14 36 100 1 15 37 99 1 15 38 94 5 16 38 92 4 3 + 1 13 39 92 4 3 1 13 39 92 3 3 2 13 28 6 3 95 1 4 2 12 29 109 1 14 28 + 124 5 2 21 125 1 1 1 5 19 134 19 1 5 127 26 127 25 127 25 128 24 130 + 12 1 9 134 7 5 1 1 4 135 6 8 2 127 5 4 10 3 3 122 12 3 3 2 6 1 3 121 + 13 3 14 124 11 3 14 124 28 124 28 125 27 126 26 127 24 129 23 132 20 + 132 20 132 19 136 16 137 15 145 7 138 2 3 9 138 13 140 12 140 13 142 + 9 144 8 145 7 146 6 146 6 149 2 9 0 + + + + 21888.0 + + + 1.05555555556 + + + 4052.0 + + + 0.22532082922 + + + 2.60051216389 + + + 0.508435046384 0.459728080409 0.581418696358 0.382908506674 + 0.442023597168 -0.0572520184265 -0.0183362642626 -0.0328429048391 + -0.00883696385285 + + + 152.0 + + + 0.697368421053 0.791666666667 + + + 0.289473684211 0.368421052632 0.868421052632 1.26315789474 + 0.222222222222 0.75 1.75 0.444444444444 + + + 144.0 + + + 24.0 67.0 0.215953307393 17.0 4.0 4.0 + + + 0.0 0.993055555556 + + + 0.185124269006 + + + 0.912280701754 0.171052631579 0.0 0.0 0.0190058479532 + 0.101608187135 0.0738304093567 0.0 0.0 0.264619883041 + 0.405701754386 0.000730994152047 0.0 0.0 0.541666666667 + 0.47149122807 + + + 0.833333333333 0.859649122807 0.342105263158 0.00292397660819 0.0 + 0.0 0.0 0.0 0.964912280702 0.991228070175 0.33918128655 0.0 0.0 0.0 + 0.0 0.0 0.0146198830409 0.0614035087719 0.0409356725146 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0701754385965 0.295321637427 0.292397660819 + 0.00292397660819 0.0 0.0 0.0 0.0 0.152046783626 0.730994152047 + 0.780701754386 0.125730994152 0.0 0.0 0.0 0.0 0.0 0.175438596491 + 0.505847953216 0.210526315789 0.00292397660819 0.0 0.0 0.0 0.0 0.0 + 0.491228070175 0.976608187135 0.526315789474 0.16081871345 0.0 0.0 + 0.0 0.0 0.0263157894737 0.672514619883 0.684210526316 + 0.514619883041 + + + 0.23935186294 0.336170552752 0.0798508263033 0.0276659123831 + 0.0116524253483 0.428479385642 0.271369027128 0.226569693454 + 0.0412004953386 0.0362198552237 0.356326457333 0.0284374320094 + 0.473641210833 0.193129783536 + + + + + + + + + 41 1 76 1 75 2 39 29 7 2 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 + 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 35 42 36 44 + 34 42 35 42 34 42 36 41 36 41 35 42 37 39 38 38 39 38 39 39 38 38 39 + 35 1 2 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 + 7 6 1 6 5 1 12 39 1 33 4 74 3 74 3 74 3 75 2 75 2 76 1 76 1 2692 1 75 + 3 74 4 73 3 152 1 34 1 41 1 33 2 41 1 33 2 41 1 16 1 16 2 41 1 10 14 + 8 3 40 4 3 25 1 4 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 + 37 40 37 40 37 40 37 40 37 39 38 39 38 39 38 39 38 39 38 39 38 43 29 + 54 21 52 30 48 29 49 30 44 34 37 40 37 6 2 32 37 40 37 40 37 40 37 39 + 38 39 38 40 37 40 37 40 37 40 37 40 37 40 37 40 37 41 36 41 36 18 4 + 19 36 11 20 6 1 3 36 5 72 3 35 2 37 3 35 3 36 4 34 3 36 4 34 3 36 2 + 36 4 73 4 73 4 73 4 73 4 73 4 74 2 76 1 76 1 76 1 1 0 + + + + 12089.0 + + + 0.490445859873 + + + 3400.0 + + + 0.154705882353 + + + 2.28131710809 + + + 0.508889318885 0.463961161388 0.119143008116 0.728838178684 + 0.235053621896 -0.000396112166016 0.000739222608019 + 0.000374795835565 0.00755627430898 + + + 77.0 + + + 0.571428571429 0.152866242038 + + + 0.103896103896 0.311688311688 1.2987012987 0.571428571429 + 0.0509554140127 0.101910828025 0.229299363057 0.229299363057 + + + 157.0 + + + 5.0 28.0 0.143939393939 9.0 9.0 0.0 + + + 0.0 0.993630573248 + + + 0.281247415005 + + + 0.793522267206 0.141700404858 0.0 0.0 0.91632928475 0.174089068826 + 0.0364372469636 0.0960526315789 0.199730094467 0.0526315789474 + 0.512820512821 0.571052631579 0.0 0.0 0.433333333333 0.575 + + + 0.555555555556 0.738888888889 0.251461988304 0.0 0.0 0.0 0.0 0.0 + 0.842105263158 1.0 0.326315789474 0.0 0.0 0.0 0.0 0.0 + 0.842105263158 1.0 0.345029239766 0.0 0.0 0.0 0.0 0.0 + 0.815789473684 1.0 0.368421052632 0.0 0.015 0.126315789474 0.205 + 0.16 0.347368421053 0.41 0.205263157895 0.0 0.065 0.984210526316 + 0.85 0.26 0.0 0.0 0.0 0.0 0.05 1.0 1.0 0.177777777778 0.0 0.0 0.0 + 0.0 0.03 1.0 1.0 0.205 0.0 0.0 0.0 0.0 0.05 0.694736842105 0.68 + 0.415 + + + 0.305529488227 0.294797829336 0.00769939133635 0.00224452997402 + 0.303275205455 0.644603838625 0.160088680842 0.0330074635125 + 0.0230529238583 0.00576610702303 0.420429453163 0.430878295423 + 0.446821979341 0.0761530983833 + + + + + + + + + 39 1 78 1 77 2 77 2 76 3 75 4 58 21 42 37 41 38 41 38 41 38 41 38 41 + 38 41 38 41 38 41 4 1 33 44 1 1 33 43 2 1 33 42 37 42 37 42 37 42 37 + 41 39 38 42 37 42 38 40 38 1 1 39 42 38 38 40 35 3 1 40 36 2 2 38 42 + 37 42 37 42 37 38 1 3 37 37 2 3 37 36 3 3 42 5 29 3 76 3 76 3 21 5 50 + 4 20 5 50 4 21 7 11 3 32 5 20 10 8 6 31 4 20 4 51 4 20 3 51 5 21 1 52 + 5 25 5 44 5 29 1 44 5 74 5 20 4 1 8 41 39 40 38 41 38 41 39 40 39 40 + 39 41 38 37 42 31 48 3 1 33 42 40 39 4 1 34 40 4 2 35 38 41 38 41 38 + 41 38 41 38 41 38 41 38 41 38 40 39 40 39 40 39 40 39 40 39 40 39 40 + 39 40 40 39 41 22 3 10 46 3 1 8 25 0 + + + + 6320.0 + + + 0.9875 + + + 3279.0 + + + 0.133272339128 + + + 1.48599459468 + + + 0.513903550958 0.537428437969 0.142688270769 0.117956696327 + 0.0827674491738 -0.000427936397683 -0.0012076196554 + -0.00187052157549 -0.000848661331063 + + + 79.0 + + + 0.670886075949 0.35 + + + 0.405063291139 0.860759493671 0.607594936709 0.607594936709 0.15 + 0.4 0.65 0.2 + + + 80.0 + + + 11.0 50.0 0.180921052632 1.0 6.0 5.0 + + + 0.0 0.9875 + + + 0.518829113924 + + + 0.552631578947 0.881578947368 0.394736842105 0.0 0.7175 0.9875 0.41 + 0.0425 0.05 0.255 0.975 0.9675 0.0 0.2275 0.9225 0.905 + + + 0.222222222222 0.666666666667 0.822222222222 0.677777777778 + 0.555555555556 0.0 0.0 0.0 0.3 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.4 1.0 + 1.0 0.95 0.74 0.0 0.0 0.0 0.47 1.0 1.0 1.0 0.78 0.12 0.1 0.07 0.1 + 0.1 0.21 0.42 0.91 0.99 0.97 0.95 0.0 0.0 0.0 0.39 1.0 1.0 1.0 0.95 + 0.0 0.0 0.0 0.4 1.0 1.0 1.0 0.87 0.0 0.0 0.05 0.46 0.93 0.76 0.97 + 0.78 + + + 0.348299891906 0.194772528667 0.0163054962908 0.00982358247539 + 0.0473061156974 0.306997458149 0.0711681472216 0.0219497038659 + 0.0146115177843 0.00513826089859 0.0578388636595 0.1394881543 + 0.0279641264998 0.0609956501992 + + + + + + + + + 52 3 188 7 1 2 11 2 1 7 160 38 153 38 153 38 153 38 102 2 35 2 12 38 + 102 8 4 1 4 10 9 3 12 38 102 33 1 5 12 38 102 39 13 4 3 30 102 39 13 + 3 3 31 102 39 13 37 103 39 12 38 102 39 12 38 102 39 12 38 102 39 12 + 38 102 39 12 38 101 40 11 39 101 41 8 41 20 4 77 42 8 41 20 4 76 42 8 + 41 20 3 76 43 9 39 20 3 79 40 10 5 2 19 2 3 7 1 102 40 11 3 3 19 2 4 + 109 40 11 33 1 4 21 6 75 40 11 38 21 7 75 39 11 4 1 33 25 4 74 39 11 + 38 20 2 3 4 74 3 3 33 11 38 17 12 74 4 3 32 11 37 1 1 16 12 1 2 71 39 + 12 35 19 16 70 39 11 39 16 17 69 5 1 33 11 39 16 21 65 39 11 39 15 24 + 64 38 12 38 15 25 63 38 12 38 15 24 1 2 61 38 12 38 15 28 60 38 12 38 + 15 1 3 25 59 38 12 38 15 1 3 27 57 38 12 38 15 1 3 28 56 36 14 4 1 33 + 17 1 1 29 55 36 14 4 1 33 14 1 1 2 1 30 55 35 15 3 1 33 14 3 4 11 1 + 17 54 37 13 2 2 33 14 3 3 31 53 37 13 2 2 34 13 4 1 22 2 1 4 3 53 37 + 13 1 30 6 14 4 2 25 3 4 52 37 48 2 14 4 4 22 4 4 52 38 48 1 14 27 7 4 + 53 37 48 1 14 28 6 4 53 37 48 2 14 2 5 19 9 1 54 13 12 12 48 2 14 1 9 + 16 64 2 28 7 74 17 63 1 31 5 72 20 24 2 71 2 72 18 1 1 23 4 70 2 74 + 16 1 2 21 7 68 1 75 16 25 6 145 17 23 8 143 14 26 9 141 14 27 1 2 7 + 140 14 26 12 127 5 5 19 22 14 127 4 4 9 1 6 1 4 5 2 14 14 127 4 2 18 + 1 6 3 1 14 15 130 2 1 12 1 16 14 15 131 30 15 14 133 30 14 15 133 29 + 13 16 3 2 129 28 13 16 4 2 129 26 14 15 5 4 128 25 14 15 2 7 129 1 3 + 20 13 15 4 4 135 4 1 15 13 15 149 14 13 16 149 8 1 4 13 17 148 1 3 4 + 1 4 13 17 153 2 2 3 13 19 151 4 1 3 13 22 141 4 2 7 15 23 141 14 13 + 21 1 1 142 13 13 19 3 7 136 14 11 37 131 12 11 40 129 11 11 3 1 35 + 131 10 11 2 4 6 1 27 130 8 12 3 9 22 2 5 133 6 24 1 1 19 3 4 134 4 22 + 31 135 2 18 36 152 28 5 6 151 16 1 11 163 6 1 8 2 12 162 1 2 2 3 1 2 + 2 4 12 169 7 2 11 1 1 5 3 161 7 8 2 10 3 162 2 24 3 163 1 9 3 10 5 + 154 2 2 1 2 4 8 6 5 7 155 11 8 5 5 7 164 6 4 5 4 8 165 26 167 23 170 + 21 172 13 3 2 175 5 4 1 184 1 1151 1 189 2 189 2 190 2 188 3 188 4 + 186 7 183 8 184 6 185 7 184 7 184 6 185 6 185 6 185 6 186 5 187 4 187 + 3 9 0 + + + + 24448.0 + + + 1.4921875 + + + 5650.0 + + + 0.233274336283 + + + 1.84246353323 + + + 0.457157894737 0.335905511811 0.534568666614 0.126488271909 + 0.198740451406 0.071856803564 0.0590763204307 0.0911845641212 + 0.0321655080011 + + + 191.0 + + + 1.02617801047 1.8125 + + + 0.188481675393 0.523560209424 1.5497382199 1.8219895288 1.875 3.125 + 1.9375 0.3125 + + + 128.0 + + + 28.0 104.0 0.227972027972 27.0 0.0 3.0 + + + 0.0 0.9921875 + + + 0.231102748691 + + + 0.646276595745 0.476728723404 0.0 0.0 0.740234375 0.326822916667 + 0.0 0.0 0.0625 0.509765625 0.234375 0.0 0.0 0.0768229166667 + 0.47265625 0.155598958333 + + + 0.510869565217 0.896739130435 0.8125 0.135869565217 0.0 0.0 0.0 0.0 + 0.388020833333 0.794270833333 0.778645833333 0.1796875 0.0 0.0 0.0 + 0.0 0.690104166667 0.7578125 0.557291666667 0.0 0.0 0.0 0.0 0.0 + 0.7265625 0.786458333333 0.736979166667 0.0130208333333 0.0 0.0 0.0 + 0.0 0.0 0.205729166667 0.442708333333 0.2109375 0.104166666667 0.0 + 0.0 0.0 0.0 0.0442708333333 0.744791666667 0.640625 0.658854166667 + 0.174479166667 0.0 0.0 0.0 0.0 0.0078125 0.260416666667 + 0.575520833333 0.40625 0.0859375 0.0 0.0 0.0 0.0 0.0390625 + 0.2109375 0.697916666667 0.322916666667 0.213541666667 + + + 0.517807678677 0.188345378185 0.139981505746 0.068319457245 + 0.286733758367 0.408761304711 0.104592704332 0.225972466964 + 0.0798500309309 0.0729056009114 0.109324922853 0.382384090845 + 0.265890310813 0.0610421846028 + + + + + + + + + 2 2 33 3 32 5 30 6 29 6 29 8 26 11 23 14 21 12 24 12 23 13 21 15 2 1 + 17 17 19 16 19 17 3 1 14 21 14 22 13 16 5 2 12 17 2 5 11 25 10 25 11 + 25 10 26 9 27 7 28 7 29 6 30 5 30 5 31 4 32 4 31 4 24 3 4 4 9 2 12 12 + 23 12 24 2 5 4 32 3 32 3 32 3 32 3 8 4 19 4 7 5 19 4 7 6 17 5 7 5 12 + 1 4 6 3 2 2 5 12 2 5 4 8 4 7 2 3 2 6 3 9 4 6 2 3 2 6 3 4 3 2 3 8 1 3 + 3 5 4 3 3 2 3 12 2 6 4 3 4 1 3 12 1 8 3 3 4 24 4 3 4 24 4 3 4 24 4 3 + 4 24 4 3 4 24 4 3 4 1 6 17 4 3 12 16 4 3 13 15 4 3 14 14 4 3 16 12 4 + 3 17 11 4 3 19 9 4 3 18 10 4 3 19 9 4 3 20 8 4 3 21 7 4 3 22 6 5 2 24 + 2 1 1 5 2 24 5 3 4 23 5 2 8 20 5 2 8 20 5 3 7 21 4 4 6 21 4 4 7 20 4 + 4 7 21 2 4 8 20 4 3 11 25 13 22 14 21 15 20 16 19 17 18 18 16 20 16 + 21 14 22 13 23 12 24 11 25 10 26 9 27 9 27 8 27 8 27 8 27 8 19 1 7 8 + 4 1 12 18 5 1 4 2 5 18 4 10 3 18 4 10 2 19 4 10 3 18 4 11 2 18 6 9 2 + 18 7 8 2 4 4 10 8 7 3 1 8 8 27 8 28 7 28 7 17 3 9 6 9 5 3 4 8 6 7 9 1 + 4 8 6 13 2 3 3 8 6 29 7 28 7 6 2 21 6 6 3 8 3 8 7 18 1 9 7 27 8 28 7 + 28 7 27 8 13 1 13 8 27 8 27 8 9 1 4 1 12 9 6 1 9 2 8 9 5 5 3 7 6 10 5 + 5 3 5 7 9 6 7 13 8 8 8 12 6 9 10 9 8 7 16 4 8 7 17 3 8 7 17 3 8 8 15 + 4 9 7 15 4 7 8 16 5 6 8 18 1 10 7 18 1 8 9 16 1 10 7 29 6 29 6 29 4 + 31 4 31 6 29 7 28 6 29 6 30 5 30 5 30 5 30 5 30 5 30 5 30 5 30 4 33 2 + 33 2 1 1 31 2 1 1 31 2 1 1 32 1 1 1 32 3 32 3 32 3 32 3 20 0 + + + + 5810.0 + + + 0.210843373494 + + + 2813.0 + + + 0.29150373267 + + + 1.03968079386 + + + 0.479318709354 0.438337157569 0.0291421768291 0.610059476033 + 0.0160616196166 0.00115492857235 -0.0194640942315 -0.00202883040901 + 0.0746667185042 + + + 35.0 + + + 4.25714285714 0.656626506024 + + + 1.82857142857 5.14285714286 4.57142857143 4.11428571429 + 0.21686746988 1.22891566265 0.602409638554 0.578313253012 + + + 166.0 + + + 21.0 96.0 0.244186046512 7.0 10.0 2.0 + + + 0.0 0.993975903614 + + + 0.484165232358 + + + 0.801829268293 0.47619047619 0.368902439024 0.0863095238095 + 0.769647696477 0.391534391534 0.826558265583 0.547619047619 + 0.590785907859 0.444444444444 0.772357723577 0.0873015873016 + 0.265582655827 0.582010582011 0.539295392954 0.198412698413 + + + 0.725 0.583333333333 0.321428571429 0.142857142857 0.0125 0.0 0.0 + 0.0 0.9 1.0 0.595238095238 0.845238095238 0.85 0.619047619048 + 0.345238095238 0.0 0.7 0.914285714286 0.27619047619 0.495238095238 + 0.8 0.961904761905 0.971428571429 0.619047619048 0.45 0.97619047619 + 0.5 0.297619047619 0.725 0.785714285714 0.190476190476 + 0.285714285714 0.2 1.0 0.738095238095 0.166666666667 0.85 + 0.821428571429 0.166666666667 0.0 0.15 0.980952380952 + 0.857142857143 0.0190476190476 0.66 0.780952380952 0.180952380952 + 0.0 0.0 0.714285714286 0.845238095238 0.154761904762 0.425 1.0 + 0.369047619048 0.0 0.0 0.361904761905 0.752380952381 0.542857142857 + 0.11 0.666666666667 0.419047619048 0.0 + + + 0.563805740806 0.178001548429 0.051889927835 0.0231671047635 + 0.323531852781 0.454416803061 0.0937298946622 0.0517749817173 + 0.0251414505317 0.0349566701634 0.0565191712244 0.535506763667 + 0.266205688279 0.0544811960668 + + + + + + + + + 14 2 10 1 3 2 6 4 3 1 5 1 3 3 4 10 4 1 3 3 4 10 4 2 2 4 3 5 1 4 4 2 2 + 5 3 4 2 3 4 2 2 4 5 3 3 2 4 2 2 3 6 3 4 1 24 1 43 1 23 2 486 2 1 2 19 + 3 1 2 8 1 14 1 9 1 24 1 10 1 13 1 9 5 1 1 7 4 8 9 4 4 8 12 1 5 2 1 4 + 19 1 2 5 20 7 16 16 8 17 5 47 1 24 3 24 1 9 8 16 12 4 1 8 23 3 21 4 6 + 1 9 2 3 5 9 4 1 2 1 2 1 3 6 8 1 6 1 6 1 10 4 3 1 257 1 1 1 9 2 10 4 8 + 4 9 6 6 3 9 7 19 2 1 2 697 1 23 3 11 1 10 7 6 3 9 10 2 4 2 2 5 8 4 8 + 6 6 6 4 1 2 7 2 172 5 19 12 2 5 1 1 3 22 5 15 1 3 6 11 3 1 1 4 5 10 6 + 3 6 6 2 2 217 2 23 3 11 1 10 3 11 2 8 4 9 4 9 3 5 3 1 4 8 5 4 8 8 5 5 + 8 683 2 22 4 21 6 9 2 8 7 2 8 8 7 1 9 9 6 2 5 21 3 22 2 166 5 1 1 18 + 13 19 7 2 0 + + + + 4425.0 + + + 0.141242937853 + + + 666.0 + + + 1.02252252252 + + + 1.15913978495 + + + 0.486611611612 0.447481572482 0.0569110489707 4.02597776739 + 0.0892152196024 0.000931232282639 0.150388097562 -0.00798005523109 + 2.104883807 + + + 25.0 + + + 6.12 0.401129943503 + + + 3.84 6.72 7.68 6.08 0.677966101695 0.338983050847 0.45197740113 + 0.135593220339 + + + 177.0 + + + 4.0 16.0 0.21472392638 29.0 5.0 0.0 + + + 0.0 0.994350282486 + + + 0.150508474576 + + + 0.193181818182 0.193181818182 0.0757575757576 0.0 0.181818181818 + 0.155303030303 0.318181818182 0.148148148148 0.310606060606 + 0.140151515152 0.147727272727 0.111111111111 0.116883116883 + 0.0551948051948 0.194805194805 0.0952380952381 + + + 0.166666666667 0.19696969697 0.242424242424 0.0151515151515 0.0 0.0 + 0.0 0.0 0.106060606061 0.30303030303 0.333333333333 0.181818181818 + 0.151515151515 0.151515151515 0.0 0.0 0.242424242424 0.272727272727 + 0.257575757576 0.151515151515 0.227272727273 0.530303030303 + 0.0454545454545 0.231884057971 0.0151515151515 0.19696969697 + 0.212121212121 0.0 0.151515151515 0.363636363636 0.030303030303 + 0.275362318841 0.257575757576 0.287878787879 0.19696969697 0.0 + 0.030303030303 0.257575757576 0.0 0.130434782609 0.287878787879 + 0.409090909091 0.242424242424 0.121212121212 0.0909090909091 + 0.212121212121 0.030303030303 0.275362318841 0.19696969697 + 0.166666666667 0.136363636364 0.0151515151515 0.166666666667 + 0.242424242424 0.0454545454545 0.217391304348 0.0795454545455 + 0.0568181818182 0.0795454545455 0.0 0.0795454545455 0.295454545455 + 0.0340909090909 0.0978260869565 + + + 0.422556270966 0.259027333152 0.143254689128 0.0494222980627 + 0.334990556563 0.370634192965 0.222225599538 0.0167934006826 + 0.136829715571 0.08741166209 0.128394845399 0.487236861289 + 0.259545765341 0.20624659029 + + + + + + + + + 2 4 1 3 41 14 37 13 32 4 2 11 32 6 5 6 32 8 5 5 31 10 3 5 32 20 2 2 + 27 22 29 22 31 19 39 10 39 10 40 9 7 2 32 9 3 6 37 5 1 3 43 3 38 10 + 40 7 45 4 45 5 44 7 42 4 1 4 7 1 38 3 7 1 3 3 32 5 3 10 32 14 36 14 + 35 10 2 2 36 10 1 2 36 11 39 9 40 9 40 8 42 5 44 5 45 4 45 5 46 2 8 0 + + + + + 1862.0 + + + 1.28947368421 + + + 405.0 + + + 0.614814814815 + + + 1.88479262673 + + + 0.50133744856 0.421888555222 0.428083102358 0.262462188653 + 0.300107564151 -0.026575238257 0.0253785576428 0.00232552693073 + 0.041670232203 + + + 49.0 + + + 0.65306122449 0.421052631579 + + + 0.816326530612 0.326530612245 0.979591836735 0.489795918367 + 0.631578947368 0.315789473684 0.631578947368 0.105263157895 + + + 38.0 + + + 5.0 27.0 0.298245614035 4.0 2.0 2.0 + + + 0.0 0.973684210526 + + + 0.217508055854 + + + 0.740740740741 0.0833333333333 0.0 0.0 0.472222222222 + 0.416666666667 0.0 0.0 0.0185185185185 0.433333333333 + 0.388888888889 0.0583333333333 0.0 0.0230769230769 0.384615384615 + 0.484615384615 + + + 0.583333333333 0.866666666667 0.0333333333333 0.0 0.0 0.0 0.0 0.0 + 0.875 0.633333333333 0.3 0.0 0.0 0.0 0.0 0.0 0.583333333333 0.9 0.4 + 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 0.966666666667 0.3 0.0 0.0 + 0.0 0.0 0.0 0.0666666666667 0.633333333333 0.7 0.75 0.0 0.0 0.0 0.0 + 0.0 0.0333333333333 0.366666666667 0.25 0.6 0.233333333333 0.0 0.0 + 0.0 0.0333333333333 0.0666666666667 0.0416666666667 0.733333333333 + 1.0 0.7 0.0 0.0 0.0 0.0 0.0 0.628571428571 0.342857142857 0.0 + + + 0.24552538606 0.319825500559 0.0663213203622 0.0544550557167 + 0.11658054031 0.327238355996 0.248844630299 0.143720747391 + 0.0155064287467 0.0934641005791 0.328230606854 0.0809699003315 + 0.340361706889 0.147485391033 + + + + + + + + + 19 4 24 4 24 3 27 1 27 3 24 5 23 6 22 6 22 6 21 8 22 6 22 6 22 7 19 8 + 20 8 21 7 1 7 5 5 3 6 2 7 6 13 3 8 4 13 3 3 1 1 17 4 2 3 1 1 16 5 2 3 + 1 1 15 6 1 4 1 1 15 6 1 6 16 5 1 5 18 1 4 4 24 5 23 6 23 5 22 4 24 3 + 25 0 + + + + 868.0 + + + 0.903225806452 + + + 229.0 + + + 0.729257641921 + + + 0.680952380952 + + + 0.569464661168 0.539155749636 0.393350680894 0.220915182785 + -0.176884915125 -0.131904228873 -0.0153782256332 0.0797118147182 + -0.0304721407584 + + + 28.0 + + + 0.5 0.451612903226 + + + 0.714285714286 0.0 0.714285714286 0.571428571429 0.0 0.0 + 1.29032258065 0.258064516129 + + + 31.0 + + + 4.0 18.0 0.21875 3.0 0.0 1.0 + + + 0.0 0.967741935484 + + + 0.263824884793 + + + 0.0 0.0 0.660714285714 0.678571428571 0.0 0.0 0.107142857143 0.0 + 0.163265306122 0.142857142857 0.339285714286 0.0 0.367346938776 + 0.839285714286 0.75 0.107142857143 + + + 0.0 0.0 0.0 0.0 0.666666666667 0.75 1.0 0.916666666667 0.0 0.0 0.0 + 0.0 0.75 0.5 0.5 0.4375 0.0 0.0 0.0 0.0 0.166666666667 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.75 0.0 0.0 0.0 + 0.5 0.125 0.25 0.25 0.625 0.0 0.0 0.0 0.555555555556 0.833333333333 + 1.0 1.0 1.0 0.75 0.25 0.0 0.0 0.1875 0.625 0.8125 0.5625 0.75 + 0.1875 0.0 + + + 0.338949763156 0.197327573931 0.225685254205 0.137053296218 + 0.0475237455382 0.317247212013 0.0929795172258 0.36397589372 + 0.233010003588 0.107273433815 0.1179465062 0.276995201382 + 0.0913355960816 0.0612589332359 + + + + + + + + + 7 1 1 2 29 5 27 8 23 1 1 9 3 8 11 21 12 20 13 21 11 22 11 23 10 23 12 + 22 12 21 11 23 11 9 2 12 10 23 10 24 5 3 1 25 3 30 3 30 3 31 2 31 2 + 31 1 75 11 12 1 4 3 3 2 1 6 13 2 4 2 24 3 4 2 24 3 11 2 17 3 12 1 17 + 2 31 2 6 2 2 1 4 1 11 2 2 2 6 6 7 1 8 1 2 2 6 8 4 3 6 2 2 2 6 8 4 4 3 + 8 6 8 2 6 3 9 7 4 1 1 4 3 5 8 17 3 5 2 2 3 10 2 1 1 4 3 5 2 2 3 10 2 + 6 3 9 3 11 1 6 3 10 3 18 2 10 3 18 2 9 4 12 1 4 3 9 4 10 1 1 1 2 5 6 + 2 1 3 10 13 7 4 8 13 8 4 7 13 10 3 3 2 1 15 9 3 4 17 8 4 4 17 8 4 4 + 15 10 4 4 16 9 4 4 17 8 4 4 19 6 4 4 20 5 4 4 22 2 5 4 29 4 29 5 28 5 + 28 6 27 7 26 8 25 9 24 11 22 10 24 9 24 9 24 10 23 6 1 3 23 10 5 1 17 + 20 13 21 12 22 11 23 10 25 8 26 7 27 6 28 5 28 5 29 4 29 4 29 4 29 4 + 29 4 29 4 29 4 29 4 29 4 29 4 29 4 29 4 29 4 29 4 9 1 19 4 4 2 1 4 18 + 4 6 6 17 4 6 6 17 4 7 6 1 1 3 2 9 4 7 6 1 1 3 3 6 6 7 6 5 3 8 4 7 5 5 + 4 8 4 7 5 1 1 3 4 6 1 1 5 6 8 2 5 2 1 2 1 1 5 6 8 2 4 2 2 1 2 1 5 7 7 + 2 4 8 5 3 1 2 14 7 6 3 16 9 5 3 12 2 2 9 5 3 11 3 2 9 5 3 8 17 5 3 10 + 14 6 3 10 14 6 3 12 12 7 2 15 9 7 2 16 8 7 2 17 7 6 3 18 6 6 3 20 4 6 + 3 21 3 7 2 22 1 8 3 30 4 29 2 31 4 28 6 27 6 27 5 29 4 29 3 29 5 29 2 + 27 0 + + + + 4389.0 + + + 0.248120300752 + + + 2385.0 + + + 0.293081761006 + + + 1.04966101695 + + + 0.469758909853 0.446115240455 0.0334432119064 0.528611062319 + 0.00366927902747 0.000285471360968 0.00395416105716 + 0.00214617377388 0.0262132061738 + + + 33.0 + + + 3.57575757576 0.827067669173 + + + 3.15151515152 4.36363636364 3.63636363636 3.15151515152 + 0.601503759398 1.23308270677 0.210526315789 1.26315789474 + + + 133.0 + + + 20.0 89.0 0.193467336683 6.0 8.0 1.0 + + + 0.0 0.992481203008 + + + 0.543403964457 + + + 0.609848484848 0.734848484848 0.746212121212 0.474264705882 + 0.867424242424 0.280303030303 0.829545454545 0.0735294117647 + 0.867424242424 0.291666666667 0.810606060606 0.286764705882 + 0.538720538721 0.410774410774 0.508417508418 0.428104575163 + + + 0.046875 0.838235294118 0.859375 0.75 0.514705882353 0.5 + 0.308823529412 0.102941176471 0.703125 0.823529411765 0.859375 + 0.485294117647 1.0 0.96875 0.75 0.735294117647 0.96875 + 0.852941176471 0.453125 0.102941176471 0.941176470588 0.8125 + 0.147058823529 0.0294117647059 0.8125 0.838235294118 0.59375 0.0 + 0.647058823529 0.921875 0.117647058824 0.0 0.765625 0.882352941176 + 0.34375 0.0 0.661764705882 1.0 0.602941176471 0.0 0.8125 1.0 + 0.65625 0.191176470588 0.602941176471 1.0 0.5 0.0441176470588 + 0.484375 0.985294117647 0.78125 0.411764705882 0.411764705882 1.0 + 0.955882352941 0.220588235294 0.05 0.682352941176 0.3625 + 0.176470588235 0.129411764706 0.6 0.470588235294 0.129411764706 + + + 0.495878580015 0.202233403455 0.0306301987754 0.00815903644912 + 0.174092249299 0.469981553502 0.106638629726 0.048023617543 + 0.0576195293997 0.0107798258103 0.0666142003829 0.461752184771 + 0.280771481251 0.054670059224 + + + + + + + + + 84 3 35 2 3 1 37 1 3 2 35 2 3 2 36 1 3 2 36 1 3 2 35 2 3 2 22 2 11 2 + 3 34 3 2 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 39 4 38 4 38 4 38 + 4 38 4 38 4 38 4 38 4 38 4 38 4 38 4 38 6 1 6 26 7 4 1 2 2 21 2 2 8 + 39 3 39 3 39 3 39 4 38 4 38 4 38 4 38 4 38 4 38 4 38 4 30 2 5 5 29 5 + 3 5 8 2 18 5 5 4 38 5 37 5 37 5 38 4 38 4 38 4 7 6 1 9 15 4 3 27 8 4 + 3 30 1 3 1 4 3 40 2 40 2 40 2 40 1 41 1 36 0 + + + + 2562.0 + + + 0.688524590164 + + + 1684.0 + + + 0.16270783848 + + + 1.00121597096 + + + 0.505518220265 0.501444972288 0.0754787266636 0.103605169671 + 0.00499283741258 0.000111514693063 -0.00057876835444 + -0.000500312988657 0.000767892410681 + + + 42.0 + + + 0.619047619048 0.360655737705 + + + 0.761904761905 0.285714285714 0.0 1.42857142857 0.590163934426 0.0 + 0.393442622951 0.459016393443 + + + 61.0 + + + 2.0 18.0 0.153465346535 1.0 3.0 3.0 + + + 0.0327868852459 0.983606557377 + + + 0.657298985168 + + + 0.453333333333 0.826666666667 0.68 0.41875 0.4 1.0 0.987878787879 + 0.4375 0.413333333333 1.0 1.0 0.4625 0.375757575758 0.818181818182 + 0.787878787879 0.505681818182 + + + 0.285714285714 0.7 0.714285714286 0.6 0.5 0.4 0.25 0.075 0.0 0.75 + 1.0 1.0 0.825 1.0 1.0 0.35 0.0 0.75 1.0 1.0 0.95 1.0 0.85 0.0 0.0 + 0.75 1.0 1.0 1.0 1.0 0.895833333333 0.0 0.0 0.775 1.0 1.0 1.0 1.0 + 0.875 0.0 0.0 0.775 1.0 1.0 1.0 1.0 0.975 0.0 0.0 0.725 1.0 1.0 + 0.95 0.828571428571 0.875 0.05 0.166666666667 0.541666666667 + 0.666666666667 0.666666666667 0.645833333333 0.761904761905 + 0.916666666667 0.166666666667 + + + 0.49153275692 0.0386152862417 0.00324352182638 0.00587545364327 + 0.117979555819 0.0694072015995 0.0675502480222 0.0130515120531 + 0.0071864649 0.00400167514001 0.172620569022 0.0342550015802 + 0.144895350507 0.0393489655646 + + + + + + + + + 1 3 271 4 93 1 35 2 138 5 92 1 35 2 137 8 90 2 7 4 1 5 1 4 10 4 137 9 + 89 38 137 2 1 6 89 38 137 2 1 7 88 38 137 3 1 6 88 38 137 3 1 7 87 38 + 137 13 1 1 83 3 3 32 137 16 82 4 2 32 137 16 82 4 2 32 137 17 81 4 2 + 32 137 10 2 5 82 2 3 32 137 10 2 4 82 38 137 17 81 38 137 18 80 38 + 137 18 80 38 137 18 81 37 137 17 82 37 137 17 82 37 137 17 82 38 137 + 17 5 1 75 38 137 19 2 3 74 38 137 20 2 3 73 38 137 20 2 6 3 2 5 2 58 + 38 137 35 3 3 57 38 137 42 56 37 138 44 54 37 16 3 118 31 2 15 51 38 + 13 8 114 32 4 20 44 39 10 11 114 27 2 2 2 21 45 39 10 16 103 5 1 29 4 + 21 45 40 8 13 108 3 2 26 1 2 9 13 3 1 44 40 8 13 109 1 3 26 1 2 9 15 + 2 3 41 40 9 12 109 2 3 24 3 1 11 21 39 37 9 16 67 2 38 1 4 17 1 7 2 2 + 8 25 37 38 8 16 3 2 61 2 37 4 4 31 5 27 35 38 8 16 3 3 61 1 38 3 4 25 + 1 6 7 26 33 38 8 16 3 3 61 2 21 8 1 5 1 4 4 37 1 28 32 37 9 15 4 5 59 + 6 3 11 2 20 4 69 29 38 8 14 5 6 57 21 2 20 4 71 27 38 8 16 1 9 56 21 + 2 20 4 72 26 38 8 28 54 21 2 20 5 39 6 29 23 38 7 17 2 11 54 20 3 19 + 5 38 2 37 20 38 7 31 53 20 3 19 5 21 1 16 3 38 18 38 7 31 53 21 1 20 + 5 20 2 59 16 37 8 32 52 42 5 19 4 60 14 32 3 3 7 34 50 42 5 18 6 57 1 + 4 12 3 32 2 7 35 49 21 1 20 5 6 1 11 9 62 8 3 42 36 48 21 1 19 6 5 3 + 10 10 64 4 4 42 37 47 41 6 4 5 1 2 6 1 1 10 50 1 19 42 38 46 42 6 3 9 + 5 1 1 11 49 2 18 42 38 46 21 1 20 6 4 10 2 2 5 9 30 1 14 4 19 46 34 + 45 21 1 20 6 4 18 2 10 26 10 8 3 18 48 32 46 42 6 4 19 1 12 28 7 2 1 + 3 3 19 44 28 3 5 47 41 6 4 20 1 13 29 10 1 2 18 45 28 5 1 15 1 33 41 + 6 4 36 27 13 18 47 12 1 13 21 3 31 41 7 3 39 26 11 6 3 10 45 27 55 41 + 7 3 40 28 8 19 48 25 19 4 31 35 13 3 44 25 8 18 50 24 19 4 40 9 1 9 + 19 3 48 22 7 19 50 23 18 7 39 19 3 1 14 3 50 46 50 22 19 8 33 35 7 3 + 33 3 16 44 52 20 3 2 13 10 31 36 7 3 36 3 17 40 52 25 13 11 32 34 7 3 + 57 39 51 26 14 10 26 3 2 35 7 4 58 37 50 17 6 4 13 3 3 6 25 40 7 4 59 + 36 50 18 7 2 12 14 24 40 8 3 60 35 51 17 7 2 12 12 26 40 8 3 64 31 52 + 14 8 3 12 12 26 40 10 1 66 7 1 21 53 13 8 3 11 14 25 40 8 1 1 1 63 1 + 4 1 1 1 4 18 56 2 1 10 8 1 12 15 25 27 1 11 8 3 46 1 3 3 9 4 8 19 51 + 2 3 2 1 13 5 1 12 15 25 39 8 3 46 10 7 4 7 12 1 8 49 23 1 3 11 15 26 + 6 4 29 8 3 47 10 18 20 48 17 1 7 1 2 11 14 27 39 8 3 47 6 23 19 52 24 + 11 13 28 8 1 30 9 2 48 8 2 3 14 20 50 26 11 14 27 38 10 2 50 9 3 33 + 51 25 10 17 1 3 1 1 18 18 2 19 10 2 49 46 53 22 11 24 18 38 11 1 52 + 44 53 21 11 23 19 35 2 1 10 2 54 20 1 21 54 20 11 28 14 36 12 2 56 40 + 55 19 10 30 13 36 13 1 58 38 57 17 10 31 12 22 4 1 5 3 14 1 60 36 58 + 16 10 33 10 9 1 2 37 1 62 33 60 15 10 33 59 1 64 32 60 14 10 34 58 1 + 66 8 2 20 61 13 10 35 57 1 68 6 2 20 63 1 4 6 10 36 56 2 69 5 1 20 70 + 3 10 27 2 8 56 2 71 24 67 6 10 27 3 8 55 2 76 20 65 7 10 27 7 4 54 4 + 78 18 65 5 11 37 56 2 81 16 65 4 11 39 55 3 81 15 66 4 11 38 55 3 82 + 14 67 4 10 5 1 31 56 3 82 14 80 5 4 29 55 4 88 8 80 5 10 4 2 16 57 3 + 92 4 82 2 14 1 3 15 59 1 199 13 59 1 202 11 59 1 203 10 263 9 260 1 3 + 9 259 2 3 9 265 4 2 2 272 1 264 5 1 2 266 7 267 6 265 8 264 9 263 1 1 + 7 271 2 272 1 1358 1 272 2 270 3 270 4 269 6 267 6 267 6 267 5 267 6 + 268 5 268 5 271 2 55 0 + + + + 35490.0 + + + 2.1 + + + 9501.0 + + + 0.216819282181 + + + 1.23273818929 + + + 0.490584969384 0.412363774029 0.658633809696 0.0598947028945 + 0.0803523766169 0.0546289846206 -0.000526852266322 0.00102818138327 + 0.00116281427042 + + + 273.0 + + + 1.12454212454 3.38461538462 + + + 1.30402930403 1.05494505495 0.952380952381 1.18681318681 2.0 + 5.90769230769 5.10769230769 0.369230769231 + + + 130.0 + + + 44.0 169.0 0.287085514834 31.0 2.0 11.0 + + + 0.0 0.992307692308 + + + 0.267709213863 + + + 0.295955882353 0.639483065954 0.0657169117647 0.00267379679144 + 0.473805147059 0.513814616756 0.397518382353 0.0017825311943 + 0.0367647058824 0.427361853832 0.400735294118 0.000891265597148 + 0.00226449275362 0.454106280193 0.490036231884 0.0816864295125 + + + 0.319852941176 0.704044117647 0.852941176471 0.231833910035 + 0.0753676470588 0.0606617647059 0.0110294117647 0.0 0.0 + 0.159926470588 0.821691176471 0.674740484429 0.123161764706 + 0.00367647058824 0.0 0.0 0.0716911764706 0.0625 0.204044117647 + 0.801038062284 0.797794117647 0.568014705882 0.0 0.0 0.761029411765 + 1.0 0.994485294118 0.0657439446367 0.0845588235294 0.139705882353 + 0.00735294117647 0.0 0.0275735294118 0.119485294118 0.658088235294 + 0.576124567474 0.391544117647 0.0643382352941 0.0 0.0 0.0 0.0 + 0.0900735294118 0.378892733564 0.558823529412 0.588235294118 + 0.00367647058824 0.0 0.0 0.0 0.147058823529 0.167820069204 + 0.295955882353 0.617647058824 0.246323529412 0.0899653979239 0.0 + 0.00892857142857 0.573214285714 0.900840336134 0.941071428571 + 0.103571428571 0.0 0.0 + + + 0.327471465625 0.270678772114 0.0639456063102 0.0221402715866 + 0.247975697437 0.241820369957 0.232574096184 0.133481106297 + 0.097330621668 0.0563779001196 0.290425318057 0.0562811772914 + 0.244554659057 0.181166459514 + + + + + + + + + 66 2 162 2 162 1 163 2 162 2 162 2 162 2 162 2 130 1 31 2 130 1 31 2 + 129 4 29 3 128 10 23 3 128 29 4 3 128 36 128 36 128 36 128 36 129 35 + 129 17 1 17 129 17 1 17 129 35 129 34 130 35 129 36 128 36 128 36 128 + 36 128 36 128 36 128 36 128 36 94 1 33 36 94 2 33 35 94 2 33 35 94 2 + 33 35 94 3 31 36 21 3 71 1 32 38 19 4 104 38 17 7 67 3 32 5 4 29 17 9 + 65 5 29 8 5 25 18 9 65 6 28 38 18 7 68 3 30 38 19 8 66 2 31 38 18 10 + 65 3 31 37 17 12 64 3 31 37 16 13 64 4 30 37 16 14 63 23 10 37 17 15 + 3 1 59 44 1 24 17 19 59 69 17 20 57 70 16 21 1 1 55 70 16 20 3 1 55 + 69 15 26 54 69 15 26 54 69 15 28 52 37 6 3 8 15 15 29 51 37 27 5 15 + 30 50 37 28 4 14 32 49 37 28 4 14 33 48 37 29 4 13 34 47 37 29 4 13 + 35 46 37 29 4 12 5 1 30 46 37 29 4 12 5 2 30 45 37 29 4 11 1 1 37 44 + 37 30 3 13 37 45 36 29 4 13 15 1 12 3 6 45 36 29 4 13 27 5 4 46 37 29 + 3 13 27 5 4 46 37 29 3 14 3 1 22 4 2 1 2 46 33 1 3 29 3 14 3 2 21 3 3 + 1 2 46 37 29 3 14 2 4 20 3 3 50 4 4 28 29 3 10 6 6 21 1 3 49 4 1 31 + 29 3 10 6 7 20 1 3 16 4 29 36 31 1 10 5 7 25 17 4 28 36 42 5 7 25 14 + 9 26 37 42 4 10 12 7 3 14 10 25 37 30 1 13 2 14 7 9 2 14 10 25 37 30 + 1 32 3 25 13 23 37 30 1 31 3 26 13 23 37 30 1 30 4 26 12 24 37 29 2 + 23 4 3 4 2 4 18 14 24 37 30 1 22 11 2 6 17 14 24 37 55 5 1 4 1 6 3 1 + 13 11 27 37 61 4 9 2 13 11 28 36 58 8 1 3 3 3 13 12 5 5 17 36 53 23 + 12 13 7 5 15 36 51 24 14 13 4 8 14 36 16 3 33 23 15 12 3 10 13 37 16 + 2 20 2 12 22 16 24 13 37 39 1 17 17 15 23 1 2 12 3 7 5 1 21 57 16 12 + 21 3 2 4 1 11 3 28 6 57 16 12 21 3 7 11 3 29 5 57 15 13 32 11 2 30 4 + 58 13 14 33 10 2 30 4 58 3 2 1 3 1 16 34 10 2 30 4 58 4 3 2 17 34 9 4 + 29 4 59 1 1 2 1 4 16 35 9 2 30 4 60 1 1 7 15 35 41 4 62 9 12 15 2 20 + 40 4 63 7 12 16 1 23 39 3 64 6 12 39 41 1 66 6 11 39 41 1 83 39 41 1 + 82 7 3 30 126 5 6 3 3 21 127 4 12 13 1 7 125 1 1 9 6 12 4 5 125 15 2 + 22 124 15 5 2 1 17 125 14 10 15 128 9 15 4 2 5 130 11 14 2 1 6 135 2 + 12 3 3 2 2 5 149 3 3 9 149 2 5 7 134 2 20 8 135 2 19 8 156 8 159 4 + 161 3 1795 2 162 3 161 4 159 6 159 5 160 4 158 5 159 5 159 4 160 2 + 163 1 163 3 11 0 + + + + 23124.0 + + + 1.16312056738 + + + 5609.0 + + + 0.231235514352 + + + 1.32293443822 + + + 0.43617564672 0.450821384 0.383017679203 0.121416270225 + 0.108060949513 0.0835031431615 0.0266592761766 0.0835231593044 + 0.000401378553726 + + + 164.0 + + + 1.01829268293 1.70921985816 + + + 0.512195121951 0.439024390244 1.68292682927 1.43902439024 + 0.312056737589 2.41134751773 3.60283687943 0.510638297872 + + + 141.0 + + + 22.0 114.0 0.236879432624 27.0 0.0 9.0 + + + 0.0 0.992907801418 + + + 0.242561840512 + + + 0.128222996516 0.695470383275 0.535888501742 0.0 0.471080139373 + 0.450174216028 0.0243902439024 0.0 0.0 0.550522648084 0.31149825784 + 0.000677506775068 0.0 0.0 0.549128919861 0.186314363144 + + + 0.0 0.0194444444444 0.423529411765 0.883333333333 0.772222222222 + 0.120588235294 0.0 0.0 0.151260504202 0.325396825397 0.52380952381 + 0.92328042328 0.989417989418 0.212885154062 0.0 0.0 0.3 + 0.994444444444 0.973529411765 0.133333333333 0.0166666666667 + 0.0352941176471 0.0 0.0 0.170868347339 0.410052910053 0.50700280112 + 0.227513227513 0.042328042328 0.00280112044818 0.0 0.0 0.0 0.0 + 0.541176470588 0.808333333333 0.333333333333 0.0558823529412 0.0 + 0.0 0.0 0.0 0.100840336134 0.738095238095 0.518518518519 + 0.313725490196 0.0026455026455 0.0 0.0 0.0 0.0 0.0 0.497222222222 + 0.782352941176 0.236111111111 0.0 0.0 0.0 0.0 0.0 0.126984126984 + 0.826330532213 0.386243386243 0.116402116402 + + + 0.529677243863 0.143031959714 0.15513399934 0.093421496182 + 0.253487138757 0.299977366637 0.0670703372554 0.280397456798 + 0.166643719913 0.0737122802204 0.062609481345 0.276673245557 + 0.114755058981 0.0510464220835 + + + + + + + + + 41 1 49 2 80 1 22 8 2 3 14 2 79 2 12 18 2 18 79 3 11 20 1 19 42 2 15 + 2 16 4 11 40 42 39 11 39 43 39 11 3 2 14 1 19 43 39 11 3 2 35 42 20 2 + 17 11 3 1 36 42 20 1 18 10 4 1 36 42 39 10 3 3 35 43 38 10 3 4 34 42 + 39 11 3 2 35 42 39 11 2 3 34 43 39 11 39 43 39 10 40 42 40 10 40 42 + 40 10 40 41 41 10 40 40 42 10 41 39 43 8 42 39 44 7 43 39 43 7 4 3 36 + 39 42 8 6 1 37 39 40 9 43 41 40 8 43 41 39 10 42 41 40 9 41 42 40 10 + 39 43 40 9 41 42 40 9 41 42 40 10 39 43 39 11 39 44 38 11 39 44 39 9 + 20 2 18 44 39 9 40 44 38 11 19 1 19 44 38 11 19 2 19 33 2 8 39 10 41 + 10 1 20 3 8 39 10 75 8 39 10 75 8 38 11 75 8 38 11 75 8 38 11 18 2 55 + 9 37 11 10 13 52 9 36 13 2 30 42 9 35 14 1 33 40 9 34 50 39 9 4 80 38 + 10 3 81 38 10 3 81 39 9 3 81 39 10 2 81 39 10 1 82 39 10 1 82 39 10 1 + 82 39 10 1 82 39 10 1 82 40 9 1 82 40 9 2 80 40 93 32 100 3 1 29 98 + 36 97 35 97 38 93 39 1 1 91 41 92 40 93 2 1 1 3 32 102 30 92 3 1 36 + 91 42 90 42 90 42 90 42 90 43 90 42 89 44 88 43 89 43 89 17 1 1 3 21 + 89 19 3 21 88 21 4 19 89 6 20 1 7 9 89 6 28 10 88 6 29 9 88 5 31 8 87 + 4 33 8 87 5 31 9 + + + + 11748.0 + + + 1.48314606742 + + + 5222.0 + + + 0.13672922252 + + + 1.56088709677 + + + 0.520784058052 0.424040771561 0.269626660766 0.0933153914545 + 0.0952934067237 -0.0248005507514 0.0194125543244 0.0166354912971 + 0.0118039578554 + + + 132.0 + + + 0.484848484848 1.1797752809 + + + 0.121212121212 0.484848484848 0.939393939394 0.393939393939 + 1.75280898876 1.39325842697 0.943820224719 0.584269662921 + + + 89.0 + + + 11.0 46.0 0.189125295508 3.0 5.0 5.0 + + + 0.0 0.988764044944 + + + 0.444501191692 + + + 0.720385674931 0.900826446281 0.185950413223 0.0 0.581267217631 + 0.699724517906 0.0592286501377 0.0 0.745179063361 0.849862258953 + 0.329201101928 0.262187088274 0.0 0.207988980716 0.848484848485 + 0.756258234519 + + + 0.454545454545 0.880681818182 0.840909090909 0.75 0.346590909091 + 0.0340909090909 0.0 0.0 0.540106951872 1.0 1.0 1.0 0.363636363636 + 0.0 0.0 0.0 0.369318181818 0.579545454545 0.613636363636 + 0.590909090909 0.170454545455 0.0 0.0 0.0 0.593582887701 + 0.770053475936 0.807486631016 0.775401069519 0.0695187165775 0.0 + 0.0 0.0 0.846590909091 1.0 1.0 0.960227272727 0.0340909090909 0.0 + 0.0 0.0 0.534759358289 0.620320855615 0.663101604278 0.791443850267 + 0.647058823529 0.598930481283 0.534759358289 0.485294117647 0.0 0.0 + 0.0 0.460227272727 1.0 1.0 1.0 0.447916666667 0.0 0.0 0.0 + 0.374331550802 0.754010695187 0.657754010695 0.866310160428 + 0.735294117647 + + + 0.409851684485 0.194962138503 0.07709744626 0.0811164784405 + 0.0599913876395 0.333267707279 0.0969898361191 0.199697945388 + 0.15876442402 0.0659222277295 0.0142819920691 0.101533764695 + 0.213894028901 0.0397996887228 + + + + + + + + + 14 2 22 6 20 8 19 9 18 9 18 10 2 1 1 1 10 1 1 16 9 11 1 7 8 7 6 6 8 7 + 5 7 7 10 3 6 8 10 4 4 8 8 7 3 13 3 8 3 13 2 9 2 9 3 2 2 9 1 10 3 2 1 + 20 7 20 7 2 1 18 5 3 2 15 7 2 3 15 12 14 13 14 15 12 15 12 7 4 1 2 1 + 11 8 6 2 11 7 7 1 12 7 20 7 4 3 13 7 7 1 12 5 9 1 13 1 25 5 11 1 10 5 + 2 3 5 1 10 5 4 2 4 2 10 5 22 6 21 8 19 8 19 9 2 5 11 11 1 4 12 4 3 7 + 20 6 21 5 22 3 24 2 25 2 23 4 21 7 20 7 20 6 22 5 22 5 23 2 26 1 19 0 + + + + + 1512.0 + + + 0.482142857143 + + + 461.0 + + + 0.698481561822 + + + 0.755609362389 + + + 0.382946771233 0.43277460067 0.0809385064113 0.478724628984 + -0.109367770429 0.0148530591392 0.0159082045556 -0.017790000948 + 0.088538628219 + + + 27.0 + + + 1.74074074074 0.571428571429 + + + 1.18518518519 2.81481481481 2.37037037037 0.148148148148 + 0.714285714286 0.785714285714 0.714285714286 0.0714285714286 + + + 56.0 + + + 6.0 15.0 0.310924369748 10.0 5.0 3.0 + + + 0.0 0.982142857143 + + + 0.304894179894 + + + 0.0 0.464285714286 0.845238095238 0.142857142857 0.561224489796 + 0.65306122449 0.275510204082 0.520408163265 0.571428571429 + 0.224489795918 0.142857142857 0.030612244898 0.448979591837 + 0.030612244898 0.0 0.0 + + + 0.0 0.0 0.0 0.380952380952 0.619047619048 1.0 0.0952380952381 0.0 + 0.0 0.0 0.47619047619 1.0 0.857142857143 0.904761904762 + 0.0952380952381 0.380952380952 0.0357142857143 0.571428571429 + 0.714285714286 0.857142857143 0.285714285714 0.428571428571 + 0.571428571429 0.821428571429 0.809523809524 1.0 0.380952380952 + 0.571428571429 0.0952380952381 0.238095238095 0.47619047619 + 0.0952380952381 0.952380952381 0.666666666667 0.238095238095 + 0.619047619048 0.190476190476 0.333333333333 0.142857142857 0.0 + 0.607142857143 0.178571428571 0.0 0.142857142857 0.0714285714286 + 0.0357142857143 0.0 0.0 0.190476190476 0.809523809524 + 0.142857142857 0.0 0.0 0.0 0.0 0.0 0.142857142857 0.678571428571 + 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.463041579791 0.199492470042 0.0919933490361 0.0578996309411 + 0.201053544494 0.373486180267 0.111359488714 0.154834986956 + 0.072514278305 0.0746256578017 0.115137682645 0.256032643882 + 0.201994285933 0.0820334202889 + + + + + + + + + 16 1 18 2 16 3 17 2 17 2 17 2 16 3 17 3 16 3 16 2 17 2 18 1 18 1 18 1 + 18 2 17 2 17 2 17 2 17 2 17 2 17 2 17 2 17 2 17 4 15 4 15 5 14 5 14 4 + 2 1 14 3 1 1 14 3 1 2 13 2 1 3 13 6 16 2 14 0 + + + + 646.0 + + + 0.558823529412 + + + 91.0 + + + 1.24175824176 + + + 0.328947368421 + + + 0.622710622711 0.58707958708 0.609471436666 1.1331115449 + -0.588588202041 -0.243116465105 -0.0134262793143 0.251952319707 + -0.493321599112 + + + 19.0 + + + 0.210526315789 0.235294117647 + + + 0.421052631579 0.0 0.0 0.210526315789 0.0 0.0 0.117647058824 + 0.823529411765 + + + 34.0 + + + 4.0 7.0 0.0888888888889 3.0 0.0 1.0 + + + 0.0 0.970588235294 + + + 0.140866873065 + + + 0.0 0.0 0.0625 0.666666666667 0.0 0.0 0.0 0.2 0.0 0.0 0.0 0.0 0.45 + 0.355555555556 0.4 0.133333333333 + + + 0.0 0.0 0.0 0.0 0.0 0.25 1.0 0.8 0.0 0.0 0.0 0.0 0.0 0.0 0.25 0.6 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0833333333333 0.533333333333 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.125 0.125 0.0 0.0 0.0 0.0 0.0 0.0 0.583333333333 + 0.75 0.666666666667 0.533333333333 0.666666666667 0.666666666667 + 0.5 0.0 + + + 0.209527357343 0.275558546595 0.142614728715 0.170796765211 + 0.218713122598 0.342732693696 0.190194733401 0.382042215458 + 0.242615023264 0.20129323278 0.183609967718 0.207777924213 + 0.389561165778 0.112107907341 + + + + + + + + + 63 1 183 1 33 1 183 12 4 15 3 1 182 14 3 8 5 3 1 2 182 13 4 8 2 6 1 2 + 183 12 4 19 183 12 2 21 183 35 183 36 182 21 1 13 183 4 1 30 183 35 + 183 35 183 35 183 36 182 36 182 36 183 35 183 35 183 35 183 35 183 35 + 183 35 183 35 183 35 105 1 77 36 104 1 76 37 17 8 79 2 75 39 15 7 80 + 3 75 37 15 8 79 4 75 37 14 10 78 6 73 37 15 9 79 3 74 38 15 10 78 2 + 77 35 14 14 76 2 77 35 13 15 76 2 34 2 41 35 13 15 76 2 20 2 3 11 41 + 35 13 16 1 4 70 2 14 22 41 35 13 17 3 2 69 38 12 1 28 35 12 1 5 17 69 + 38 12 1 28 35 12 23 70 37 12 1 28 35 12 23 70 37 12 1 29 34 11 28 66 + 37 12 1 29 34 11 30 63 38 12 2 29 21 1 11 11 31 62 38 12 2 29 1 9 2 6 + 1 7 7 11 32 61 38 11 5 26 2 30 2 11 32 61 38 11 7 25 1 30 2 11 33 60 + 38 11 21 1 3 3 5 31 1 11 35 58 39 10 33 31 1 11 37 56 39 10 33 31 1 + 10 38 56 38 10 34 31 2 9 38 56 38 10 34 32 1 9 39 55 38 10 34 32 1 9 + 39 55 39 9 34 31 2 9 29 4 6 55 39 9 34 31 2 9 29 6 4 56 38 9 34 32 1 + 10 29 7 2 11 3 42 38 9 34 32 1 12 29 17 4 42 38 9 35 31 1 20 22 16 4 + 42 38 9 35 31 1 20 25 14 5 42 1 3 1 3 28 9 35 31 1 19 26 14 5 39 39 + 10 34 31 1 19 27 12 8 38 38 10 34 31 1 19 27 12 10 36 38 10 35 51 26 + 11 11 36 38 10 35 51 16 2 7 12 11 36 38 10 35 51 16 6 3 12 11 36 39 9 + 35 51 4 1 1 1 8 7 3 11 12 36 39 9 35 51 4 4 7 2 2 3 3 11 12 36 39 9 + 35 51 19 3 3 11 13 35 6 3 30 9 35 47 2 1 21 2 2 12 13 35 39 9 35 45 + 30 11 13 36 39 9 36 44 20 1 9 11 14 35 27 1 11 9 36 50 6 2 5 3 8 11 + 14 5 3 28 38 9 36 51 1 7 4 3 8 11 14 4 8 24 38 9 36 51 4 3 6 1 8 10 + 18 2 9 23 38 9 36 52 21 10 19 1 10 22 38 9 36 52 21 10 6 1 24 21 38 + 10 35 52 21 10 6 1 25 20 27 2 2 3 5 9 35 55 18 10 6 1 20 25 10 4 5 11 + 1 5 3 9 35 56 16 10 36 17 3 33 3 9 36 55 16 10 36 17 2 34 3 9 36 56 + 15 10 19 1 17 16 2 34 3 9 36 57 14 10 38 15 1 36 2 9 36 59 12 10 39 + 51 2 9 36 62 8 11 35 1 4 50 2 9 36 64 6 10 35 1 5 48 5 8 36 64 6 10 + 41 49 4 8 36 65 6 9 42 48 3 9 4 5 7 1 3 1 16 64 5 10 42 49 3 7 6 19 + 14 62 6 10 41 50 3 7 6 19 14 65 2 10 7 4 11 1 18 51 3 7 7 19 13 77 7 + 3 12 1 18 51 4 6 6 25 8 77 5 4 13 1 2 5 3 1 7 51 5 5 6 25 9 76 2 14 9 + 11 4 52 4 6 6 27 7 77 1 15 4 2 2 6 2 1 6 52 3 7 6 28 6 76 3 17 1 2 3 + 5 9 53 2 7 6 30 3 77 4 18 5 1 11 54 2 9 2 32 2 80 9 1 2 8 4 2 10 55 2 + 43 2 82 12 14 4 1 3 55 2 44 1 86 1 5 3 13 2 61 2 44 1 92 4 12 2 61 2 + 153 2 61 2 154 1 61 2 154 2 2 2 56 2 154 1 3 1 58 1 154 6 57 1 153 6 + 58 2 156 2 58 2 216 2 216 2 216 2 216 2 216 2 216 2 217 1 217 1 217 1 + 216 1 218 1 217 1 217 2 216 2 216 2 216 2 217 1 217 1 217 1 217 1 217 + 1 217 1 217 2 216 2 216 2 216 2 217 1 217 1 217 2 216 2 216 2 216 2 + 216 2 216 2 216 2 216 3 215 3 215 3 215 3 215 3 216 2 216 3 215 3 215 + 3 215 3 215 3 215 3 215 3 216 2 217 1 217 1 217 1 + + + + 34444.0 + + + 1.37974683544 + + + 7143.0 + + + 0.218395632087 + + + 1.23529411765 + + + 0.452564497097 0.35838659023 0.621018180029 0.0835170602387 + 0.0607732417032 0.122472370316 -0.000440267357905 0.0323545433855 + 0.0026879367253 + + + 218.0 + + + 0.697247706422 2.06962025316 + + + 0.403669724771 0.880733944954 0.990825688073 0.45871559633 + 1.26582278481 4.30379746835 2.60759493671 0.0 + + + 158.0 + + + 28.0 102.0 0.274440518257 18.0 0.0 8.0 + + + 0.0 0.993670886076 + + + 0.207380095227 + + + 0.419278252612 0.581944444444 0.196106362773 0.0 0.272261072261 + 0.474545454545 0.037296037296 0.0 0.0 0.228703703704 0.287749287749 + 0.0 0.0839160839161 0.65 0.0424242424242 0.0368181818182 + + + 0.0 0.0037037037037 0.675925925926 0.955555555556 0.479532163743 + 0.0 0.0 0.0 0.789473684211 0.881481481481 0.346296296296 0.35 + 0.323586744639 0.00185185185185 0.0 0.0 0.327485380117 + 0.468518518519 0.268518518519 0.0037037037037 0.0 0.0 0.0 0.0 0.0 + 0.291071428571 0.921428571429 0.680357142857 0.15037593985 0.0 0.0 + 0.0 0.0 0.0 0.12962962963 0.572222222222 0.479532163743 + 0.00740740740741 0.0 0.0 0.0 0.0 0.0 0.212962962963 0.64522417154 + 0.0462962962963 0.0 0.0 0.0 0.172222222222 0.712962962963 + 0.616666666667 0.00584795321637 0.0 0.0 0.0 0.0 0.155357142857 + 0.660714285714 0.610714285714 0.105263157895 0.0571428571429 + 0.0571428571429 0.0875 + + + 0.566540231832 0.151895005223 0.0752066556113 0.0307358626133 + 0.279172910909 0.419974735986 0.0440320067355 0.149097849747 + 0.0699211061972 0.0134167288899 0.00656445966174 0.472901293536 + 0.203534548308 0.0142624655155 + + + + + + + + + 72 3 77 1 78 2 77 2 38 1 30 5 3 2 38 1 3 3 6 5 5 13 3 2 38 2 1 6 2 26 + 2 2 38 9 1 26 3 2 38 36 3 2 38 36 3 2 38 36 3 2 38 41 39 40 39 40 38 + 41 39 40 39 40 39 40 39 40 39 40 39 40 39 40 39 38 41 17 2 19 41 17 2 + 18 42 19 2 14 45 19 1 13 46 4 1 29 45 40 39 40 39 40 39 40 39 40 39 + 40 39 40 40 39 40 39 40 39 40 39 40 39 40 39 39 40 5 1 31 42 5 20 1 1 + 4 48 5 74 5 74 5 74 6 74 5 59 1 7 2 5 5 37 27 1 6 3 5 37 35 2 5 36 36 + 2 5 36 36 2 4 37 36 2 4 37 36 1 5 37 42 38 35 3 4 37 34 4 4 40 31 4 3 + 40 32 47 33 3 2 40 33 5 2 39 35 2 3 39 35 1 4 38 36 1 5 37 36 1 5 37 + 36 2 4 37 36 2 4 38 36 1 4 38 36 1 4 38 41 38 42 37 42 37 42 37 42 37 + 42 37 42 37 42 38 41 38 41 38 41 38 42 37 42 37 42 37 42 37 42 10 1 2 + 1 11 4 8 43 1 16 3 12 5 42 1 17 1 14 4 41 2 32 4 42 1 33 2 43 1 33 3 + 156 1 78 2 77 2 78 1 78 1 78 1 36 0 + + + + 7821.0 + + + 0.79797979798 + + + 3419.0 + + + 0.152383737935 + + + 0.73093906388 + + + 0.498391342498 0.467498552507 0.122923792528 0.156000195833 + -0.0874176049773 0.00106117354903 0.000461258761734 0.0017481226556 + 0.000212019201494 + + + 79.0 + + + 0.46835443038 0.555555555556 + + + 0.151898734177 0.20253164557 0.759493670886 0.708860759494 + 0.606060606061 0.282828282828 0.848484848485 0.40404040404 + + + 99.0 + + + 5.0 30.0 0.182432432432 8.0 7.0 2.0 + + + 0.0 0.989898989899 + + + 0.437156373865 + + + 0.0 0.212631578947 0.865263157895 0.408421052632 0.16875 0.34 1.0 + 0.522 0.758333333333 0.988 0.072 0.12 0.620833333333 0.802 0.096 + 0.0 + + + 0.0 0.0 0.0 0.37962962963 0.740740740741 0.692307692308 + 0.518518518519 0.0854700854701 0.0 0.0 0.0 0.5 1.0 1.0 1.0 + 0.0615384615385 0.0 0.0 0.0 0.458333333333 1.0 1.0 1.0 + 0.107692307692 0.266666666667 0.408333333333 0.3 0.633333333333 1.0 + 1.0 1.0 0.0538461538462 0.508333333333 1.0 0.992307692308 1.0 + 0.116666666667 0.169230769231 0.266666666667 0.215384615385 + 0.541666666667 0.983333333333 0.961538461538 1.0 0.0 0.0 0.0 0.0 + 0.616666666667 1.0 1.0 0.991666666667 0.00833333333333 0.0 0.0 0.0 + 0.3 0.566666666667 0.523076923077 0.7 0.258333333333 0.123076923077 + 0.0 0.0 + + + 0.419214033464 0.170876957346 0.0095607242114 0.00647503326865 + 0.00408597583551 0.351411391296 0.0593446107645 0.026639295272 + 0.028532429686 0.0107379972247 0.129159952896 0.251256733865 + 0.0872288435168 0.0412175088564 + + + + + + + + + 40 1 42 2 41 3 41 3 41 3 41 3 7 7 27 3 6 16 19 3 6 16 18 3 7 18 2 12 + 1 5 5 20 1 18 6 38 6 38 6 38 5 38 7 37 7 37 7 37 7 37 7 37 7 37 6 39 + 3 43 1 43 2 42 2 42 2 42 3 41 4 40 3 42 2 41 4 22 1 14 7 3 5 32 4 2 6 + 32 4 3 5 32 4 5 4 31 4 5 4 31 4 2 3 1 2 31 5 2 1 36 5 39 5 21 3 15 5 + 21 1 16 6 38 6 37 7 37 7 37 7 7 1 29 7 6 3 28 7 6 2 30 6 38 6 3 4 31 + 6 2 12 23 7 2 17 13 2 2 9 1 32 2 43 1 43 1 43 1 5 0 + + + + 2508.0 + + + 0.771929824561 + + + 1696.0 + + + 0.162146226415 + + + 1.0202020202 + + + 0.510695480474 0.518436236523 0.0763885590905 0.0992871741749 + 0.00457625224887 -0.000814791923704 0.000469009171805 + -0.00153115010941 0.000432983782398 + + + 44.0 + + + 0.590909090909 0.438596491228 + + + 1.27272727273 0.181818181818 0.363636363636 0.545454545455 + 0.421052631579 0.0 0.771929824561 0.561403508772 + + + 57.0 + + + 5.0 34.0 0.226600985222 2.0 3.0 4.0 + + + 0.0 0.982456140351 + + + 0.676236044657 + + + 0.415584415584 0.824675324675 0.558441558442 0.412121212121 + 0.454545454545 1.0 0.987012987013 0.624242424242 0.344155844156 1.0 + 0.967532467532 0.733333333333 0.409090909091 0.75974025974 + 0.857142857143 0.50303030303 + + + 0.0285714285714 0.428571428571 0.428571428571 0.8 0.457142857143 + 0.4 0.4 0.225 0.142857142857 1.0 1.0 1.0 0.619047619048 + 0.714285714286 0.880952380952 0.166666666667 0.0 1.0 1.0 1.0 1.0 + 0.942857142857 0.971428571429 0.25 0.0 0.833333333333 1.0 1.0 1.0 + 1.0 1.0 0.354166666667 0.0 0.657142857143 1.0 1.0 0.971428571429 + 0.885714285714 1.0 0.5 0.0 0.714285714286 1.0 1.0 1.0 1.0 1.0 0.5 + 0.0 0.714285714286 1.0 1.0 1.0 1.0 1.0 0.475 0.428571428571 + 0.47619047619 0.333333333333 0.785714285714 0.785714285714 + 0.690476190476 0.380952380952 0.270833333333 + + + 0.477475305095 0.0335106547469 0.00746543346984 0.011878253438 + 0.0701519167188 0.0642993867955 0.0560986793877 0.0244911884522 + 0.0297567355262 0.0156125955907 0.195414268457 0.013483471629 + 0.120868441869 0.0343661897504 + + + + + + + + + 39 14 90 18 5 11 74 21 2 14 2 2 68 41 69 40 69 41 68 41 68 41 68 41 + 68 41 68 41 68 40 69 40 69 40 68 41 69 40 69 40 69 40 69 40 69 40 69 + 40 69 40 69 40 69 40 69 40 69 40 69 40 70 39 70 38 71 39 70 39 70 39 + 70 7 2 30 70 39 69 39 70 19 2 18 69 20 2 9 2 7 38 3 28 42 13 1 22 94 + 5 5 5 23 1 62 1 17 5 105 4 105 4 105 3 39 20 1 4 41 4 38 27 41 3 37 + 29 39 4 37 29 40 3 38 29 39 4 36 31 38 3 37 31 38 2 39 29 39 2 41 26 + 39 3 41 27 38 3 40 28 40 1 40 27 42 1 39 27 42 2 39 26 42 2 38 29 39 + 2 38 30 39 2 5 1 33 29 39 3 4 1 33 29 39 3 3 2 33 29 39 3 4 1 33 29 + 38 4 38 29 38 4 38 29 38 4 38 29 38 4 38 28 39 4 39 27 39 3 39 28 39 + 3 39 27 40 4 38 27 40 4 39 26 40 3 40 26 40 5 38 26 40 4 39 26 41 2 + 40 27 40 3 39 27 39 4 39 27 40 3 39 27 40 3 39 27 40 3 39 27 40 3 6 4 + 1 3 3 3 1 4 15 26 14 1 1 9 15 3 6 20 14 26 6 22 12 4 6 21 12 25 7 22 + 4 1 7 3 7 22 11 25 7 23 11 3 6 24 10 25 6 27 8 3 6 27 7 26 5 27 7 5 5 + 28 5 27 5 27 7 5 5 28 6 26 5 28 6 5 5 29 6 26 4 29 6 4 5 30 5 27 2 30 + 6 4 5 30 5 59 6 4 5 30 5 59 6 5 3 31 5 61 4 39 5 60 5 40 4 60 5 41 2 + 61 5 42 1 61 5 42 1 61 5 104 5 104 5 104 5 104 6 103 6 104 5 104 4 + 105 4 107 1 107 3 1 0 + + + + 11881.0 + + + 1.0 + + + 5388.0 + + + 0.131031922791 + + + 1.03552206674 + + + 0.505442478484 0.462095122219 0.172855716256 0.105181758494 + 0.00846342503181 0.000918509643109 0.00313168962417 0.0271618786036 + -0.00794702370462 + + + 109.0 + + + 0.48623853211 0.926605504587 + + + 0.403669724771 0.660550458716 0.440366972477 0.403669724771 + 0.110091743119 0.770642201835 1.1376146789 1.6880733945 + + + 109.0 + + + 6.0 40.0 0.190930787589 3.0 3.0 4.0 + + + 0.0 0.990825688073 + + + 0.453497180372 + + + 0.0 0.570644718793 0.930041152263 0.0992063492063 0.733882030178 + 0.658436213992 0.496570644719 0.157407407407 0.703703703704 + 0.683127572016 0.481481481481 0.0793650793651 0.0 0.537037037037 + 0.951058201058 0.224489795918 + + + 0.0 0.0 0.147928994083 0.923076923077 0.846153846154 0.863905325444 + 0.39010989011 0.0 0.0 0.0 0.148351648352 1.0 1.0 1.0 + 0.0204081632653 0.0 0.443786982249 0.467032967033 0.514792899408 + 0.93956043956 0.994505494505 1.0 0.428571428571 0.00549450549451 + 0.983516483516 1.0 0.978021978022 0.224489795918 0.0102040816327 + 0.0549450549451 0.168367346939 0.0357142857143 0.895604395604 1.0 + 0.978021978022 0.260204081633 0.015306122449 0.032967032967 + 0.015306122449 0.0 0.414201183432 0.461538461538 0.526627218935 + 0.989010989011 0.950549450549 1.0 0.313186813187 0.0 0.0 0.0 + 0.153846153846 1.0 1.0 1.0 0.0204081632653 0.0 0.0 0.0 + 0.0934065934066 0.841836734694 0.913265306122 0.89010989011 + 0.551020408163 0.326530612245 + + + 0.496785846684 0.0574734366049 0.0601109881315 0.0916629795927 + 0.0800680524703 0.135466526225 0.00846864383456 0.120375907484 + 0.243511485633 0.0163163200813 0.299554998539 0.100398617316 + 0.0560814806868 0.0230540257442 + + + + + + + + + 2 2 31 2 3 18 15 2 4 35 4 35 3 37 2 36 3 37 2 37 2 37 3 35 4 35 3 36 + 3 36 3 36 3 37 2 37 3 35 4 36 3 36 3 36 3 36 3 36 3 34 5 34 4 37 3 36 + 2 37 2 37 2 37 2 37 2 37 2 36 4 36 3 32 1 2 4 35 4 35 4 35 5 34 5 34 + 5 34 5 34 4 35 3 36 3 36 4 5 24 6 5 3 27 4 6 2 27 5 4 3 28 4 4 4 27 3 + 5 4 28 2 6 2 30 2 3 4 30 1 6 3 29 1 6 2 30 2 36 3 36 3 36 3 37 2 37 2 + 36 3 37 3 37 2 36 2 38 1 38 1 37 2 38 2 37 2 37 2 37 2 37 2 37 2 37 2 + 37 2 37 2 37 2 37 2 37 2 37 3 37 2 37 2 37 2 36 3 37 2 37 2 37 2 38 1 + + + + + 3393.0 + + + 0.448275862069 + + + 1657.0 + + + 0.196741098371 + + + 1.10264900662 + + + 0.492646825271 0.29062048252 0.0732779857308 0.152958709207 + 0.0221080430794 0.00014843435293 0.0205031640056 0.00692021546218 + 0.0508903060942 + + + 39.0 + + + 0.692307692308 0.149425287356 + + + 1.02564102564 0.0 0.0 1.74358974359 0.0919540229885 0.0459770114943 + 0.459770114943 0.0 + + + 87.0 + + + 5.0 21.0 0.158469945355 1.0 2.0 7.0 + + + 0.0 0.988505747126 + + + 0.48835838491 + + + 0.910052910053 0.909090909091 0.207070707071 0.0 0.952380952381 1.0 + 0.0454545454545 0.0 0.904761904762 1.0 0.0454545454545 0.0 0.7 + 0.727272727273 0.281818181818 0.204545454545 + + + 0.85 0.863636363636 0.909090909091 0.681818181818 0.5 0.0 0.0 0.0 + 0.9 1.0 1.0 1.0 0.345454545455 0.0 0.0 0.0 0.9 1.0 1.0 1.0 + 0.0909090909091 0.0 0.0 0.0 0.9 1.0 1.0 1.0 0.0909090909091 0.0 0.0 + 0.0 0.8 1.0 1.0 1.0 0.0909090909091 0.0 0.0 0.0 0.8 1.0 1.0 1.0 + 0.0909090909091 0.0 0.0 0.0 0.8 1.0 1.0 0.981818181818 + 0.272727272727 0.0 0.0 0.0 0.48 0.509090909091 0.509090909091 + 0.418181818182 0.4 0.454545454545 0.4 0.418181818182 + + + 0.783475211222 0.0345303891532 0.058613103234 0.0217562168205 + 0.948231578999 0.0656123893406 0.0240873156121 0.110742887854 + 0.0146068713228 0.024330861581 0.788474791124 0.107368752242 + 0.0369296382604 0.0245710067892 + + + + + + + + + 3 1 11 2 11 2 10 4 9 4 9 4 9 3 10 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 8 + 6 8 5 8 5 8 4 9 4 9 5 8 5 8 4 9 5 7 6 8 5 8 5 8 5 9 4 9 3 10 3 10 4 9 + 5 7 5 8 6 7 6 7 6 7 6 7 6 7 6 7 6 7 7 7 6 7 6 6 6 8 5 8 5 8 7 5 7 7 6 + 7 7 6 7 7 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 6 7 6 7 6 7 5 8 6 8 5 8 + 5 8 5 7 6 7 6 7 6 8 5 8 5 8 6 7 6 7 6 7 6 7 5 8 7 6 6 6 7 7 6 8 3 10 + 3 10 4 9 6 7 6 7 6 7 6 8 5 8 5 8 5 8 5 8 5 8 5 8 6 7 6 8 5 8 5 8 5 8 + 5 8 5 9 4 9 4 9 4 9 4 9 4 9 4 10 4 9 4 9 4 + + + + 1469.0 + + + 0.115044247788 + + + 564.0 + + + 0.512411347518 + + + 1.15060175648 + + + 0.44311465721 0.516891464032 0.0128646374563 1.63894045346 + 0.116610582746 0.000434806144022 0.0211110860806 0.00386633120566 + -0.0890775440928 + + + 13.0 + + + 1.46153846154 0.0 + + + 1.23076923077 1.84615384615 1.84615384615 0.923076923077 0.0 0.0 + 0.0 0.0 + + + 113.0 + + + 2.0 7.0 0.176470588235 0.0 6.0 1.0 + + + 0.0 0.991150442478 + + + 0.383934649421 + + + 0.642857142857 0.440476190476 0.0 0.0 0.72619047619 0.97619047619 + 0.845238095238 0.0804597701149 0.0 0.428571428571 0.916666666667 + 0.67816091954 0.0 0.0 0.0803571428571 0.612068965517 + + + 0.0 0.142857142857 0.0 0.0 0.0 0.0 0.0 0.0 0.857142857143 1.0 + 0.821428571429 0.5 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.785714285714 + 0.285714285714 0.0 0.0 0.357142857143 0.821428571429 0.928571428571 + 1.0 1.0 1.0 0.25 0.0 0.0 0.0 0.285714285714 0.892857142857 1.0 1.0 + 1.0 0.233333333333 0.0 0.0 0.0 0.214285714286 0.5 1.0 + 0.857142857143 0.8 0.0 0.0 0.0 0.0 0.0 0.321428571429 + 0.785714285714 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0357142857143 0.6 + + + 0.43533290087 0.258368776267 0.0224411420065 0.0101031201393 + 0.34106773569 0.395788172832 0.222319707347 0.0251382663141 + 0.0315732977458 0.0208716962021 0.402887225544 0.326448774065 + 0.370686799705 0.195637261167 + + + + + + + + + 59 1 131 1 35 3 93 3 31 7 91 4 31 5 93 1 33 4 94 2 30 6 93 1 35 3 128 + 4 128 3 129 3 129 3 95 27 7 3 95 31 3 3 95 37 95 37 95 37 95 37 95 37 + 96 37 95 36 96 37 95 37 95 37 95 37 95 37 95 37 95 37 95 37 96 36 96 + 36 95 37 96 36 96 36 96 36 96 36 96 36 96 36 96 36 96 36 96 36 97 35 + 97 35 28 1 68 35 28 1 68 35 28 1 68 35 28 1 68 35 28 1 68 36 27 1 40 + 2 26 37 3 2 21 2 36 9 1 4 17 52 10 3 36 11 3 9 8 65 36 21 2 73 37 20 + 2 73 37 21 1 73 37 33 25 37 7 1 29 17 4 11 29 34 7 1 29 17 3 12 32 31 + 7 1 29 16 4 12 32 31 7 1 29 32 32 32 6 1 29 33 31 32 6 2 28 33 31 33 + 5 2 28 35 28 36 3 3 27 35 27 37 1 6 25 37 27 35 3 4 26 36 28 36 2 4 + 25 37 27 36 2 6 23 39 26 36 1 7 22 40 26 36 2 6 21 41 27 35 2 7 22 3 + 1 35 27 34 3 4 30 32 30 33 4 3 30 32 29 34 5 2 30 32 29 34 5 2 30 32 + 30 33 5 2 30 12 1 4 1 14 30 4 3 10 3 13 5 2 30 7 8 1 1 15 30 4 2 2 4 + 5 3 4 3 6 4 4 29 26 2 4 30 5 1 19 3 5 4 7 5 3 18 6 8 19 29 33 4 21 2 + 8 2 9 6 18 29 32 5 44 1 1 1 1 1 17 30 31 5 21 4 4 2 35 29 32 5 21 3 5 + 1 36 29 32 5 66 30 31 5 66 30 32 4 66 30 32 4 66 30 32 4 38 2 27 29 + 32 4 38 2 4 1 22 29 32 4 31 1 3 6 26 29 32 4 33 9 26 28 32 4 34 9 25 + 28 6 1 25 4 36 12 20 28 5 3 3 1 3 1 16 4 36 18 14 28 4 5 2 1 2 3 15 4 + 37 23 8 28 4 10 3 1 3 5 5 5 37 26 5 29 3 11 2 3 1 6 4 5 37 28 3 29 2 + 14 1 10 3 5 37 28 3 29 2 14 1 10 3 6 36 29 2 29 2 24 4 6 36 29 2 29 1 + 25 4 6 36 29 2 29 1 25 4 6 3 4 29 29 2 29 1 26 3 5 5 1 1 1 29 29 2 29 + 2 26 2 5 38 29 1 29 2 26 2 5 38 29 2 28 2 26 2 5 38 30 1 29 1 27 1 5 + 38 60 1 33 38 60 1 33 38 60 1 33 38 58 3 33 39 57 3 33 39 58 2 34 38 + 59 1 34 39 93 39 92 40 92 40 93 39 93 39 93 39 93 6 1 32 91 1 1 6 3 9 + 6 15 92 7 4 5 10 5 1 9 91 7 3 3 18 11 90 6 25 12 89 6 27 10 90 4 30 7 + 91 3 32 5 92 3 30 9 90 3 32 7 90 3 32 7 89 4 31 8 90 3 32 7 126 6 92 + 1 33 6 92 2 32 7 126 5 128 4 129 2 130 3 129 3 131 1 87 0 + + + + 18480.0 + + + 0.942857142857 + + + 6240.0 + + + 0.178846153846 + + + 0.786515001649 + + + 0.488126345665 0.496714167128 0.215039006378 0.136562199964 + -0.0798432370985 0.00540656578048 -0.0124246270119 0.029530647545 + -0.00613821102841 + + + 132.0 + + + 1.06060606061 1.45714285714 + + + 0.909090909091 1.9696969697 0.636363636364 0.727272727273 + 0.228571428571 1.54285714286 3.31428571429 0.742857142857 + + + 140.0 + + + 20.0 111.0 0.216397849462 16.0 6.0 14.0 + + + 0.0 0.992857142857 + + + 0.337662337662 + + + 0.0 0.0675324675325 0.754112554113 0.444155844156 0.116017316017 + 0.623376623377 0.612121212121 0.220779220779 0.683982683983 + 0.574025974026 0.0969696969697 0.0017316017316 0.000865800865801 + 0.58354978355 0.615584415584 0.00779220779221 + + + 0.0 0.0 0.0 0.194444444444 0.602941176471 0.840277777778 + 0.805147058824 0.131944444444 0.0 0.0 0.0103806228374 + 0.062091503268 0.550173010381 1.0 0.885813148789 0.0 0.0 0.0 + 0.216911764706 0.989583333333 0.838235294118 0.399305555556 + 0.536764705882 0.378472222222 0.16955017301 0.277777777778 + 0.297577854671 0.947712418301 0.975778546713 0.267973856209 0.0 0.0 + 0.352941176471 1.0 1.0 0.138888888889 0.110294117647 0.163194444444 + 0.0 0.0 0.415224913495 0.934640522876 0.961937716263 0.238562091503 + 0.100346020761 0.0196078431373 0.00692041522491 0.0 + 0.00367647058824 0.0 0.246323529412 1.0 0.955882352941 + 0.322916666667 0.0330882352941 0.0 0.0 0.0 0.173010380623 + 0.87908496732 0.83044982699 0.385620915033 0.0 0.0 + + + 0.411943156673 0.137389334454 0.0678309217466 0.096191321414 + 0.0182182067283 0.277958449296 0.0132870949015 0.126082747129 + 0.204728591298 0.0600783566179 0.112066081144 0.165953015643 + 0.0383316591864 0.0188828234496 + + + + + + + + + 5 1 41 20 2 1 20 31 12 35 8 36 7 36 7 36 7 36 7 36 7 36 7 36 7 36 7 + 37 7 36 6 36 7 36 8 35 8 35 8 36 5 40 3 40 4 38 5 37 6 36 7 37 6 37 6 + 37 7 37 7 35 8 34 9 35 8 35 8 36 7 36 7 36 7 36 8 35 8 35 8 35 8 35 8 + 35 8 35 8 35 9 34 9 34 9 1 11 1 4 17 9 1 24 9 9 1 25 3 40 3 41 1 42 1 + 42 1 42 1 42 1 42 2 41 2 42 1 42 1 41 2 42 1 42 1 41 2 41 2 42 2 41 2 + 41 2 41 2 41 2 41 2 40 3 41 2 41 3 40 2 10 4 27 2 6 14 22 2 4 24 13 2 + 4 31 6 2 4 27 1 6 3 2 5 26 1 11 5 17 2 19 5 16 4 18 5 16 4 18 5 17 3 + 18 5 39 4 41 3 39 3 40 3 39 3 41 2 41 3 40 4 38 5 38 5 38 5 38 5 38 6 + 4 1 32 6 37 6 37 6 37 6 37 6 37 7 37 6 37 6 37 6 37 6 37 6 37 6 6 1 + 30 7 4 5 27 6 5 6 18 1 7 7 35 8 36 7 7 4 25 7 7 4 25 7 7 3 26 7 36 7 + 7 2 27 8 3 5 5 1 21 8 3 9 1 1 21 8 3 18 14 8 3 25 7 8 3 28 5 8 2 29 4 + 8 2 29 4 8 2 30 3 8 2 31 2 9 1 31 2 9 1 32 1 9 2 41 2 41 1 34 0 + + + + 5676.0 + + + 0.325757575758 + + + 3339.0 + + + 0.164420485175 + + + 1.02203508772 + + + 0.525185755644 0.468474585571 0.0360560312756 0.457986066006 + -0.000579826778483 -0.000363202628934 0.000659056178271 + 0.00162371598598 -0.00973113462548 + + + 43.0 + + + 1.76744186047 0.287878787879 + + + 1.39534883721 2.04651162791 1.02325581395 2.32558139535 + 0.030303030303 0.121212121212 0.363636363636 0.636363636364 + + + 132.0 + + + 4.0 36.0 0.219879518072 2.0 6.0 1.0 + + + 0.0 0.992424242424 + + + 0.588266384778 + + + 0.545454545455 0.121212121212 0.669696969697 0.415151515152 + 0.969696969697 0.366391184573 0.70523415978 0.534435261708 + 0.95041322314 0.382920110193 0.69696969697 0.650137741047 + 0.727272727273 0.468319559229 0.545454545455 0.608815426997 + + + 0.175 0.117647058824 0.0 0.0 0.4375 0.682352941176 0.175 0.0 0.95 + 0.941176470588 0.5 0.0 0.55 0.988235294118 0.975 0.529411764706 + 0.9375 1.0 0.75 0.0 0.489583333333 1.0 0.8125 0.147058823529 0.9375 + 1.0 0.7625 0.0 0.3125 0.964705882353 1.0 0.247058823529 0.9125 1.0 + 0.7625 0.0 0.4125 1.0 1.0 0.294117647059 0.885416666667 1.0 0.8125 + 0.0 0.34375 1.0 1.0 0.343137254902 0.85 1.0 0.9375 0.258823529412 + 0.3875 1.0 0.9875 0.388235294118 0.416666666667 0.696078431373 + 0.729166666667 0.0294117647059 0.260416666667 0.558823529412 0.625 + 0.480392156863 + + + 0.342864918552 0.261363832987 0.0161901541344 0.00983754010574 + 0.118362779137 0.506754599198 0.138933931517 0.058883703295 + 0.0261677507632 0.0101111370578 0.19671745154 0.302778313073 + 0.323292548405 0.0560996815787 + + + + + + + + + 73 5 4 3 4 13 212 15 5 15 206 18 4 10 3 4 205 18 3 19 204 19 2 19 205 + 1 1 15 4 18 211 9 1 1 3 18 213 12 1 16 214 30 212 35 210 34 203 4 2 + 35 203 41 203 41 203 41 203 41 204 40 204 40 204 40 204 40 204 40 204 + 40 204 40 204 40 204 40 205 39 205 39 205 39 18 2 185 39 17 4 184 36 + 1 1 18 5 183 36 19 7 181 39 17 8 180 39 14 12 179 40 13 16 175 40 13 + 12 179 40 13 12 179 39 14 12 4 2 175 26 1 4 2 4 13 15 2 2 139 1 35 36 + 14 15 2 4 136 2 35 36 13 16 2 4 136 3 34 36 13 16 2 2 1 2 135 6 31 34 + 15 15 5 5 134 27 9 35 14 14 5 6 134 40 3 21 3 7 10 15 4 8 133 39 33 2 + 10 16 3 9 132 38 46 1 1 15 4 8 131 38 32 4 10 30 130 38 32 4 10 31 + 129 38 32 4 10 32 128 38 32 4 10 33 127 38 32 4 9 35 126 39 31 4 9 36 + 125 39 32 2 10 37 124 39 44 38 123 39 44 39 122 39 45 39 121 39 52 32 + 121 39 52 32 122 38 52 2 2 4 1 15 3 5 122 38 52 8 2 13 4 5 122 38 52 + 8 3 12 4 4 123 38 53 7 3 13 4 1 125 38 53 7 3 13 130 33 60 6 1 15 19 + 3 107 31 62 22 20 3 106 38 55 22 20 3 106 38 55 21 21 5 104 39 54 27 + 15 3 1 2 103 39 54 21 3 3 15 1 2 5 102 38 54 17 8 1 15 9 102 38 55 3 + 2 11 23 10 102 38 56 1 5 9 22 12 101 38 56 2 5 6 24 12 100 39 57 2 5 + 5 23 14 99 39 58 11 3 1 18 13 101 39 57 13 1 3 4 2 11 12 102 39 55 15 + 1 3 4 2 11 13 101 39 54 15 1 5 3 2 11 13 70 1 29 40 56 13 1 6 1 3 11 + 13 70 1 30 39 56 13 2 8 12 13 5 5 59 2 28 42 54 5 3 5 3 8 10 16 3 10 + 55 3 26 43 55 23 10 29 55 72 56 22 10 31 53 72 57 20 12 31 52 72 58 + 19 11 33 51 38 1 5 1 27 60 17 10 34 51 37 22 13 61 15 11 35 50 37 32 + 3 62 14 11 36 49 36 33 3 63 12 11 39 48 17 1 17 34 2 63 5 1 7 10 39 + 48 35 35 2 70 4 11 32 2 6 47 35 35 2 70 4 11 32 1 6 47 37 104 6 10 40 + 14 2 31 37 102 8 10 39 15 3 29 40 31 3 67 6 11 39 15 5 26 41 32 1 70 + 4 10 40 14 6 27 39 33 2 69 4 10 42 10 10 25 39 106 1 12 5 4 31 11 10 + 25 39 117 6 7 28 12 9 27 38 119 5 8 26 13 8 28 37 121 1 12 20 2 1 14 + 9 27 37 121 6 8 19 1 3 11 13 25 37 121 8 7 13 6 1 14 13 24 36 120 10 + 3 1 4 12 6 1 13 14 24 36 124 1 1 4 2 2 5 11 6 1 13 14 24 36 127 2 2 3 + 6 10 20 13 25 36 133 1 6 9 20 12 27 36 132 3 6 8 20 4 1 7 27 36 132 4 + 7 1 1 3 21 15 1 1 22 36 143 1 1 2 1 3 4 1 12 19 3 2 16 36 142 3 1 1 2 + 3 1 3 12 26 14 36 150 1 2 3 12 27 13 36 148 2 4 2 12 29 11 37 146 4 2 + 2 12 31 11 36 146 8 12 31 10 37 140 2 3 8 13 32 9 37 140 2 3 6 1 1 13 + 33 8 37 149 2 15 35 6 37 149 1 16 5 1 12 1 16 6 37 145 5 15 8 1 8 3 + 17 5 37 145 5 15 2 7 29 4 37 145 1 19 1 1 2 2 1 1 30 4 37 145 1 18 8 + 2 28 6 36 144 2 19 7 1 30 5 36 144 2 21 1 1 34 5 36 144 2 23 35 4 4 + 26 6 167 37 4 3 28 5 167 28 6 3 4 3 29 5 166 28 46 4 166 2 3 24 46 4 + 165 2 6 21 46 3 175 20 46 2 176 19 48 1 177 22 44 2 178 21 43 2 181 + 11 1 7 43 1 182 9 3 7 42 1 183 8 228 4 4 8 227 6 3 10 4 2 216 10 3 7 + 1 7 216 10 3 17 220 24 212 3 4 24 214 30 216 28 217 27 217 26 225 19 + 224 20 227 17 228 16 230 2 3 8 237 7 238 6 228 3 5 7 230 14 230 14 + 231 14 232 11 234 10 235 9 236 7 236 8 239 5 239 4 240 4 242 1 9 0 + + + + 40992.0 + + + 1.45238095238 + + + 8889.0 + + + 0.208009899876 + + + 1.16017316017 + + + 0.446848118102 0.459558102829 0.573944682644 0.158214324646 + 0.106036634968 0.151110064205 0.0344290402624 0.174632557788 + -0.00297104341713 + + + 244.0 + + + 1.04918032787 2.02380952381 + + + 0.229508196721 0.868852459016 1.40983606557 1.68852459016 1.0 + 2.7619047619 3.64285714286 0.690476190476 + + + 168.0 + + + 25.0 134.0 0.28118609407 34.0 6.0 7.0 + + + 0.0 0.994047619048 + + + 0.216847189696 + + + 0.00468384074941 0.476971116315 0.619828259173 0.0179547228728 + 0.616705698673 0.241608118657 0.0222482435597 0.0 0.0624512099922 + 0.461358313817 0.227166276347 0.0 0.0 0.0160031225605 + 0.422326307572 0.28024980484 + + + 0.0 0.0 0.0 0.1 0.928571428571 0.893650793651 0.015873015873 0.0 + 0.0 0.0184331797235 0.89400921659 0.886328725038 0.365591397849 + 0.310291858679 0.0552995391705 0.0 0.685714285714 0.774603174603 + 0.4 0.380952380952 0.0904761904762 0.0 0.0 0.0 0.488479262673 + 0.52534562212 0.195084485407 0.0 0.0 0.0 0.0 0.0 0.0 0.253968253968 + 0.825396825397 0.607936507937 0.2 0.0 0.0 0.0 0.0 0.0 + 0.0460829493088 0.382488479263 0.651305683564 0.0491551459293 0.0 + 0.0 0.0 0.0 0.0 0.0650793650794 0.496825396825 0.336507936508 + 0.047619047619 0.0 0.0 0.0 0.0 0.0 0.133640552995 0.721966205837 + 0.700460829493 0.356374807988 + + + 0.446112430073 0.162166865501 0.211928138627 0.147851856234 + 0.164243151454 0.263816372034 0.0798161738045 0.312332685524 + 0.199037468668 0.127948611309 0.104856078798 0.202164715983 + 0.107849205521 0.0975758958212 + + + + + + + + + 39 1 76 4 73 5 36 3 34 4 37 1 36 4 37 1 37 3 37 1 36 4 37 4 33 4 37 9 + 4 10 2 16 37 10 2 29 38 9 1 29 38 40 38 40 38 40 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 40 38 40 38 + 40 3 2 23 57 21 4 1 45 3 2 33 40 38 40 4 2 1 1 30 40 4 1 33 40 38 40 + 38 40 38 41 37 40 38 40 38 40 38 41 37 34 1 6 37 34 2 5 37 33 3 5 37 + 33 3 5 37 32 4 5 37 31 5 5 37 18 9 3 6 5 38 7 28 5 73 5 53 1 19 5 4 + 13 1 3 2 10 40 5 3 30 40 5 3 30 40 5 3 31 39 5 3 31 39 5 3 31 39 5 3 + 31 39 4 5 29 41 3 5 29 42 3 4 29 42 3 3 29 42 4 4 28 42 4 4 28 42 4 4 + 29 41 4 4 29 41 4 4 29 41 4 4 29 41 4 4 29 41 4 3 30 41 4 3 30 4 1 36 + 5 2 30 41 5 2 30 41 5 2 30 41 5 2 31 40 5 2 31 40 5 2 31 40 38 40 38 + 40 37 41 38 40 38 7 1 32 38 6 3 31 38 7 1 30 40 40 38 41 37 41 37 7 1 + 11 2 20 37 7 1 10 3 20 37 18 3 16 1 3 37 18 3 14 4 2 37 18 3 1 5 7 5 + 2 37 11 29 1 37 5 74 1 39 0 + + + + 7488.0 + + + 0.8125 + + + 3548.0 + + + 0.149661781285 + + + 1.49311531842 + + + 0.495322039854 0.52962083902 0.132773299775 0.166157428881 + 0.0976010959114 0.000849762363775 -0.00231635757667 + 0.00165586055398 -0.00584648757244 + + + 78.0 + + + 0.538461538462 0.71875 + + + 0.871794871795 0.615384615385 0.461538461538 0.102564102564 0.375 + 0.5 1.125 0.875 + + + 96.0 + + + 11.0 45.0 0.163793103448 5.0 2.0 4.0 + + + 0.0 0.989583333333 + + + 0.473824786325 + + + 0.649122807018 0.853070175439 0.300438596491 0.0263157894737 0.6875 + 0.964583333333 0.295833333333 0.10625 0.0767543859649 + 0.0482456140351 0.940789473684 0.855263157895 0.0 0.0375 0.925 + 0.8125 + + + 0.416666666667 0.907407407407 0.675925925926 0.712962962963 + 0.472222222222 0.425925925926 0.111111111111 0.0 0.275 1.0 + 0.991666666667 1.0 0.333333333333 0.0 0.0 0.0 0.316666666667 1.0 + 1.0 1.0 0.358333333333 0.0 0.0 0.0 0.433333333333 1.0 + 0.858333333333 1.0 0.5 0.325 0.233333333333 0.191666666667 + 0.212962962963 0.111111111111 0.0925925925926 0.111111111111 + 0.861111111111 0.990740740741 0.962962962963 0.833333333333 0.0 0.0 + 0.0 0.0 0.908333333333 1.0 1.0 0.633333333333 0.0 0.0 0.0 0.0 + 0.991666666667 1.0 1.0 0.708333333333 0.0 0.0 0.0 0.15 + 0.791666666667 0.916666666667 0.9 0.641666666667 + + + 0.417275144571 0.178093329148 0.0154987466507 0.0155142723328 + 0.00923635459115 0.365044905553 0.0698008011807 0.0175897891039 + 0.0362455534927 0.00804165242764 0.141022262283 0.26611913182 + 0.11870548285 0.0455632527025 + + + + + + + + + 65 20 3 5 120 20 4 10 3 4 107 20 4 17 107 20 3 18 107 20 3 18 108 17 + 5 18 107 20 3 18 107 21 2 19 106 21 1 20 106 42 107 41 107 41 107 41 + 107 41 107 41 107 41 107 41 107 42 106 41 107 41 107 20 2 20 105 22 1 + 21 104 43 105 43 105 43 105 43 105 44 105 42 106 42 107 41 107 41 107 + 20 1 20 107 20 1 20 107 20 1 20 107 20 1 20 107 20 1 20 107 19 3 19 + 107 20 1 20 107 41 108 40 108 19 1 20 108 18 3 19 108 17 4 20 107 11 + 1 4 5 19 134 14 140 8 143 5 145 3 1554 4 32 1 110 17 19 2 110 23 12 3 + 110 38 110 38 110 38 110 38 110 38 110 4 1 33 110 4 2 12 1 19 111 3 2 + 32 111 37 111 38 110 38 110 38 110 38 110 38 110 38 37 1 72 38 37 1 + 72 38 37 1 73 37 37 1 73 37 37 1 73 38 36 1 73 37 37 2 72 37 37 1 72 + 39 36 2 71 40 34 4 71 38 35 3 71 39 35 4 70 39 35 5 68 41 34 5 30 2 + 39 37 35 5 28 5 38 37 35 4 29 5 38 23 1 13 35 4 30 4 38 37 35 5 28 5 + 38 37 35 8 8 1 16 5 38 37 35 19 12 7 2 2 34 37 36 37 2 4 32 37 36 37 + 2 11 25 37 36 38 1 19 17 37 36 38 1 29 6 38 36 38 1 73 36 38 1 41 4 + 28 36 38 1 40 10 23 36 38 1 39 18 16 36 38 1 40 26 7 36 38 1 40 29 4 + 36 79 30 3 36 59 1 19 31 2 36 79 32 1 36 79 69 79 69 79 69 79 69 79 + 69 79 69 39 1 39 70 33 6 39 74 26 9 39 69 33 7 39 69 6 1 28 5 1 4 32 + 1 1 69 5 3 25 7 3 4 27 74 35 5 3 6 26 73 38 4 1 6 31 68 35 1 2 4 1 5 + 32 68 34 6 4 4 32 68 34 6 40 68 34 7 39 68 35 2 1 3 39 68 39 2 39 68 + 39 2 39 68 39 2 39 68 39 2 39 68 39 2 39 68 39 3 38 68 39 3 38 68 31 + 1 7 3 39 67 31 2 6 3 39 68 29 3 6 3 39 68 5 1 23 4 5 3 39 68 4 20 5 4 + 5 3 39 68 3 30 5 10 32 68 2 31 4 16 27 131 17 137 11 141 7 140 9 140 + 8 142 6 142 6 142 5 142 1 1 5 105 0 + + + + 22348.0 + + + 0.980132450331 + + + 6873.0 + + + 0.141277462535 + + + 0.885578504844 + + + 0.491710142518 0.560484989573 0.245250691235 0.252478577756 + -0.0347042469755 0.0114769414466 0.0181797681323 0.0742609902964 + -0.0719775909401 + + + 148.0 + + + 0.567567567568 0.933774834437 + + + 0.567567567568 0.675675675676 0.405405405405 0.621621621622 + 0.476821192053 0.344370860927 1.58940397351 1.27152317881 + + + 151.0 + + + 15.0 66.0 0.198230088496 9.0 1.0 3.0 + + + 0.0 0.993377483444 + + + 0.307544299266 + + + 0.0 0.0426742532006 0.422475106686 0.705547652916 0.221329437546 + 0.396870554765 0.74679943101 0.110953058321 0.861212563915 + 0.180654338549 0.0568990042674 0.0341394025605 0.0 0.0 + 0.51280227596 0.624466571835 + + + 0.0 0.0 0.0 0.0 0.0 0.83918128655 0.836257309942 0.385964912281 0.0 + 0.0 0.0 0.16620498615 0.116343490305 0.734072022161 0.991689750693 + 0.598337950139 0.0 0.0 0.0 0.812865497076 1.0 0.517543859649 + 0.175438596491 0.280701754386 0.447368421053 0.415512465374 + 0.12188365651 0.653739612188 0.930747922438 0.540166204986 0.0 0.0 + 0.913580246914 0.96783625731 0.324561403509 0.0 0.0 0.0 0.0 0.0 + 0.72514619883 0.842105263158 0.396121883657 0.0 0.113573407202 + 0.108033240997 0.0969529085873 0.0360110803324 0.0 0.0 0.0 0.0 + 0.0526315789474 0.994152046784 0.979532163743 0.330409356725 0.0 + 0.0 0.0 0.0 0.0720221606648 0.93351800554 0.850415512465 + 0.340720221607 + + + 0.210187239555 0.0522080710438 0.07878709981 0.26301627217 + 0.165405759164 0.0841262219208 0.098051789555 0.182027294284 + 0.416574555696 0.0548277577611 0.119942532241 0.101206456732 + 0.172504561815 0.103005729687 + + + + + + + + + 2 1 44 2 44 2 44 2 44 2 44 2 44 1 44 3 43 4 42 3 43 3 43 2 44 3 43 4 + 35 3 5 3 32 6 38 9 176 5 41 6 10 7 23 7 6 40 5 41 5 41 5 41 5 41 5 41 + 5 41 5 41 5 41 5 41 5 41 5 41 5 41 5 41 5 42 4 41 5 41 5 41 5 41 5 41 + 5 41 5 4 2 29 12 34 12 41 5 3 2 36 5 3 2 36 5 41 5 41 5 41 5 41 5 41 + 5 41 5 41 5 41 5 41 5 41 5 41 5 41 5 41 6 41 5 41 5 41 5 41 5 2 10 7 + 2 20 5 2 26 13 5 2 28 12 4 2 30 10 37 9 38 3 1 4 37 2 4 3 42 4 40 6 + 42 4 42 5 41 5 41 4 40 7 42 3 43 3 43 3 43 3 43 3 43 3 43 3 43 3 44 2 + 44 2 1 0 + + + + 4094.0 + + + 0.516853932584 + + + 1978.0 + + + 0.178463094034 + + + 1.07098591549 + + + 0.502449163015 0.500425130986 0.0814097830715 0.121886564021 + 0.0246536073469 -0.00133855165224 0.00667876697481 0.00145622075226 + 0.00267086167566 + + + 46.0 + + + 0.717391304348 0.14606741573 + + + 0.869565217391 0.0 0.0 1.91304347826 0.134831460674 0.0449438202247 + 0.179775280899 0.224719101124 + + + 89.0 + + + 7.0 17.0 0.2 8.0 8.0 2.0 + + + 0.0 0.988764044944 + + + 0.483146067416 + + + 0.177685950413 0.896694214876 0.756198347107 0.0237154150198 + 0.00378787878788 1.0 0.981060606061 0.0 0.0 1.0 0.995867768595 + 0.0158102766798 0.136363636364 0.647727272727 0.742424242424 + 0.416666666667 + + + 0.454545454545 0.218181818182 0.781818181818 0.8 0.6 0.509090909091 + 0.109090909091 0.0 0.0 0.0909090909091 1.0 0.969696969697 + 0.939393939394 0.909090909091 0.0 0.0 0.0 0.0151515151515 1.0 1.0 + 1.0 0.939393939394 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.984848484848 0.0 + 0.0 0.0 0.0 1.0 1.0 1.0 0.981818181818 0.0 0.0 0.0 0.0 1.0 1.0 1.0 + 1.0 0.0606060606061 0.0 0.0 0.393939393939 1.0 0.939393939394 + 0.939393939394 1.0 0.409090909091 0.0138888888889 0.0 + 0.151515151515 0.333333333333 0.318181818182 0.454545454545 + 0.575757575758 0.742424242424 0.527777777778 + + + 0.639955880657 0.04941845404 0.0188362356179 0.0199477591454 + 0.509582494159 0.0602808381881 0.0507308617517 0.0398396336783 + 0.0499013524732 0.00985814826018 0.13365552423 0.0479680686506 + 0.111254139743 0.0451049183476 + + + + + + + + + 67 1 70 1 70 1 69 3 68 3 66 5 68 3 140 1 70 1 69 2 35 1 5 2 1 15 3 4 + 3 2 35 36 35 36 35 36 35 36 35 36 36 35 36 35 35 37 35 36 35 36 35 36 + 35 35 36 35 36 36 35 36 35 36 35 36 35 36 35 36 35 36 36 4 1 24 42 32 + 39 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 35 36 35 36 35 36 35 + 36 35 36 35 36 7 1 3 6 16 38 4 67 4 18 7 43 3 17 3 47 4 67 3 68 3 42 + 17 3 1 5 4 38 33 37 33 38 33 38 30 1 2 40 26 3 1 41 30 41 27 43 27 45 + 26 45 26 45 29 41 32 39 32 39 33 38 33 38 33 4 1 33 33 4 1 32 34 4 1 + 33 33 38 33 38 33 38 33 38 33 38 33 38 34 37 34 37 34 37 34 28 1 8 34 + 34 37 38 33 38 33 38 33 38 33 38 33 4 5 29 34 1 17 19 64 7 66 6 67 4 + 69 2 70 1 29 0 + + + + 6887.0 + + + 0.731958762887 + + + 3172.0 + + + 0.139974779319 + + + 0.715749039693 + + + 0.506669969375 0.536615962589 0.10988642785 0.16392133422 + -0.0866822670364 -0.00123862284829 0.00431222028681 + -0.000862159010445 -0.00444578718095 + + + 71.0 + + + 0.591549295775 0.247422680412 + + + 0.112676056338 0.676056338028 0.56338028169 1.01408450704 + 0.164948453608 0.0412371134021 0.577319587629 0.20618556701 + + + 97.0 + + + 4.0 24.0 0.215962441315 6.0 4.0 3.0 + + + 0.0 0.989690721649 + + + 0.460577900392 + + + 0.0 0.0 0.911764705882 0.630588235294 0.0717592592593 + 0.087962962963 0.944444444444 0.788888888889 0.532407407407 + 0.997685185185 0.472222222222 0.271111111111 0.49537037037 + 0.865740740741 0.289351851852 0.0 + + + 0.0 0.0 0.0 0.0 0.75 0.90625 0.6875 0.336538461538 0.0 0.0 0.0 0.0 + 0.972222222222 1.0 1.0 0.504273504274 0.0 0.0 0.0 0.0 + 0.833333333333 1.0 1.0 0.57264957265 0.00925925925926 + 0.277777777778 0.185185185185 0.166666666667 0.944444444444 1.0 + 0.990740740741 0.623931623932 0.0462962962963 1.0 0.990740740741 + 1.0 0.787037037037 0.601851851852 0.546296296296 0.538461538462 + 0.0833333333333 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0555555555556 1.0 1.0 + 1.0 0.518518518519 0.0 0.0 0.0 0.222222222222 0.703703703704 + 0.685185185185 0.777777777778 0.490740740741 0.148148148148 0.0 0.0 + + + 0.509206268017 0.147802674306 0.0184363810664 0.0143243009542 + 0.129697779978 0.36221469644 0.0458142998093 0.0151784238831 + 0.018380573328 0.0166185643487 0.14527976314 0.339935111616 + 0.0981873336055 0.0264135020333 + + + + + + + + + 24 1 74 3 73 7 69 15 13 1 47 23 4 2 47 17 2 6 2 2 47 17 2 10 47 29 47 + 29 47 15 5 9 48 10 10 7 48 11 11 4 51 9 12 5 50 3 1 5 11 7 49 2 2 5 + 10 9 48 9 10 8 49 10 10 8 48 11 4 2 3 8 48 10 2 16 48 28 48 28 48 28 + 48 28 48 28 48 28 48 17 2 9 48 28 48 13 1 14 48 13 2 2 3 8 48 17 2 9 + 47 29 47 29 48 28 47 30 47 10 1 18 46 10 5 3 1 11 46 9 12 10 46 8 12 + 10 46 9 11 10 46 9 11 8 19 3 26 9 11 8 20 4 24 9 11 8 20 3 25 9 10 9 + 21 2 25 9 5 2 3 9 20 3 25 4 1 5 4 1 4 12 2 3 13 2 25 3 5 10 1 20 2 1 + 7 2 26 2 16 32 26 2 17 31 26 2 20 28 27 1 21 27 27 1 22 26 27 1 22 26 + 50 26 50 26 50 26 50 26 50 26 50 26 50 26 50 11 2 13 51 10 3 12 51 10 + 3 12 51 11 2 12 50 12 2 4 3 5 50 11 1 7 2 5 50 26 50 26 52 5 6 13 64 + 12 66 2 1 7 51 1 18 6 50 5 16 6 50 4 1 2 1 1 11 5 51 1 2 11 4 7 51 1 + 2 22 51 16 2 7 51 16 4 5 51 12 1 2 5 5 51 25 51 25 51 25 50 26 50 26 + 4 1 46 25 4 1 46 25 4 1 46 25 4 2 45 25 4 2 45 3 6 16 4 2 45 2 13 10 + 3 3 61 2 2 5 2 5 22 1 42 4 2 6 21 2 42 3 2 6 20 4 19 2 21 2 3 5 20 4 + 20 2 19 4 1 6 21 3 41 3 2 7 21 2 41 3 2 7 20 3 41 4 2 5 20 5 41 3 2 4 + 22 5 45 4 22 3 47 4 23 2 41 3 3 4 23 2 41 4 2 4 22 3 47 5 21 2 48 9 + 17 2 48 14 12 3 47 19 7 3 47 21 5 3 46 30 46 30 46 30 46 31 45 30 46 + 30 47 16 2 11 46 17 2 11 46 2 3 25 47 1 3 25 46 17 3 10 46 18 2 11 45 + 31 45 31 45 30 46 30 46 30 46 30 46 30 46 31 45 31 45 31 44 32 44 32 + 44 32 44 32 45 31 45 31 45 31 45 31 45 31 45 31 45 31 45 32 44 32 44 + 33 43 33 43 33 43 33 43 33 43 9 1 1 1 21 43 7 8 3 1 13 44 6 17 10 43 + 6 18 9 43 6 20 7 43 6 21 6 43 5 21 7 42 7 20 8 41 7 20 8 41 1 1 4 20 + 9 42 1 1 3 22 7 42 2 3 3 19 7 46 2 20 8 46 2 21 7 46 1 24 4 72 4 42 0 + + + + + 12464.0 + + + 0.463414634146 + + + 3698.0 + + + 0.263385613845 + + + 0.68884053466 + + + 0.464741301604 0.503181955426 0.123346817285 0.583233252868 + -0.140448949517 0.0092800292725 -0.060943644555 0.0180331371512 + -0.0183123571529 + + + 76.0 + + + 1.92105263158 0.871951219512 + + + 1.0 2.47368421053 2.26315789474 1.94736842105 0.80487804878 + 1.07317073171 1.12195121951 0.487804878049 + + + 164.0 + + + 19.0 100.0 0.185886402754 11.0 4.0 6.0 + + + 0.0 0.993902439024 + + + 0.296694480103 + + + 0.0 0.0 0.513478818999 0.695763799743 0.617458279846 + 0.0693196405648 0.302952503209 0.593068035944 0.539152759949 + 0.404364569961 0.0577663671374 0.0 0.00898587933248 0.744544287548 + 0.200256739409 0.0 + + + 0.0 0.0 0.0 0.0 0.416666666667 0.78835978836 0.911111111111 + 0.619047619048 0.0 0.0 0.0 0.0 0.0 0.838095238095 1.0 + 0.290476190476 0.455555555556 0.470899470899 0.155555555556 0.0 + 0.0166666666667 0.714285714286 1.0 0.402116402116 0.675 + 0.833333333333 0.13 0.0 0.165 0.309523809524 0.39 0.609523809524 + 0.488888888889 0.793650793651 0.183333333333 0.0 0.0 0.0 0.0 0.0 + 0.34 0.542857142857 0.795 0.585714285714 0.225 0.0 0.0 0.0 0.0 0.0 + 0.777777777778 0.698412698413 0.294444444444 0.0 0.0 0.0 0.0 + 0.0333333333333 0.735 0.766666666667 0.515 0.0 0.0 0.0 + + + 0.283722762651 0.255954465538 0.0692250028755 0.0916958805884 + 0.142828908002 0.390087078658 0.161940576883 0.152272584587 + 0.157109974763 0.106784317844 0.23354121059 0.303967209708 + 0.269702947793 0.0859699343785 + + + + + + + + + 1 1 46 2 39 1 5 7 16 4 3 4 1 8 4 21 1 21 3 22 2 20 3 21 3 20 4 20 3 + 19 5 21 2 20 4 20 3 20 4 20 3 20 4 21 2 20 4 4 2 15 1 21 4 4 2 36 5 + 43 4 43 4 43 4 43 4 43 4 43 5 42 5 42 5 42 5 42 5 3 3 29 12 2 6 27 12 + 38 9 42 5 5 1 36 5 42 5 42 6 41 6 41 6 41 6 41 6 41 6 42 5 42 5 42 5 + 42 6 41 6 41 6 19 2 20 6 19 2 20 6 19 1 21 6 18 2 20 7 12 2 4 4 18 7 + 3 35 3 6 2 37 2 5 5 34 3 5 6 32 5 5 3 34 6 4 4 33 5 6 1 36 4 44 2 45 + 2 46 1 2 0 + + + + 2632.0 + + + 0.839285714286 + + + 1827.0 + + + 0.166940339354 + + + 1.05893070863 + + + 0.494252873563 0.44197641439 0.0858014985774 0.0950523188557 + 0.00667303092674 -0.000101160067446 0.00142654035479 + 0.00090826619132 0.00190578228134 + + + 47.0 + + + 0.63829787234 0.553571428571 + + + 1.1914893617 0.170212765957 0.170212765957 1.02127659574 + 1.07142857143 0.214285714286 0.0714285714286 0.857142857143 + + + 56.0 + + + 5.0 22.0 0.236486486486 2.0 2.0 3.0 + + + 0.0 0.982142857143 + + + 0.69414893617 + + + 0.766233766234 0.785714285714 0.720779220779 0.337662337662 + 0.708333333333 1.0 1.0 0.261904761905 0.791666666667 1.0 + 0.988095238095 0.244047619048 0.630952380952 0.642857142857 + 0.791666666667 0.422619047619 + + + 0.714285714286 0.8 0.742857142857 0.571428571429 0.457142857143 + 0.314285714286 0.228571428571 0.114285714286 0.642857142857 + 0.904761904762 1.0 0.785714285714 1.0 1.0 0.714285714286 + 0.238095238095 0.571428571429 1.0 1.0 1.0 1.0 1.0 0.547619047619 + 0.0 0.428571428571 0.833333333333 1.0 1.0 1.0 1.0 0.5 0.0 + 0.595238095238 0.904761904762 1.0 1.0 1.0 0.952380952381 + 0.404761904762 0.0 0.666666666667 1.0 1.0 1.0 1.0 1.0 + 0.571428571429 0.0 0.690476190476 1.0 1.0 0.785714285714 1.0 1.0 + 0.571428571429 0.0 0.357142857143 0.47619047619 0.5 0.285714285714 + 0.5 0.666666666667 0.52380952381 0.595238095238 + + + 0.511196506503 0.0199211856934 0.0173004479727 0.00826249433653 + 0.151483856052 0.0158555484737 0.0722153798871 0.00774591354959 + 0.00749929638031 0.0175039392526 0.15942510124 0.00787184221139 + 0.172591874878 0.0273831145113 + + + + + + + + + 34 2 173 4 171 8 167 18 3 1 153 24 151 26 149 31 144 32 143 32 143 32 + 143 18 1 13 143 18 2 12 143 32 143 32 142 33 142 33 142 33 142 33 142 + 33 142 33 29 1 112 33 28 3 112 32 28 3 112 32 28 3 112 32 28 3 111 33 + 28 3 111 34 26 4 111 36 23 6 110 35 24 7 110 33 25 7 109 6 1 27 26 6 + 109 35 24 8 108 34 24 12 105 34 23 14 105 15 3 1 1 13 23 15 104 16 2 + 15 23 15 104 33 23 15 104 33 23 15 4 1 99 32 24 21 98 32 24 18 101 32 + 24 24 96 31 24 25 95 31 24 26 94 31 24 27 94 30 23 29 93 2 10 18 23 + 31 91 2 15 13 23 31 91 1 21 8 23 32 90 1 22 7 23 33 89 1 22 7 22 35 + 111 7 22 36 110 7 22 37 110 6 22 38 109 5 23 39 108 5 23 39 108 5 23 + 40 107 5 25 32 1 5 107 5 26 31 2 4 107 4 30 27 3 4 107 1 1 1 33 25 2 + 5 107 1 1 3 32 24 2 4 109 4 33 29 109 4 33 29 109 4 34 28 19 1 58 2 + 29 5 33 28 18 4 56 2 29 5 32 23 2 4 17 6 56 1 29 4 33 23 3 2 17 7 55 + 3 28 4 34 21 4 2 16 10 53 10 21 3 36 19 5 2 15 12 52 10 4 5 12 4 30 1 + 1 8 2 13 3 3 15 12 52 10 4 14 2 6 28 14 1 12 1 4 15 14 51 34 28 32 16 + 14 51 34 29 31 16 14 51 34 30 30 16 13 52 34 31 29 15 12 54 34 32 27 + 16 12 54 34 33 26 16 13 7 1 45 16 3 15 35 24 15 15 6 2 44 17 2 15 38 + 21 15 15 2 7 43 34 38 21 15 15 2 8 42 34 38 21 14 21 1 5 41 34 41 18 + 14 21 3 4 40 34 42 2 1 12 1 1 14 20 2 7 39 34 46 11 16 20 2 8 9 2 27 + 34 50 4 18 21 2 9 7 3 27 35 43 2 3 5 18 33 6 4 24 37 44 13 14 34 6 3 + 24 39 43 11 15 35 4 4 26 37 44 10 14 37 3 4 25 37 46 9 13 39 1 7 24 + 36 47 8 13 40 1 4 26 36 47 8 13 40 1 4 25 37 50 4 14 40 2 3 26 37 49 + 5 12 41 2 3 26 18 1 17 51 3 14 7 2 31 2 3 26 18 1 17 69 38 3 3 27 35 + 68 38 4 3 27 35 67 38 5 3 27 17 1 16 68 38 5 4 26 17 1 16 68 39 4 19 + 2 1 5 14 1 1 2 20 67 16 1 22 4 65 67 16 2 21 4 65 71 2 3 6 4 10 1 8 6 + 25 3 36 78 3 6 8 3 7 5 65 68 14 6 7 3 7 5 65 67 1 2 12 6 7 1 9 5 65 + 71 6 2 4 5 17 5 65 73 31 6 65 74 3 1 26 6 35 2 28 87 17 6 32 6 28 88 + 3 3 3 3 2 7 35 5 25 90 2 10 1 7 35 5 2 1 22 90 2 18 35 19 12 88 3 18 + 35 20 1 2 8 88 3 18 35 25 6 88 2 18 36 26 5 108 36 27 3 95 1 13 36 27 + 4 94 2 12 37 27 3 94 2 12 37 28 2 94 3 12 1 1 34 28 2 93 5 10 4 2 30 + 124 6 9 2 1 1 3 29 123 7 12 1 3 29 123 7 9 4 2 31 122 7 9 37 122 6 11 + 36 123 5 11 36 123 4 12 36 125 1 13 36 140 35 140 35 139 36 139 36 + 139 37 138 37 138 37 139 36 139 35 140 36 139 36 139 36 138 4 13 20 + 138 3 27 7 137 5 27 6 137 6 27 5 138 5 26 7 138 2 29 6 137 3 29 5 138 + 4 28 5 138 5 26 6 139 3 23 4 1 5 140 1 30 4 171 4 172 2 137 0 + + + + 27125.0 + + + 1.12903225806 + + + 7430.0 + + + 0.186944818304 + + + 0.966152314584 + + + 0.41515292152 0.506409606544 0.312416434819 0.175334051137 + -0.0364416978493 0.0945835152661 -0.0467295678243 0.0544144272954 + -0.0162380196101 + + + 175.0 + + + 1.04 1.74193548387 + + + 1.32571428571 1.07428571429 0.777142857143 0.982857142857 + 0.696774193548 2.14193548387 3.07096774194 0.929032258065 + + + 155.0 + + + 29.0 117.0 0.186073059361 19.0 0.0 6.0 + + + 0.0 0.993548387097 + + + 0.273917050691 + + + 0.209914320685 0.106141920095 0.577221228384 0.627310673822 + 0.468899521531 0.267482517483 0.494172494172 0.00815850815851 + 0.0968899521531 0.678904428904 0.11013986014 0.0 0.0 + 0.0944055944056 0.611888111888 0.032634032634 + + + 0.0 0.0 0.0 0.0 0.117794486216 0.792857142857 0.884711779449 + 0.407142857143 0.38995215311 0.430622009569 0.127272727273 + 0.291866028708 0.557416267943 0.806818181818 0.763157894737 0.475 + 0.777511961722 0.985645933014 0.513636363636 0.516746411483 + 0.99043062201 0.831818181818 0.00478468899522 0.0 0.0287081339713 + 0.0837320574163 0.0318181818182 0.00717703349282 0.0598086124402 + 0.0977272727273 0.0287081339713 0.0 0.0 0.38038277512 + 0.893181818182 0.533492822967 0.055023923445 0.0 0.0 0.0 0.0 + 0.00717703349282 0.568181818182 0.715311004785 0.397129186603 0.0 + 0.0 0.0 0.0 0.0 0.0 0.361244019139 0.744019138756 0.372727272727 + 0.0 0.0 0.0 0.0 0.0 0.0263157894737 0.772727272727 0.572727272727 + 0.133971291866 0.0 + + + 0.333046258031 0.0989741856983 0.12754500008 0.205239275552 + 0.0268120246511 0.169254967749 0.0209671942636 0.110150377699 + 0.309290811146 0.0922396473379 0.0992856585597 0.157444367051 + 0.132010443361 0.120723596954 + + + + + + + + + 21 2 21 2 21 2 20 3 20 2 20 3 20 3 20 3 20 3 20 3 20 2 20 3 20 3 19 4 + 19 4 19 3 19 4 19 1 1 2 19 4 19 4 20 2 21 2 21 2 20 3 17 6 16 7 17 5 + 19 4 20 3 41 1 1 2 19 4 19 1 1 1 20 2 21 2 21 2 20 3 20 3 20 4 19 3 + 20 3 19 5 19 4 18 5 18 4 18 5 18 5 18 5 19 3 21 2 21 2 20 3 20 1 22 1 + 20 3 20 2 21 2 21 1 46 1 21 4 19 4 18 5 18 5 18 5 18 5 17 5 18 5 19 4 + 18 5 18 5 18 5 18 5 18 4 19 1 1 2 19 5 18 4 19 4 18 4 19 5 19 4 19 4 + 18 4 19 4 19 4 19 4 19 3 19 4 19 4 19 4 19 4 19 4 19 4 19 4 19 4 19 4 + 19 3 20 3 19 5 18 4 19 4 18 5 19 4 19 4 19 4 18 5 17 5 20 3 20 3 20 3 + 19 4 19 4 18 5 18 5 18 5 18 4 20 3 19 4 19 3 20 3 20 3 20 3 20 3 20 3 + 20 2 20 4 20 3 20 3 19 4 19 4 19 4 19 4 19 3 20 3 19 4 19 5 18 5 18 5 + 18 4 19 4 19 5 18 5 18 5 18 5 20 2 22 1 22 1 42 5 18 6 17 6 17 6 17 5 + 18 5 18 6 18 4 20 3 19 3 21 3 20 2 19 0 + + + + 3680.0 + + + 0.14375 + + + 579.0 + + + 0.753022452504 + + + 0.80723729993 + + + 0.379023394567 0.524652132825 0.0557141015646 3.4881801914 + -0.419701823665 0.00773445030777 0.226615008831 -0.045376714766 + -0.598980210702 + + + 23.0 + + + 1.73913043478 0.025 + + + 2.60869565217 1.21739130435 2.08695652174 0.173913043478 0.075 + 0.025 0.0 0.0 + + + 160.0 + + + 4.0 14.0 0.258064516129 4.0 6.0 1.0 + + + 0.0 0.99375 + + + 0.157336956522 + + + 0.0 0.0 0.215 0.735 0.0 0.341666666667 0.479166666667 + 0.0166666666667 0.2125 0.275 0.0 0.0 0.295833333333 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.475 0.6 0.0 0.0 0.0 0.0 0.0333333333333 + 0.683333333333 0.9 0.833333333333 0.0 0.0 0.0 0.25 0.85 0.65 0.0 + 0.0666666666667 0.0 0.0 0.183333333333 0.933333333333 + 0.416666666667 0.0 0.0 0.0 0.0 0.3 0.583333333333 0.333333333333 + 0.0 0.0 0.0 0.0 0.0666666666667 0.483333333333 0.183333333333 0.0 + 0.0 0.0 0.0 0.0 0.5 0.25 0.0 0.0 0.0 0.0 0.0 0.0 0.433333333333 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.417295935773 0.268037000998 0.0586327431568 0.0232617109335 + 0.318081703284 0.399234703394 0.23362950608 0.0299673270315 + 0.0641991444191 0.0446317230656 0.44346142437 0.278887639027 + 0.399137257973 0.203682903565 + + + + + + + + + 4 1 9 4 8 4 9 3 9 2 10 4 8 3 9 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 + 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 + 10 2 10 3 8 4 8 3 9 4 8 4 9 3 9 3 8 4 7 6 6 5 8 4 8 4 8 4 7 1 1 3 7 6 + 6 6 7 5 6 5 1 1 5 6 6 6 6 6 6 5 7 6 5 8 5 7 6 4 8 4 8 5 8 3 9 3 8 6 6 + 5 7 5 7 5 7 4 9 3 9 3 9 4 8 4 8 3 9 5 7 5 7 4 8 5 8 4 8 4 7 4 8 4 9 3 + 9 3 9 3 9 3 9 3 9 3 9 3 9 3 10 2 10 2 10 2 10 2 9 3 9 3 9 3 9 4 9 3 9 + 3 10 1 11 1 11 2 9 3 8 5 7 5 7 5 7 4 8 5 7 5 8 4 8 4 7 5 7 5 7 5 7 5 + 7 6 7 5 7 4 8 4 8 5 8 3 8 4 8 4 8 4 8 4 9 4 8 4 7 5 7 5 8 4 7 5 8 3 9 + 3 9 3 9 3 9 4 9 3 8 4 8 4 8 4 8 4 8 4 8 4 8 4 9 3 9 3 9 3 9 3 9 3 8 4 + 9 3 9 3 8 5 8 4 8 4 8 5 8 3 9 4 9 2 10 1 2 0 + + + + 1884.0 + + + 0.0764331210191 + + + 570.0 + + + 0.714035087719 + + + 1.12075074958 + + + 0.481339712919 0.519624381466 0.00769000988158 3.18724792514 + 0.120562278272 0.000109350628647 0.0490853297011 0.00317401488324 + -0.102302446238 + + + 12.0 + + + 3.25 0.0127388535032 + + + 2.0 3.66666666667 6.0 1.33333333333 0.0 0.0509554140127 0.0 0.0 + + + 157.0 + + + 7.0 14.0 0.147928994083 0.0 14.0 1.0 + + + 0.0 0.993630573248 + + + 0.302547770701 + + + 0.0769230769231 0.307692307692 0.0 0.0 0.769230769231 + 0.982905982906 0.504273504274 0.0583333333333 0.017094017094 + 0.282051282051 0.65811965812 0.825 0.0 0.0 0.025641025641 + 0.333333333333 + + + 0.0 0.0 0.0526315789474 0.0 0.0 0.0 0.0 0.0 0.0526315789474 0.175 + 0.789473684211 0.125 0.0 0.0 0.0 0.0 0.947368421053 1.0 1.0 0.9 0.0 + 0.0 0.0 0.0 0.631578947368 0.7 1.0 1.0 0.75 0.763157894737 0.175 + 0.0 0.0526315789474 0.05 0.526315789474 0.7 1.0 1.0 0.95 0.3 0.0 + 0.0 0.0789473684211 0.15 0.075 0.921052631579 1.0 0.85 0.0 0.0 0.0 + 0.0 0.0 0.157894736842 0.55 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.225 + + + 0.436181111472 0.258866865769 0.0104779931234 0.00583295544776 + 0.325544806535 0.410110431399 0.220403418027 0.119177510643 + 0.0689817550837 0.0203992939508 0.26675811762 0.426717118285 + 0.34884525494 0.198231380186 + + + + + + + + + 72 1 163 2 163 2 127 8 28 2 127 21 15 2 127 24 1 9 1 3 127 38 127 38 + 127 38 127 38 127 38 127 38 127 37 128 4 2 32 127 3 3 31 128 3 3 30 + 129 38 127 38 127 38 127 38 127 38 128 37 128 37 128 37 128 37 128 37 + 128 37 128 37 128 37 128 37 16 1 111 38 15 2 108 40 15 3 107 8 1 32 + 14 5 105 40 14 6 105 41 12 7 106 39 13 9 69 3 31 10 1 29 13 10 68 3 + 31 17 2 21 13 10 68 3 30 10 3 29 12 9 69 2 32 41 9 13 69 1 32 40 11 + 11 1 2 66 5 29 40 11 15 65 10 23 41 11 16 1 3 60 17 16 41 11 15 2 4 + 59 27 4 43 11 15 3 1 61 74 11 15 4 5 57 38 4 31 10 17 1 8 56 36 13 24 + 10 16 3 8 55 39 17 17 11 28 53 39 29 5 10 30 51 39 31 3 11 30 52 39 + 30 3 11 31 51 39 32 1 11 33 48 40 44 34 47 40 44 36 45 40 44 37 44 40 + 44 37 44 40 44 37 44 40 44 36 45 40 44 35 14 3 29 40 44 27 6 1 15 4 + 28 40 45 25 22 6 27 40 47 24 21 7 26 40 49 23 21 7 31 35 50 22 20 7 + 34 26 56 22 19 9 32 25 59 21 19 10 31 29 1 1 54 20 19 11 30 33 53 19 + 2 3 13 14 29 32 54 12 2 3 3 3 12 15 21 4 3 33 53 13 4 1 3 3 12 14 22 + 40 54 13 7 3 12 13 23 40 54 3 2 8 7 2 13 14 23 39 53 3 1 1 2 6 8 2 12 + 15 25 37 53 3 2 1 1 5 1 2 6 2 12 15 4 1 18 1 1 37 54 14 6 2 12 15 4 2 + 17 39 54 15 5 2 12 15 4 3 16 5 3 31 53 12 1 4 4 2 12 15 23 7 1 31 50 + 14 2 6 2 1 12 4 2 10 3 2 19 38 52 23 12 5 1 10 3 4 17 17 1 20 54 21 + 12 17 3 2 18 38 54 11 1 1 1 7 12 3 2 1 1 10 23 38 53 22 12 3 1 20 17 + 37 53 22 12 3 1 27 10 37 54 21 11 32 10 37 55 19 12 4 1 28 9 4 3 30 + 57 17 12 4 1 29 9 3 12 21 58 16 12 35 9 2 20 13 59 15 12 36 8 2 27 6 + 60 13 13 36 39 4 61 12 12 38 39 3 62 6 3 2 12 38 41 1 65 1 5 2 12 38 + 109 2 1 1 1 1 12 38 109 5 13 38 109 6 12 15 4 18 110 5 12 9 3 4 4 19 + 110 4 12 40 110 4 11 7 1 31 113 1 12 6 2 31 126 5 6 27 127 5 11 22 + 128 4 15 19 127 4 7 3 8 4 2 10 129 3 5 5 11 11 130 3 6 5 5 2 2 11 134 + 3 3 5 3 17 135 3 11 16 151 10 1 3 155 5 4 1 155 5 155 2 4 4 155 2 6 1 + 3 2 159 1 3 2 158 1 2 3 157 9 155 9 157 8 158 7 158 7 158 4 1 2 157 7 + 158 7 158 7 158 7 158 7 158 7 159 5 160 5 161 4 160 1 2 2 164 1 164 1 + 7 0 + + + + 21945.0 + + + 1.24060150376 + + + 5883.0 + + + 0.204657487676 + + + 1.38995274807 + + + 0.447951518016 0.446324540664 0.382440742139 0.127702457382 + 0.1097117772 0.0725412963695 0.0263536336304 0.0856894277236 + -0.00214787201927 + + + 165.0 + + + 0.975757575758 1.64661654135 + + + 0.921212121212 0.290909090909 1.21212121212 1.47878787879 + 0.360902255639 2.01503759398 3.45864661654 0.751879699248 + + + 133.0 + + + 27.0 125.0 0.267489711934 23.0 0.0 4.0 + + + 0.0 0.992481203008 + + + 0.268079289132 + + + 0.121212121212 0.717664449372 0.60236511456 0.0 0.679231337768 + 0.376940133038 0.0 0.0 0.00813008130081 0.563932002956 + 0.356984478936 0.000717360114778 0.0 0.0310245310245 0.598845598846 + 0.261204481793 + + + 0.0 0.0 0.440625 0.947058823529 0.794117647059 0.2125 0.0 0.0 + 0.208333333333 0.263305322129 0.514880952381 0.93837535014 + 0.966386554622 0.392857142857 0.0 0.0 0.7375 0.997058823529 + 0.896875 0.0 0.0 0.0 0.0 0.0 0.404761904762 0.582633053221 + 0.627976190476 0.0336134453782 0.0 0.0 0.0 0.0 0.0 0.03081232493 + 0.616071428571 0.840336134454 0.406162464986 0.116071428571 0.0 0.0 + 0.0 0.0 0.1125 0.647058823529 0.482352941176 0.421875 + 0.00294117647059 0.0 0.0 0.0 0.0 0.120448179272 0.663865546218 + 0.803571428571 0.212885154062 0.0 0.0 0.0 0.0 0.0 0.0728291316527 + 0.883928571429 0.557422969188 0.274509803922 + + + 0.498840661597 0.150293530765 0.158377966864 0.105741064332 + 0.191083807307 0.297222427082 0.067830819323 0.260098121339 + 0.185733981334 0.085864490213 0.111432730798 0.249258971773 + 0.103896615935 0.0562756639736 + + + + + + + + + 61 2 151 1 113 7 31 1 114 5 21 1 9 2 115 6 17 5 6 4 113 19 2 17 114 + 38 114 32 3 3 114 38 114 39 113 39 113 38 114 38 114 38 114 38 114 38 + 114 38 114 38 114 38 114 38 114 38 114 38 114 38 114 38 114 39 114 38 + 118 1 1 32 121 31 121 31 16 2 100 34 16 5 100 31 17 5 99 31 16 6 97 + 33 16 8 90 38 15 10 90 2 1 34 13 12 95 32 13 12 93 1 1 32 12 13 89 26 + 2 6 16 14 89 1 5 18 3 5 17 14 89 1 6 7 2 16 17 14 89 1 6 28 1 1 11 12 + 1 1 97 4 1 5 1 17 1 1 11 12 93 1 4 31 11 13 91 5 1 11 1 19 11 14 6 1 + 82 18 1 19 10 16 4 3 82 1 2 34 10 18 2 4 56 2 23 37 10 28 52 2 23 16 + 2 19 9 31 50 3 19 19 4 1 2 14 9 32 49 36 35 7 2 1 2 21 48 15 3 17 36 + 7 2 24 48 15 3 18 35 7 1 22 51 17 1 18 35 7 1 22 51 15 3 18 34 8 1 20 + 53 14 4 18 35 28 53 14 4 18 35 28 53 29 2 4 36 31 50 36 35 33 48 36 + 25 2 8 33 48 35 26 2 8 11 3 18 47 37 26 2 5 2 1 11 2 20 16 2 28 38 24 + 2 4 38 5 3 9 3 26 38 23 3 4 12 2 24 4 4 7 6 25 38 24 2 5 37 3 5 6 7 + 25 37 32 11 1 25 4 3 7 7 26 36 32 5 1 3 8 5 2 14 3 2 7 9 25 37 24 2 5 + 5 1 3 1 1 7 6 1 13 3 2 8 9 24 37 25 2 4 11 7 20 3 3 7 9 24 37 25 2 4 + 12 8 8 1 7 5 3 7 11 22 37 24 3 4 11 11 14 4 4 9 9 22 7 3 27 24 3 4 11 + 12 13 3 5 4 1 4 10 3 1 17 4 1 2 3 27 24 3 8 7 13 19 5 1 4 10 2 3 16 + 37 25 2 9 6 13 1 4 7 1 1 1 4 4 14 4 3 16 8 2 27 25 2 10 5 13 2 2 8 3 + 4 4 13 4 3 17 29 1 7 25 2 12 1 20 6 5 3 5 12 3 4 18 36 25 2 32 7 5 2 + 7 11 3 7 15 36 25 2 14 1 17 9 4 1 7 12 1 10 13 36 42 1 16 10 2 1 8 24 + 12 36 61 7 3 1 7 26 11 36 61 7 9 30 9 24 4 8 61 7 9 31 8 24 2 10 63 5 + 9 31 8 6 2 28 64 3 10 32 7 36 79 7 6 18 6 7 2 22 1 4 78 9 5 20 4 6 3 + 18 1 1 1 1 1 5 77 8 7 20 3 37 78 8 5 21 3 36 80 6 6 22 2 36 79 8 3 13 + 3 3 1 4 2 36 79 7 3 14 4 2 3 2 2 36 80 6 4 11 1 1 4 1 8 36 81 6 3 11 + 2 1 13 11 14 11 80 7 2 12 45 6 64 3 13 22 48 2 65 3 11 23 49 1 65 2 + 12 5 2 1 2 14 114 2 12 4 2 2 2 14 113 2 13 3 2 17 116 2 12 2 4 22 124 + 3 3 16 1 6 130 13 4 1 137 9 5 3 138 6 7 2 137 7 138 3 5 6 138 5 3 5 3 + 2 133 6 5 2 3 4 133 5 4 15 128 5 5 14 122 3 2 24 124 3 2 23 125 27 + 126 26 127 25 132 20 133 18 134 18 135 17 137 4 3 7 146 6 146 6 138 1 + 6 7 139 12 141 11 140 13 141 11 142 9 143 9 145 7 145 5 148 3 150 2 + 11 0 + + + + 20064.0 + + + 1.15151515152 + + + 5515.0 + + + 0.251314596555 + + + 1.35672823219 + + + 0.43597413436 0.456532842421 0.345184772406 0.148277680482 + 0.104228891056 0.0789385862565 0.0256974024144 0.0872011103545 + 0.000161655934013 + + + 152.0 + + + 1.46052631579 2.0303030303 + + + 1.63157894737 0.789473684211 1.18421052632 2.23684210526 + 0.393939393939 2.9696969697 4.27272727273 0.484848484848 + + + 132.0 + + + 40.0 168.0 0.234482758621 33.0 0.0 10.0 + + + 0.0 0.992424242424 + + + 0.274870414673 + + + 0.264752791069 0.593301435407 0.753588516746 0.0 0.575757575758 + 0.386762360447 0.0566188197767 0.0 0.0207336523126 0.586124401914 + 0.208931419458 0.0 0.0 0.0271132376396 0.561403508772 0.36283891547 + + + 0.0 0.0 0.0230263157895 0.891640866873 0.894736842105 + 0.538699690402 0.0 0.0 0.529605263158 0.529411764706 0.460526315789 + 0.956656346749 0.976973684211 0.625386996904 0.0 0.0 0.700657894737 + 1.0 0.9375 0.0 0.0 0.0185758513932 0.0 0.0 0.246710526316 + 0.343653250774 0.368421052632 0.272445820433 0.213815789474 0.0 0.0 + 0.0 0.0 0.0804953560372 0.743421052632 0.916408668731 + 0.223684210526 0.0 0.0 0.0 0.0 0.0 0.105263157895 0.560371517028 + 0.582236842105 0.0526315789474 0.0 0.0 0.0 0.0 0.0 0.105263157895 + 0.694078947368 0.634674922601 0.401315789474 0.0588235294118 0.0 + 0.0 0.0 0.0 0.276315789474 0.631578947368 0.549342105263 + 0.455108359133 + + + 0.47449547695 0.139590911817 0.189510318421 0.121161147571 + 0.177804102069 0.238289337611 0.0678550948561 0.275792246869 + 0.207820826637 0.0871355641335 0.0904201532267 0.187709061817 + 0.0321648339598 0.0645395335919 + + + + + + + + + 35 2 171 5 98 5 11 1 9 4 1 2 37 6 96 35 36 8 94 35 36 9 93 35 36 10 + 92 35 36 9 93 35 36 10 92 35 36 10 92 35 36 11 91 35 36 13 1 1 87 35 + 36 16 86 35 36 17 85 35 36 17 85 35 36 17 85 35 36 13 2 2 85 35 36 17 + 85 35 36 18 84 35 36 20 82 35 36 20 82 35 36 27 6 2 67 35 36 30 3 4 + 65 35 36 39 63 35 35 41 62 36 33 20 2 3 1 16 1 7 53 37 34 19 3 26 54 + 37 34 19 3 27 54 35 36 17 4 20 3 1 57 36 35 17 6 1 1 5 2 9 61 36 36 5 + 4 8 5 1 5 1 4 13 1 3 50 37 36 8 1 8 11 30 43 36 36 6 5 3 15 34 38 36 + 36 5 27 37 32 6 3 27 36 8 31 32 30 36 2 5 29 9 35 32 25 35 3 10 23 7 + 26 6 6 36 21 35 2 12 1 5 4 1 11 7 27 5 1 43 18 36 2 29 3 5 2 3 5 1 6 + 10 6 1 5 14 1 31 12 38 1 37 9 4 1 9 1 8 10 45 8 40 1 29 3 5 6 5 3 10 + 5 5 9 91 2 38 3 7 7 14 7 96 1 37 9 1 9 16 4 96 1 38 8 2 9 107 5 3 1 + 37 4 8 9 37 3 42 7 2 24 37 3 9 10 34 11 34 35 37 8 4 14 30 11 2 6 26 + 35 31 1 4 10 2 5 1 11 35 11 27 35 33 14 1 6 6 7 32 18 21 35 36 19 8 5 + 36 14 20 35 37 19 8 7 35 12 19 36 37 22 8 9 36 6 20 35 37 23 10 6 38 + 5 19 35 37 25 12 2 3 5 24 1 5 4 20 35 37 27 17 9 21 7 20 35 37 29 17 + 10 45 35 37 30 11 1 6 12 41 35 37 32 10 3 9 9 38 35 37 35 19 13 34 43 + 28 40 12 19 31 43 29 45 4 26 25 36 37 79 21 36 37 81 10 2 7 36 37 80 + 21 34 38 80 21 35 37 81 20 35 37 81 20 36 36 49 3 29 20 36 36 50 5 9 + 1 4 2 10 20 36 36 49 9 3 40 36 36 49 52 36 36 51 50 36 36 56 45 36 36 + 61 40 36 36 65 36 36 36 67 34 36 36 73 28 43 29 79 22 53 2 2 15 81 20 + 62 10 83 19 67 4 85 16 70 2 89 12 69 3 92 9 165 8 167 7 167 6 168 5 + 167 5 169 5 33 0 + + + + 15224.0 + + + 1.96590909091 + + + 6030.0 + + + 0.208457711443 + + + 0.710625362211 + + + 0.515888580354 0.485002192105 0.465924182254 0.0651192148855 + -0.0559932935588 -0.0345760334711 0.00777648661921 + -0.00892875914299 -0.00106392974871 + + + 173.0 + + + 1.35838150289 2.10227272727 + + + 0.71676300578 2.65895953757 1.68786127168 0.300578034682 + 1.27272727273 3.54545454545 2.59090909091 1.0 + + + 88.0 + + + 25.0 94.0 0.253353204173 20.0 4.0 8.0 + + + 0.0 0.988636363636 + + + 0.396085128744 + + + 0.174418604651 0.428118393235 0.838266384778 0.449260042283 + 0.157505285412 0.597251585624 0.311839323467 0.0 0.0 0.46088794926 + 0.585623678647 0.341437632135 0.735537190083 0.824380165289 + 0.221074380165 0.202479338843 + + + 0.0 0.0 0.0 0.744588744589 0.952380952381 0.887445887446 + 0.874458874459 0.00865800865801 0.318181818182 0.363636363636 + 0.347107438017 0.615702479339 0.752066115702 0.768595041322 + 0.772727272727 0.140495867769 0.0735930735931 0.541125541126 + 0.640692640693 0.367965367965 0.207792207792 0.0 0.0 0.0 0.0 + 0.0289256198347 0.731404958678 0.640495867769 0.793388429752 + 0.227272727273 0.0 0.0 0.0 0.0 0.165289256198 0.979338842975 + 0.772727272727 0.148760330579 0.409090909091 0.0 0.0 0.0 0.0 + 0.688311688312 0.722943722944 0.709956709957 0.857142857143 + 0.112554112554 0.54132231405 0.636363636364 0.636363636364 + 0.797520661157 0.45041322314 0.433884297521 0.454545454545 + 0.355371900826 0.809917355372 0.954545454545 0.99173553719 + 0.871900826446 0.0 0.0 0.0 0.0 + + + 0.25770759494 0.273191400322 0.0622710346492 0.0459828060874 + 0.0260125548064 0.304525219566 0.202029529186 0.070507825906 + 0.0360190364279 0.0580843937558 0.201236275381 0.253913853524 + 0.19938174667 0.154743877822 + + + + + + + + + 39 3 226 3 225 5 224 6 222 11 218 12 217 14 215 15 1 1 210 23 206 24 + 204 27 202 31 127 3 5 7 56 31 126 4 3 19 6 3 37 35 119 2 1 5 1 29 38 + 37 116 38 38 34 1 3 115 38 38 35 3 3 111 39 38 33 119 39 38 34 118 39 + 38 30 2 5 115 39 38 29 3 6 5 1 108 39 38 5 3 25 4 7 108 39 38 5 2 13 + 1 9 10 4 107 40 38 20 1 10 11 5 104 40 38 19 2 2 1 1 2 6 1 4 5 7 101 + 40 38 19 3 1 7 9 5 6 101 40 38 19 2 1 1 3 10 5 8 6 96 40 39 17 5 5 10 + 8 4 9 92 40 39 18 4 6 8 25 89 40 39 18 4 9 6 10 2 13 88 40 40 34 3 14 + 6 3 89 40 40 33 5 1 1 12 7 2 89 39 49 18 1 13 6 6 97 39 50 32 5 7 96 + 34 56 42 97 37 54 39 99 39 51 38 101 39 40 1 2 4 3 5 3 2 2 28 100 39 + 40 8 1 7 1 3 7 25 98 40 39 15 18 19 98 40 40 14 20 23 92 40 8 1 2 3 4 + 3 18 16 19 23 7 3 83 6 2 31 8 17 4 28 4 4 1 5 4 25 1 6 10 6 67 38 8 + 52 1 46 12 5 67 38 6 24 1 13 2 53 1 5 4 3 2 8 69 38 5 38 3 35 4 32 58 + 1 14 40 4 17 1 19 5 33 6 29 60 10 5 40 4 37 8 31 8 23 2 5 56 12 3 40 + 4 37 9 30 11 27 57 54 4 37 11 25 22 20 55 54 5 37 14 1 2 20 22 15 59 + 55 4 37 17 8 5 5 25 18 55 55 4 38 19 7 1 1 31 22 52 21 2 31 4 38 21 7 + 34 23 47 19 10 26 3 39 23 12 34 18 44 20 18 18 2 40 26 13 30 24 36 22 + 28 8 2 42 29 18 27 22 33 20 30 6 2 42 31 2 6 11 7 5 15 22 31 19 31 5 + 2 42 33 3 2 14 6 6 17 22 27 19 31 5 5 38 36 31 22 21 19 21 31 5 4 39 + 38 14 4 2 3 1 5 1 27 21 15 19 31 5 4 38 42 11 10 1 33 25 10 20 30 5 4 + 38 45 6 52 23 5 22 28 6 4 38 107 46 29 6 3 5 2 1 1 29 112 41 29 6 3 5 + 3 31 115 37 30 6 3 4 3 31 119 33 29 5 5 38 125 26 30 5 5 38 130 21 31 + 2 1 2 5 37 130 21 31 1 2 1 6 37 130 21 31 1 9 37 130 21 41 37 131 20 + 41 37 131 20 41 37 131 20 41 37 131 20 41 8 1 28 132 19 41 8 1 28 132 + 20 40 37 131 20 41 37 131 21 41 36 131 21 41 36 131 21 41 36 131 21 + 41 4 2 31 131 20 41 3 14 20 131 20 41 3 25 9 132 19 41 2 28 7 132 19 + 42 1 30 5 134 17 73 5 135 16 74 4 140 11 74 4 142 9 75 3 145 7 75 2 + 145 7 75 2 146 6 76 1 146 6 223 6 224 5 224 5 224 5 224 5 225 2 37 0 + + + + 23129.0 + + + 2.26732673267 + + + 6627.0 + + + 0.223328806398 + + + 0.832115067201 + + + 0.486065113743 0.469960766561 0.895235752345 0.0643595326551 + -0.0271294056131 0.123837202835 -0.00130528291086 0.00695100211913 + 0.000974944438108 + + + 229.0 + + + 1.0480349345 2.39603960396 + + + 0.768558951965 2.75982532751 0.244541484716 0.419213973799 + 1.46534653465 3.60396039604 3.44554455446 1.06930693069 + + + 101.0 + + + 32.0 127.0 0.282816229117 17.0 3.0 11.0 + + + 0.0 0.990099009901 + + + 0.286523412167 + + + 0.308070175439 0.454035087719 0.668771929825 0.267881241565 + 0.136140350877 0.567719298246 0.185263157895 0.0 0.0 + 0.0161403508772 0.200701754386 0.0 0.346206896552 0.708965517241 + 0.508275862069 0.230769230769 + + + 0.0 0.0 0.0 0.552197802198 0.950549450549 0.857142857143 + 0.612637362637 0.0 0.459770114943 0.740053050398 0.514367816092 + 0.708222811671 0.437665782493 0.442528735632 0.405835543767 + 0.0557029177719 0.0446428571429 0.491758241758 0.747023809524 + 0.741758241758 0.318681318681 0.0 0.0 0.0 0.0 0.0 0.204022988506 + 0.575596816976 0.392572944297 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0610079575597 0.379310344828 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.18956043956 0.220238095238 0.0 0.0 0.00862068965517 + 0.424403183024 0.465517241379 0.570291777188 0.740053050398 + 0.727011494253 0.684350132626 0.238726790451 0.0201149425287 + 0.880636604775 0.876436781609 0.917771883289 0.450928381963 + 0.100574712644 0.0 0.0 + + + 0.120078176572 0.362202551808 0.144200542667 0.0506122498177 + 0.170018831872 0.394937542603 0.266585830094 0.128771947951 + 0.0504324955741 0.0568500387447 0.11593984523 0.20472327027 + 0.285032312161 0.203247909704 + + + + + + + + + 39 3 14 4 25 4 13 6 23 5 13 5 3 7 7 12 13 34 13 34 13 34 12 35 12 35 + 12 35 12 35 12 20 1 14 12 35 13 34 12 35 12 35 12 35 12 35 12 35 12 + 35 13 34 13 34 13 34 13 35 12 34 13 34 12 35 11 36 12 36 11 35 13 34 + 12 36 11 36 11 36 11 4 2 2 2 26 10 1 1 3 2 2 1 27 11 18 2 16 11 36 12 + 35 12 8 1 26 12 7 4 7 1 16 12 35 13 34 12 36 11 35 13 34 12 4 5 26 13 + 2 14 7 5 6 13 3 14 1 5 1 2 1 1 7 12 3 19 6 1 6 12 2 24 1 1 7 12 2 25 + 8 13 1 25 8 39 1 1 6 41 5 42 5 42 6 42 5 41 6 40 1 1 5 42 5 42 5 42 5 + 43 4 42 5 42 5 42 4 43 4 1 1 40 7 40 6 42 5 43 4 42 5 6 1 35 4 8 1 34 + 6 6 2 4 2 21 1 5 6 5 1 2 11 7 7 1 4 2 6 9 13 5 21 8 15 4 20 8 17 2 20 + 5 1 1 18 1 21 5 17 5 20 5 19 1 21 7 17 3 21 6 16 4 21 6 18 2 20 7 40 + 6 41 6 41 6 42 5 42 5 42 5 42 5 42 5 41 6 11 1 6 1 22 6 42 6 41 6 42 + 5 42 5 42 4 43 5 42 6 41 5 42 5 42 6 41 6 41 5 42 5 42 6 41 6 20 1 19 + 7 41 6 41 6 41 6 41 6 41 7 40 7 40 7 7 13 20 7 6 19 15 5 8 23 10 6 8 + 22 12 5 7 23 11 9 4 25 1 16 4 43 4 43 4 43 5 43 4 44 3 44 2 43 4 257 + 9 1 2 35 6 3 3 37 5 3 3 37 3 4 5 36 1 8 2 43 1 1 1 45 3 44 3 46 1 + + + + 6862.0 + + + 0.321917808219 + + + 3642.0 + + + 0.182042833608 + + + 1.01131795411 + + + 0.548707112671 0.456018860422 0.0377226411094 0.423094447382 + 0.00141196115709 -0.000722825752824 -0.00136408054781 + 0.00442764641001 -0.0285263807184 + + + 47.0 + + + 2.63829787234 0.438356164384 + + + 2.21276595745 2.29787234043 2.04255319149 3.40425531915 + 0.27397260274 0.547945205479 0.575342465753 0.356164383562 + + + 146.0 + + + 18.0 68.0 0.203084832905 13.0 5.0 1.0 + + + 0.0 0.993150684932 + + + 0.530749052754 + + + 0.318181818182 0.108108108108 0.603535353535 0.304668304668 + 0.905092592593 0.279279279279 0.863425925926 0.281531531532 + 0.898148148148 0.31981981982 0.888888888889 0.317567567568 + 0.578703703704 0.540540540541 0.803240740741 0.459459459459 + + + 0.0 0.0 0.0 0.0 0.233333333333 0.244444444444 0.0444444444444 0.0 + 0.555555555556 0.611111111111 0.407407407407 0.0 0.814814814815 1.0 + 0.907407407407 0.19298245614 0.851851851852 0.935185185185 + 0.555555555556 0.0 0.842592592593 0.990740740741 0.601851851852 0.0 + 0.833333333333 1.0 0.592592592593 0.0 0.62962962963 0.990740740741 + 0.555555555556 0.0 0.768518518519 1.0 0.62962962963 0.0 + 0.722222222222 1.0 0.574074074074 0.0 0.824074074074 1.0 + 0.685185185185 0.0 0.833333333333 1.0 0.666666666667 + 0.0614035087719 0.916666666667 1.0 0.916666666667 0.377192982456 + 0.87037037037 1.0 0.842592592593 0.149122807018 0.166666666667 + 0.231481481481 0.398148148148 0.482456140351 0.592592592593 0.75 + 0.666666666667 0.210526315789 + + + 0.48260879766 0.197501389026 0.0363252600642 0.020996637102 + 0.0915100165641 0.480556137114 0.086007516918 0.142086036198 + 0.0693357088023 0.0184595903431 0.18890021834 0.454136729149 + 0.248828256091 0.030337459435 + + + + + + + + + 37 1 41 1 40 2 14 1 3 1 9 14 5 2 2 33 4 39 3 39 3 39 3 39 3 39 3 39 3 + 39 3 39 3 39 3 39 3 39 3 39 3 40 2 40 2 40 2 40 2 40 2 40 2 40 2 34 8 + 3 3 28 8 36 1 3 2 40 3 39 3 39 3 40 2 40 2 40 2 40 2 40 2 40 2 40 3 + 39 3 39 3 39 3 39 3 40 2 40 2 40 2 37 2 1 3 34 8 2 4 19 100 2 40 3 37 + 0 + + + + 2142.0 + + + 0.823529411765 + + + 1679.0 + + + 0.132221560453 + + + 1.02089337176 + + + 0.482909397289 0.492162001191 0.0762249854267 0.0924123238503 + 0.00203825688242 6.08779363266e-05 0.000483157441106 + -5.79240256202e-05 -1.67820349053e-05 + + + 42.0 + + + 0.285714285714 0.137254901961 + + + 0.571428571429 0.0 0.0 0.571428571429 0.235294117647 0.0 + 0.156862745098 0.156862745098 + + + 51.0 + + + 1.0 9.0 0.189189189189 2.0 2.0 2.0 + + + 0.0 0.980392156863 + + + 0.783846872082 + + + 0.641666666667 1.0 0.892307692308 0.546153846154 0.681818181818 1.0 + 1.0 0.692307692308 0.725 1.0 1.0 0.669230769231 0.560606060606 + 0.741258741259 0.825174825175 0.545454545455 + + + 0.233333333333 1.0 1.0 1.0 0.833333333333 0.771428571429 0.6 + 0.342857142857 0.333333333333 1.0 1.0 1.0 0.966666666667 1.0 1.0 + 0.314285714286 0.4 1.0 1.0 1.0 1.0 1.0 1.0 0.428571428571 + 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.428571428571 0.4 1.0 1.0 + 1.0 1.0 1.0 1.0 0.428571428571 0.5 1.0 1.0 1.0 1.0 1.0 1.0 + 0.342857142857 0.5 1.0 1.0 0.933333333333 0.933333333333 1.0 1.0 + 0.285714285714 0.305555555556 0.5 0.547619047619 0.555555555556 + 0.555555555556 0.833333333333 0.916666666667 0.119047619048 + + + 0.403633224073 0.0272853420869 0.00469742877706 0.00398463632455 + 0.0443186014196 0.0440689201491 0.0756829634606 0.00799551863901 + 0.0120701252567 0.00549649501344 0.172622790302 0.0125261167719 + 0.13195367445 0.0200318667131 + + + + + + + + + 38 1 42 1 42 1 42 1 42 1 42 1 42 1 6 3 32 2 6 16 17 4 6 37 6 37 6 37 + 6 37 6 37 6 38 5 38 5 37 6 38 5 38 5 38 5 39 2 42 1 85 2 40 5 38 5 38 + 5 38 5 38 5 37 6 4 1 32 6 4 1 33 6 37 6 3 1 32 7 3 1 33 6 37 6 37 6 + 37 6 37 6 37 6 37 6 37 6 7 1 29 6 37 6 37 6 30 1 6 6 38 6 37 6 37 6 + 37 6 37 7 36 22 21 40 3 41 2 42 1 42 1 1 0 + + + + 2451.0 + + + 0.754385964912 + + + 1675.0 + + + 0.131343283582 + + + 1.06004288778 + + + 0.514683724236 0.531417910448 0.0731558679226 0.0991935983615 + 0.0093617417568 -0.0004257708146 0.00125935665251 + -0.000912312828053 0.000640929303768 + + + 43.0 + + + 0.186046511628 0.140350877193 + + + 0.186046511628 0.093023255814 0.0 0.46511627907 0.140350877193 0.0 + 0.280701754386 0.140350877193 + + + 57.0 + + + 6.0 30.0 0.116883116883 0.0 3.0 2.0 + + + 0.0 0.982456140351 + + + 0.683394532844 + + + 0.364285714286 0.828571428571 0.6 0.36 0.409090909091 1.0 1.0 + 0.660606060606 0.357142857143 1.0 1.0 0.733333333333 0.311688311688 + 0.798701298701 0.798701298701 0.678787878788 + + + 0.0 0.6 0.6 0.714285714286 0.314285714286 0.2 0.142857142857 0.0 + 0.0 0.857142857143 1.0 1.0 0.885714285714 1.0 1.0 0.35 0.0 + 0.857142857143 1.0 1.0 1.0 1.0 0.97619047619 0.375 0.0 + 0.771428571429 1.0 1.0 1.0 1.0 1.0 0.375 0.0 0.714285714286 1.0 1.0 + 1.0 1.0 1.0 0.5 0.0 0.714285714286 1.0 1.0 1.0 1.0 1.0 0.5 0.0 + 0.771428571429 1.0 1.0 1.0 1.0 0.971428571429 0.5 0.166666666667 + 0.333333333333 0.5 0.761904761905 0.595238095238 0.666666666667 + 0.738095238095 0.5625 + + + 0.486585872357 0.0435746371151 0.00568312922904 0.0116534473395 + 0.0815180236604 0.0765989091148 0.0570016780352 0.00554608243371 + 0.0230541227106 0.00444072900611 0.197328732356 0.0304161900149 + 0.131266227214 0.030362039587 + + + + + + + + + 30 3 101 3 101 3 101 3 101 3 101 4 100 5 101 1 554 1 68 1 32 3 68 13 + 5 4 1 13 68 36 68 35 69 36 68 36 68 36 68 36 68 36 68 36 68 36 68 36 + 68 36 68 36 69 35 69 35 69 35 69 35 69 35 69 35 69 35 69 35 69 35 69 + 35 69 35 69 35 69 35 69 35 69 35 37 1 32 34 37 1 32 34 37 1 32 34 37 + 2 31 34 37 2 31 34 37 2 30 35 37 3 29 35 37 3 28 36 30 1 6 7 24 37 16 + 15 5 16 4 3 7 69 5 99 5 99 6 98 6 36 12 4 10 36 6 17 2 16 28 35 6 16 + 5 14 29 34 6 17 4 14 29 34 6 18 1 16 29 35 5 35 29 34 5 36 29 34 5 37 + 28 35 4 38 26 36 4 38 26 37 2 38 27 38 1 38 27 78 26 39 2 37 25 39 3 + 36 27 38 4 35 28 37 5 34 29 35 6 34 29 34 7 34 29 34 7 4 1 29 29 34 7 + 34 29 34 7 35 28 34 7 35 28 34 7 35 28 34 8 34 28 34 8 34 28 34 8 34 + 28 34 8 34 28 34 8 34 28 34 8 35 27 34 8 35 27 34 8 35 27 34 8 35 27 + 34 8 35 27 34 9 34 27 34 9 3 1 30 27 34 9 2 7 25 27 7 1 16 5 5 10 1 + 23 1 2 6 28 3 27 3 10 1 28 4 28 2 29 2 10 1 29 4 27 1 31 1 10 1 29 4 + 26 2 42 1 30 3 26 2 73 3 27 1 74 2 102 2 102 2 103 1 63 0 + + + + 10608.0 + + + 1.01960784314 + + + 4382.0 + + + 0.138064810589 + + + 1.0016497113 + + + 0.494853172511 0.578954860342 0.175900395384 0.1065859149 + 0.00623321007822 0.00389484171804 -0.00141027120656 0.026154249958 + -0.0143349933074 + + + 104.0 + + + 0.240384615385 0.764705882353 + + + 0.269230769231 0.5 0.153846153846 0.0384615384615 0.117647058824 + 0.352941176471 1.13725490196 1.37254901961 + + + 102.0 + + + 3.0 27.0 0.186495176849 7.0 2.0 3.0 + + + 0.0 0.990196078431 + + + 0.413084464555 + + + 0.0 0.0325443786982 0.896923076923 0.492603550296 0.370769230769 + 0.729289940828 0.54 0.366863905325 0.273846153846 0.616863905325 + 0.56 0.275147928994 0.0 0.0236686390533 0.893846153846 + 0.545857988166 + + + 0.0 0.0 0.0 0.130177514793 0.878205128205 0.822485207101 + 0.633136094675 0.118343195266 0.0 0.0 0.0 0.0 0.884615384615 1.0 + 1.0 0.218934911243 0.160256410256 0.461538461538 0.473372781065 + 0.443786982249 0.878205128205 0.94674556213 1.0 0.319526627219 0.0 + 0.816568047337 1.0 1.0 0.346153846154 0.0 0.0295857988166 + 0.118343195266 0.0 0.840236686391 1.0 1.0 0.352564102564 + 0.00591715976331 0.0 0.0 0.0 0.213017751479 0.230769230769 + 0.236686390533 0.961538461538 0.934911242604 0.846153846154 + 0.254437869822 0.0 0.0 0.0 0.0355029585799 1.0 1.0 1.0 + 0.230769230769 0.0 0.0 0.0 0.0591715976331 0.705128205128 + 0.863905325444 0.769230769231 0.183431952663 + + + 0.354372864526 0.0748623627348 0.0541806507673 0.139296134523 + 0.124060868311 0.113560308778 0.0176492960304 0.135371334239 + 0.306584892783 0.0334953787946 0.207222817639 0.0215226347882 + 0.0742919973432 0.0240072516239 + + + + + + + + + 39 3 58 4 55 2 59 1 60 3 1 3 55 6 55 6 55 7 54 7 53 9 15 1 37 10 13 1 + 37 10 13 2 36 12 11 2 21 1 14 13 10 3 20 2 13 14 9 6 16 3 13 14 9 15 + 7 3 12 16 8 18 4 3 12 16 8 25 12 17 7 25 12 18 6 12 2 11 12 18 6 12 2 + 11 12 19 5 12 2 11 12 20 4 12 2 1 1 3 1 5 12 18 1 2 3 10 11 4 12 3 2 + 12 7 10 6 1 4 4 12 2 4 9 9 10 6 1 4 4 12 3 3 3 2 4 9 5 2 3 4 5 2 4 12 + 3 3 3 3 2 11 3 3 4 3 12 11 2 4 3 3 2 11 10 3 12 11 3 4 3 14 11 3 12 + 11 3 21 12 2 12 11 3 21 12 1 13 11 3 21 26 11 3 1 1 14 1 5 10 3 5 1 6 + 11 3 1 1 14 2 4 10 3 12 12 2 1 1 7 1 1 3 1 4 3 11 2 12 11 3 1 2 6 5 1 + 4 3 10 4 11 13 1 1 3 1 1 3 5 1 4 3 4 3 3 4 11 13 8 1 6 1 4 3 3 6 1 3 + 12 13 15 1 1 2 1 3 4 2 19 15 18 3 25 11 1 1 1 2 17 3 25 12 1 4 16 3 + 25 11 3 2 18 2 5 1 19 11 3 2 18 2 4 2 19 11 4 1 12 1 5 3 4 1 19 11 23 + 3 24 11 23 3 24 11 2 2 18 4 24 11 2 4 16 4 24 11 2 4 16 4 5 2 17 11 2 + 5 15 4 5 1 2 1 15 11 2 6 2 1 12 3 24 11 2 7 14 3 24 11 2 7 14 3 24 11 + 2 8 13 4 3 1 19 11 2 10 11 8 19 11 2 10 11 14 13 11 3 9 12 18 8 10 4 + 10 11 19 8 9 5 8 12 19 8 10 5 8 11 20 7 10 5 9 10 21 6 9 6 10 8 22 6 + 9 6 11 7 22 6 9 5 2 3 7 1 2 3 22 8 9 5 1 2 39 4 10 7 41 2 11 10 38 2 + 11 12 37 1 11 13 36 1 11 14 35 1 11 15 34 1 11 16 33 1 11 17 32 1 11 + 18 31 1 11 19 42 21 40 22 39 23 38 23 38 23 38 23 38 23 38 17 1 4 39 + 9 2 6 4 1 39 3 1 5 3 4 45 9 4 4 2 3 39 10 3 9 39 11 2 9 39 17 1 4 39 + 16 2 4 39 17 2 3 39 11 1 4 3 3 39 11 3 2 4 2 39 6 9 1 4 2 59 3 58 3 + 58 3 58 3 38 1 19 3 38 6 9 1 2 5 38 23 38 23 38 23 38 23 38 3 1 13 2 + 4 38 3 2 18 38 2 5 16 38 2 6 15 38 2 7 13 39 2 8 12 39 2 9 12 38 2 10 + 11 38 2 11 10 38 2 12 9 38 2 14 7 38 2 15 6 38 2 19 2 38 3 18 2 38 3 + 17 3 37 4 16 1 1 2 36 6 16 3 36 5 56 5 56 6 55 6 55 6 57 2 59 2 60 1 + 60 1 60 1 60 1 22 0 + + + + 8174.0 + + + 0.455223880597 + + + 2760.0 + + + 0.353985507246 + + + 1.18294496777 + + + 0.57663647343 0.416181758745 0.113639911644 0.332499433805 + 0.0857055451677 -0.0175479010475 0.0321516813961 -0.0124018818581 + 0.0977038557483 + + + 61.0 + + + 2.3606557377 1.55223880597 + + + 1.6393442623 0.524590163934 2.95081967213 4.32786885246 + 1.76119402985 2.89552238806 0.835820895522 0.65671641791 + + + 134.0 + + + 38.0 85.0 0.24358974359 15.0 0.0 6.0 + + + 0.0 0.992537313433 + + + 0.337655982383 + + + 0.452525252525 0.580392156863 0.0 0.0 0.30303030303 0.670588235294 + 0.030303030303 0.0 0.389898989899 0.305882352941 0.460606060606 + 0.249019607843 0.267045454545 0.694852941176 0.549242424242 + 0.404411764706 + + + 0.133928571429 0.941176470588 0.739495798319 0.27731092437 0.0 0.0 + 0.0 0.0 0.0 0.713235294118 0.830882352941 0.455882352941 0.0 0.0 + 0.0 0.0 0.0 0.739495798319 0.991596638655 0.672268907563 0.0 0.0 + 0.0 0.0 0.046875 0.411764705882 0.5 0.558823529412 0.1171875 0.0 + 0.0 0.0 0.03125 0.125 0.0808823529412 0.161764705882 0.125 + 0.0955882352941 0.125 0.191176470588 0.785714285714 0.705882352941 + 0.655462184874 0.378151260504 0.991071428571 0.739495798319 + 0.453781512605 0.252100840336 0.25 0.676470588235 0.786764705882 + 0.507352941176 0.8125 0.580882352941 0.676470588235 0.0 0.0 0.125 + 0.661764705882 0.823529411765 0.3515625 0.455882352941 + 0.801470588235 0.139705882353 + + + 0.573295836813 0.118900425989 0.0990891108492 0.0674109845884 + 0.346735354402 0.253786871646 0.050691554526 0.15824116216 + 0.13627628298 0.0551830439488 0.0553014897994 0.223247335466 + 0.0962805580636 0.0265176445296 + + + + + + + + + 5 2 1 5 4 4 1 5 5 4 1 1 2 1 5 10 4 3 3 2 4 6 1 1 5 5 2 2 6 3 3 2 6 4 + 8 6 9 2 11 3 11 3 13 1 11 0 + + + + 196.0 + + + 1.0 + + + 75.0 + + + 1.05333333333 + + + 0.786666666667 + + + 0.437948717949 0.380512820513 0.162123851852 0.168139851852 + -0.11257362963 0.0193816014363 -0.0229387679233 0.00493974344164 + 0.0293825046536 + + + 14.0 + + + 0.714285714286 0.571428571429 + + + 0.571428571429 0.571428571429 1.14285714286 0.571428571429 + 1.14285714286 0.571428571429 0.285714285714 0.0 + + + 14.0 + + + 7.0 15.0 0.2 0.0 2.0 2.0 + + + 0.0 0.928571428571 + + + 0.382653061224 + + + 0.0 0.25 0.555555555556 0.75 0.75 0.8125 0.666666666667 0.0 + 0.666666666667 0.583333333333 0.222222222222 0.0 0.583333333333 + 0.375 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.5 0.0 0.0 0.0 0.75 0.5 0.75 1.0 0.75 + 0.0 0.75 0.5 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 0.75 0.0 0.5 0.0 0.0 + 0.0 0.5 0.5 0.5 0.0 0.0 0.0 0.0 1.0 0.75 0.5 0.75 1.0 0.0 0.0 0.0 + 1.0 0.5 1.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.5 0.0 0.0 0.0 0.0 0.0 + + + 0.390510800484 0.192456383196 0.11156707384 0.0963426346214 + 0.185005756915 0.199011251657 0.125157842361 0.11878826123 + 0.0343110377568 0.119381203946 0.014319569653 0.0889986228222 + 0.152206442892 0.0842446171759 + + + + + + + + + 0 1 1 1 1 11 1 3 1 4 1 1 2 0 + + + + 28.0 + + + 0.571428571429 + + + 21.0 + + + 1.33333333333 + + + 0.631578947368 + + + 0.428571428571 0.468253968254 0.0505344995141 0.147932188749 + -0.0019436345967 0.00218127003984 -0.000585711399588 + -0.00244383032242 0.00466325014691 + + + 4.0 + + + 0.25 0.142857142857 + + + 0.0 0.0 0.0 1.0 0.571428571429 0.0 0.0 0.0 + + + 7.0 + + + 2.0 3.0 0.142857142857 0.0 2.0 2.0 + + + 0.0 0.857142857143 + + + 0.75 + + + 1.0 1.0 1.0 0.5 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 1.0 0.0 0.5 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 + 1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 + + + 0.194453586747 0.186750687727 0.0296711194487 0.045680248402 + 0.0623551414349 0.0780506920798 0.0166392718339 0.0785251325528 + 0.0680741148189 0.0997456028159 0.0893071922821 0.0550132557845 + 0.177995612541 0.0821738977449 + + + + + + + + + 71 1 107 2 106 5 103 5 92 1 1 7 2 5 92 10 1 5 92 4 1 4 2 5 92 1 1 1 2 + 1 1 9 92 1 1 1 2 10 93 1 7 1 3 3 113 3 105 4 104 5 103 3 2 1 102 3 + 105 2 1165 1 105 5 104 2 73 4 18 16 64 1 4 4 14 18 50 6 2 12 3 12 2 + 13 1 9 46 14 11 5 3 1 5 3 1 2 9 7 57 10 6 8 20 5 63 6 4 12 11 17 1 1 + 56 53 2 5 58 1 3 7 6 2 1 2 7 21 65 4 18 20 58 3 1 7 20 17 1 3 57 4 26 + 23 85 6 7 11 9 6 71 2 10 11 10 3 84 16 4 5 82 31 2 8 66 17 3 21 66 33 + 5 4 65 33 5 2 1 1 66 20 3 9 6 4 66 21 6 2 11 1 1 1 66 22 3 2 81 6 3 + 15 2 1 80 8 2 13 86 8 1 14 85 24 85 22 86 7 1 12 87 15 1 3 89 15 2 1 + 91 7 1 6 1 2 85 1 5 14 2 2 79 7 4 19 78 7 3 25 73 6 5 24 73 5 6 25 72 + 5 6 11 4 4 5 1 71 6 7 9 5 3 90 10 5 2 92 11 3 2 92 10 97 10 99 9 104 + 4 104 4 105 2 33 0 + + + + 7992.0 + + + 1.45945945946 + + + 1179.0 + + + 0.581000848176 + + + 1.14475025484 + + + 0.615625470659 0.59192257195 0.350412441597 0.215638124169 + 0.0855009042975 -0.214565828894 0.0131684679904 -0.0538473820067 + -0.0635514750409 + + + 108.0 + + + 1.17592592593 1.05405405405 + + + 0.518518518519 0.962962962963 2.03703703704 1.18518518519 + 0.702702702703 0.972972972973 1.35135135135 0.972972972973 + + + 74.0 + + + 9.0 58.0 0.269480519481 18.0 4.0 3.0 + + + 0.0 0.986486486486 + + + 0.147522522523 + + + 0.0 0.148148148148 0.0123456790123 0.0 0.0 0.228070175439 + 0.0267489711934 0.0 0.183127572016 0.179337231969 0.598765432099 + 0.485380116959 0.0308641975309 0.0 0.358024691358 0.111111111111 + + + 0.0 0.0 0.0 0.192307692308 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.364285714286 0.047619047619 0.0 0.0 0.0 0.0 0.0 0.0 + 0.423076923077 0.102564102564 0.0 0.0 0.0 0.0 0.0 0.0 + 0.442857142857 0.00793650793651 0.0 0.0 0.0 0.222222222222 + 0.00854700854701 0.00854700854701 0.607692307692 0.42735042735 + 0.179487179487 0.324786324786 0.107692307692 0.412698412698 + 0.0793650793651 0.0 0.0857142857143 0.793650793651 0.952380952381 + 0.952380952381 0.55 0.0 0.128205128205 0.0 0.0 0.452991452991 + 0.632478632479 0.384615384615 0.0923076923077 0.0 0.0 0.0 0.0 + 0.261904761905 0.111111111111 0.0 0.0 + + + 0.675078337166 0.0538217209801 0.117276464307 0.0456651202799 + 0.643361639613 0.129778519592 0.061034699184 0.299673935218 + 0.0717429571931 0.0445725374643 0.442044318627 0.241185390997 + 0.143184921653 0.0386668881784 + + + + + + + + + 61 4 144 5 143 6 144 4 146 3 146 3 146 3 145 4 115 9 21 4 114 27 4 4 + 114 35 114 35 114 36 113 36 114 35 114 35 114 35 114 35 114 35 114 35 + 114 35 114 35 115 34 115 34 115 34 115 34 115 34 115 34 115 34 115 35 + 114 4 1 30 114 35 114 35 114 35 115 34 115 34 115 34 115 34 115 34 16 + 1 98 34 12 7 96 34 12 9 95 33 7 1 4 5 1 5 93 34 6 1 3 4 1 3 2 1 94 34 + 6 15 94 34 6 17 92 34 6 4 1 12 92 34 6 4 1 12 92 34 6 16 93 34 6 16 + 63 1 29 34 6 16 63 2 28 34 6 16 5 1 57 14 5 3 7 4 10 21 6 16 4 2 57 + 11 6 16 22 9 6 16 4 3 56 3 5 2 7 4 2 10 26 5 6 18 1 4 56 6 1 2 8 16 + 26 5 6 25 2 4 48 5 12 16 26 5 6 32 47 5 4 2 8 14 26 5 5 34 45 12 1 1 + 4 17 25 4 6 34 45 36 23 5 5 37 43 36 23 5 5 39 41 35 26 2 6 39 41 35 + 26 3 5 39 41 36 25 2 6 40 13 1 26 37 32 3 1 36 12 1 25 39 24 3 5 3 1 + 6 1 25 2 2 40 36 25 3 6 34 2 4 12 3 25 35 34 34 2 3 6 3 2 4 26 34 35 + 16 1 17 2 3 6 11 24 35 34 15 3 16 2 2 7 12 23 35 39 11 2 21 6 13 22 + 35 43 8 1 21 6 14 21 35 44 6 3 20 5 17 20 2 4 11 1 17 43 5 4 14 3 3 5 + 17 19 4 1 31 42 5 5 14 3 3 5 19 17 4 1 31 42 5 4 16 2 2 6 21 15 4 3 + 29 43 5 2 17 1 3 6 22 14 6 1 29 33 2 7 29 6 23 13 36 34 1 7 29 5 24 + 14 35 43 24 1 2 6 25 13 35 47 1 1 1 3 14 9 27 11 35 54 13 9 28 10 35 + 55 12 9 29 10 1 2 31 55 3 4 4 10 29 10 1 1 15 1 2 2 12 54 3 5 2 12 31 + 16 9 1 13 57 5 4 2 11 32 7 1 1 15 1 8 63 5 15 29 1 4 6 18 3 5 3 2 62 + 3 13 11 1 16 3 4 5 1 2 14 4 5 3 2 62 4 12 10 2 16 3 2 10 24 1 4 61 4 + 12 11 1 15 17 3 2 26 58 4 5 1 6 26 6 1 16 5 1 21 58 3 4 2 6 26 5 1 14 + 8 2 1 1 18 58 4 11 27 17 10 1 21 58 5 2 1 7 26 20 8 3 19 58 9 6 26 33 + 2 1 14 61 5 6 27 40 10 62 4 10 1 1 21 43 7 63 3 12 22 5 2 36 6 63 2 + 13 22 5 3 36 5 78 5 1 17 4 3 38 3 61 2 13 25 4 2 40 3 60 3 12 4 1 21 + 2 3 40 3 60 4 13 2 1 27 40 2 60 1 21 6 2 17 41 1 82 6 2 17 121 10 1 + 17 113 36 113 4 2 30 114 34 117 32 118 31 120 29 121 28 123 8 1 17 + 124 1 8 16 134 4 2 9 134 15 127 21 129 20 129 1 1 18 131 20 131 17 + 133 15 135 15 134 14 134 15 140 8 142 6 144 5 144 5 146 3 148 1 4 0 + + + + 19519.0 + + + 1.13740458015 + + + 5529.0 + + + 0.2222825104 + + + 1.32097511427 + + + 0.484540970705 0.498007707612 0.335529308293 0.143422961043 + 0.114846383243 0.0435659994562 0.0196516269924 0.0706013134454 + -0.00623333837146 + + + 149.0 + + + 1.1677852349 1.7786259542 + + + 1.61073825503 0.536912751678 1.20805369128 1.23489932886 + 0.0916030534351 2.07633587786 3.96946564885 0.732824427481 + + + 131.0 + + + 28.0 121.0 0.232970027248 21.0 5.0 7.0 + + + 0.0 0.992366412214 + + + 0.283262462216 + + + 0.136824324324 0.4095004095 0.725634725635 0.000819000819001 + 0.572635135135 0.55773955774 0.0647010647011 0.013104013104 0.0 + 0.477477477477 0.423423423423 0.00819000819001 0.0 0.00159489633174 + 0.601275917065 0.526315789474 + + + 0.0 0.0 0.0 0.625 0.788194444444 0.398692810458 0.0 0.0 + 0.200657894737 0.332236842105 0.244582043344 0.792763157895 + 0.996710526316 0.724458204334 0.00328947368421 0.0 0.444444444444 + 1.0 1.0 0.180555555556 0.0833333333333 0.133986928105 + 0.0555555555556 0.0 0.325657894737 0.536184210526 0.625386996904 + 0.398026315789 0.0460526315789 0.0 0.0 0.0 0.0 0.0 0.386996904025 + 0.934210526316 0.572368421053 0.0 0.0 0.0 0.0 0.0 0.0 + 0.604166666667 0.878472222222 0.294117647059 0.0347222222222 0.0 + 0.0 0.0 0.0 0.00657894736842 0.671052631579 0.777089783282 0.5625 + 0.030959752322 0.0 0.0 0.0 0.0 0.263157894737 0.678018575851 + 0.911184210526 0.625386996904 + + + 0.432180946875 0.163410088021 0.148879441238 0.120231682282 + 0.0653940607944 0.300389236755 0.0637187671526 0.200614577367 + 0.208666024159 0.0997400616598 0.117511183608 0.212107658509 + 0.0402427906879 0.0614949459275 + + + + + + + + + 23 3 51 1 7 18 41 31 38 32 37 37 33 37 32 38 32 38 31 39 31 39 31 38 + 33 37 32 38 32 39 31 39 32 37 33 37 33 37 33 37 33 16 1 20 32 38 33 + 37 33 37 33 37 33 37 33 37 33 37 33 37 34 36 34 36 34 36 34 36 34 36 + 33 37 34 36 34 37 33 55 9 1 5 65 5 65 5 66 4 66 4 66 4 20 1 45 5 2 1 + 2 22 38 33 37 33 37 33 37 33 37 33 37 32 39 31 40 29 41 29 40 30 39 + 33 37 34 36 34 35 35 35 35 35 35 35 34 36 34 36 34 36 35 35 35 35 35 + 35 34 36 34 36 34 36 34 36 35 35 35 35 35 35 35 35 35 35 34 36 35 35 + 35 15 1 19 35 5 20 10 35 3 28 4 35 2 30 3 36 1 31 2 3 0 + + + + 5740.0 + + + 0.853658536585 + + + 3030.0 + + + 0.113861386139 + + + 1.51929824561 + + + 0.494542497728 0.485723016746 0.111342225305 0.152517656167 + 0.0876239265138 -0.000209945412095 0.000399533218201 + 1.48244459654e-05 0.00118297247049 + + + 70.0 + + + 0.157142857143 0.134146341463 + + + 0.171428571429 0.342857142857 0.114285714286 0.0 0.0975609756098 + 0.0487804878049 0.146341463415 0.19512195122 + + + 82.0 + + + 2.0 9.0 0.14375 0.0 2.0 1.0 + + + 0.0 0.987804878049 + + + 0.52787456446 + + + 0.852941176471 0.910364145658 0.1 0.0 0.95 1.0 0.308333333333 + 0.177248677249 0.164705882353 0.375350140056 1.0 0.812324929972 0.0 + 0.179894179894 0.891666666667 0.724867724868 + + + 0.65 0.925 0.8625 0.761363636364 0.2 0.0 0.0 0.0 0.822222222222 1.0 + 1.0 1.0 0.2 0.0 0.0 0.0 0.933333333333 0.988888888889 1.0 1.0 + 0.188888888889 0.0 0.0 0.0 0.877777777778 1.0 1.0 1.0 + 0.588888888889 0.455555555556 0.4 0.313131313131 0.3 0.4 0.375 + 0.670454545455 1.0 1.0 1.0 0.659090909091 0.0 0.0 0.0 + 0.454545454545 1.0 1.0 1.0 0.626262626263 0.0 0.0 0.0 + 0.414141414141 1.0 1.0 1.0 0.676767676768 0.0 0.0 0.0 + 0.272727272727 0.811111111111 0.755555555556 0.666666666667 + 0.575757575758 + + + 0.410897012107 0.185584855296 0.00519592640539 0.00258662966424 + 0.0176449882897 0.346427165336 0.0711735949326 0.0107200192212 + 0.0103290580241 0.00672913836357 0.0685639474366 0.203575503265 + 0.0894034068209 0.0467125152425 + + + + + + + + + 36 1 68 1 34 1 33 1 34 1 32 2 33 2 32 2 33 2 32 2 33 2 32 2 33 3 30 3 + 33 36 33 36 33 36 33 36 33 36 33 36 33 35 34 34 35 35 34 36 33 35 34 + 35 34 36 33 36 33 36 33 36 33 36 33 36 33 36 33 36 33 36 33 4 2 30 33 + 36 33 35 34 36 33 36 32 37 33 37 32 37 31 38 32 36 33 35 30 3 1 35 31 + 2 1 35 31 1 2 35 31 1 2 35 31 1 2 36 29 2 2 36 11 11 7 2 2 36 3 28 3 + 67 2 67 2 67 2 67 2 2 27 38 2 1 31 34 3 1 31 34 3 2 30 35 2 1 32 34 + 35 34 35 33 36 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 32 38 + 1 2 22 43 32 36 35 36 33 36 2 1 2 2 26 34 35 34 35 34 35 34 35 34 35 + 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 35 34 + 35 34 9 19 7 34 5 27 3 34 3 29 3 35 2 30 2 35 1 32 1 35 1 67 4 30 1 + 67 2 + + + + 6693.0 + + + 0.711340206186 + + + 3084.0 + + + 0.143968871595 + + + 1.49367088608 + + + 0.508807316701 0.498317931258 0.122151613475 0.176975047109 + 0.102342079678 -0.000476258443949 0.00118770404741 + 7.29606597628e-05 0.00302644210363 + + + 69.0 + + + 0.521739130435 0.309278350515 + + + 0.231884057971 0.0 1.04347826087 0.521739130435 0.247422680412 + 0.412371134021 0.329896907216 0.247422680412 + + + 97.0 + + + 6.0 33.0 0.161716171617 4.0 2.0 6.0 + + + 0.0 0.989690721649 + + + 0.460779919319 + + + 0.654411764706 0.938725490196 0.127450980392 0.0 0.666666666667 1.0 + 0.132352941176 0.0 0.137254901961 0.237745098039 0.941176470588 + 0.738823529412 0.0 0.127314814815 0.965277777778 0.722222222222 + + + 0.40625 0.875 0.864583333333 0.875 0.260416666667 0.0 0.0 0.0 + 0.333333333333 1.0 1.0 1.0 0.25 0.0 0.0 0.0 0.333333333333 1.0 1.0 + 1.0 0.25 0.0 0.0 0.0 0.333333333333 1.0 1.0 1.0 0.277777777778 0.0 + 0.0 0.0 0.240740740741 0.277777777778 0.333333333333 0.388888888889 + 0.953703703704 0.824074074074 1.0 0.598290598291 0.0 0.0 0.0 + 0.197916666667 1.0 1.0 1.0 0.384615384615 0.0 0.0 0.0 + 0.240740740741 1.0 1.0 1.0 0.384615384615 0.0 0.0 0.0 + 0.268518518519 0.972222222222 0.888888888889 1.0 0.547008547009 + + + 0.452146246034 0.178083984659 0.0100287378422 0.00517123970907 + 0.0521962506318 0.385155977231 0.068816053351 0.0166604489467 + 0.00806540621101 0.00449926448357 0.12681958965 0.306594347846 + 0.131957702513 0.0421195746831 + + + + + + + + + 39 2 72 2 72 2 42 7 3 1 5 12 1 3 36 17 2 19 33 20 2 19 33 20 3 18 33 + 20 2 19 33 19 3 19 33 20 1 20 33 41 33 41 33 41 33 41 33 41 33 41 33 + 41 33 41 33 41 33 41 34 40 34 40 34 40 34 40 33 41 33 41 33 42 32 42 + 28 3 1 42 28 3 1 42 29 2 2 40 29 3 2 39 30 4 1 39 31 1 3 39 31 1 3 39 + 31 1 3 39 31 1 3 39 31 1 3 39 31 1 3 39 31 1 3 39 30 2 4 38 30 2 4 39 + 7 11 1 3 6 3 4 70 4 70 4 70 4 70 4 71 3 7 3 2 2 6 13 37 4 1 33 36 4 1 + 34 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 + 35 39 35 39 28 45 4 1 24 45 35 39 4 1 31 47 27 47 27 38 36 38 36 38 + 36 38 36 39 35 38 36 38 36 38 36 38 36 38 36 38 36 39 35 39 35 39 35 + 39 34 43 30 45 11 5 13 45 4 18 6 46 3 72 2 71 3 71 3 72 2 30 0 + + + + 6734.0 + + + 0.813186813187 + + + 3277.0 + + + 0.136710405859 + + + 1.46500308071 + + + 0.494041074989 0.469952192046 0.124548180266 0.159473106113 + 0.0948017234142 -0.000744042281248 0.00484019466579 0.0010832159388 + 0.00695581381903 + + + 74.0 + + + 0.378378378378 0.384615384615 + + + 0.0540540540541 0.108108108108 0.648648648649 0.540540540541 + 0.395604395604 0.747252747253 0.307692307692 0.0879120879121 + + + 91.0 + + + 4.0 22.0 0.132158590308 5.0 2.0 3.0 + + + 0.0 0.989010989011 + + + 0.486634986635 + + + 0.823232323232 0.946859903382 0.108695652174 0.0 0.818181818182 1.0 + 0.109839816934 0.0228832951945 0.204545454545 0.326086956522 + 0.95652173913 0.756038647343 0.0 0.199084668192 0.862700228833 + 0.659038901602 + + + 0.606060606061 0.979797979798 0.944444444444 0.838383838384 + 0.232323232323 0.0 0.0 0.0 0.707070707071 1.0 1.0 1.0 + 0.222222222222 0.0 0.0 0.0 0.535353535354 1.0 1.0 1.0 + 0.222222222222 0.0 0.0 0.0 0.727272727273 1.0 1.0 1.0 + 0.209090909091 0.025 0.0909090909091 0.0 0.373737373737 + 0.444444444444 0.453703703704 0.525252525253 1.0 0.833333333333 1.0 + 0.592592592593 0.0 0.0 0.0 0.343434343434 1.0 1.0 1.0 + 0.472222222222 0.0 0.0 0.0 0.343434343434 1.0 1.0 1.0 + 0.490740740741 0.0 0.0 0.141666666667 0.327272727273 0.809090909091 + 0.675 0.8 0.4 + + + 0.34211032927 0.207990394436 0.0413833614711 0.0240161907445 + 0.0406966866422 0.325699184148 0.0905125300986 0.0400841300999 + 0.0168155116844 0.0270399796365 0.0516205002736 0.17643971875 + 0.0780751717493 0.0621350490734 + + + + + + + + + 2 2 32 2 32 3 31 3 31 4 30 4 30 2 1 2 29 1 2 2 29 6 27 8 25 13 22 9 + 25 9 25 9 25 10 24 11 23 11 2 3 18 15 19 16 18 17 17 18 16 19 15 20 + 14 21 13 22 12 23 11 24 9 26 9 25 9 26 8 27 7 27 7 27 7 27 7 27 7 26 + 9 25 9 25 9 25 8 26 8 26 8 12 1 14 7 12 1 14 7 12 1 14 7 26 8 26 9 10 + 3 12 9 8 5 12 9 8 5 3 3 6 9 7 7 1 5 5 9 7 7 1 8 2 9 7 2 1 3 2 8 2 9 + 10 3 4 2 2 2 2 9 10 3 13 8 11 1 14 8 6 1 19 8 5 3 17 9 5 4 7 1 8 9 5 + 5 2 1 3 3 6 9 5 6 14 9 5 7 13 9 5 8 12 9 5 9 11 9 5 10 10 9 5 11 9 10 + 4 12 8 9 5 13 7 9 5 14 6 9 5 15 5 9 5 16 3 10 5 17 3 9 4 18 3 8 6 17 + 3 9 5 17 3 9 5 29 5 29 5 29 5 1 1 27 7 27 5 1 2 26 12 23 13 21 14 20 + 15 19 16 18 17 17 19 16 19 15 20 14 21 13 22 12 23 10 25 10 26 8 26 8 + 27 7 28 6 28 6 4 1 24 6 2 7 8 16 4 6 8 16 4 1 1 4 8 16 7 3 9 15 8 1 + 12 13 8 1 13 3 1 8 23 1 3 7 29 5 8 1 20 6 7 3 18 8 5 3 18 10 3 3 18 + 10 3 3 18 10 2 5 17 10 2 4 15 2 1 5 4 1 3 3 16 1 1 5 29 5 29 5 29 5 + 30 5 28 5 29 5 4 1 24 5 4 3 22 5 4 4 21 5 4 5 20 5 4 6 19 6 3 8 17 6 + 3 8 17 6 3 10 15 6 3 11 14 6 3 12 3 1 9 5 4 13 2 1 9 5 4 16 9 5 4 16 + 10 4 5 16 9 4 4 18 7 6 3 19 7 4 4 20 6 6 2 21 5 4 5 19 5 4 5 22 4 5 3 + 31 4 30 4 30 4 30 4 30 4 30 4 30 4 30 4 31 3 30 4 30 4 30 4 30 4 30 4 + 30 4 30 4 30 4 30 5 30 4 30 4 30 4 31 3 31 3 31 3 30 4 30 4 31 3 31 3 + 31 3 31 3 31 3 32 2 32 2 32 1 25 0 + + + + 5984.0 + + + 0.193181818182 + + + 2619.0 + + + 0.282168766705 + + + 1.11166396947 + + + 0.44010552258 0.444590628921 0.0280905063815 0.652676578146 + 0.0337434262523 0.00121383140533 -0.0187904954332 0.00333262787905 + 0.0458428265345 + + + 34.0 + + + 3.05882352941 0.505681818182 + + + 2.82352941176 4.23529411765 2.58823529412 2.0 0.136363636364 + 0.909090909091 0.772727272727 0.204545454545 + + + 176.0 + + + 14.0 57.0 0.279518072289 4.0 6.0 1.0 + + + 0.0 0.994318181818 + + + 0.437667112299 + + + 0.78125 0.664772727273 0.423295454545 0.306818181818 0.669191919192 + 0.421717171717 0.686868686869 0.131313131313 0.488636363636 0.5 + 0.931818181818 0.00568181818182 0.10101010101 0.156565656566 + 0.64898989899 0.151515151515 + + + 0.647727272727 0.727272727273 0.511363636364 0.420454545455 + 0.0113636363636 0.0 0.0113636363636 0.0 0.75 1.0 0.886363636364 + 0.840909090909 0.931818181818 0.75 0.806818181818 0.409090909091 + 0.477272727273 1.0 0.431818181818 0.409090909091 0.852272727273 + 0.465909090909 0.159090909091 0.431818181818 0.254545454545 + 0.972727272727 0.518181818182 0.327272727273 0.845454545455 + 0.572727272727 0.0 0.0 0.0681818181818 1.0 0.727272727273 + 0.170454545455 1.0 0.886363636364 0.0 0.0 0.0 0.886363636364 0.875 + 0.227272727273 0.863636363636 0.977272727273 0.0227272727273 0.0 + 0.0 0.454545454545 0.534090909091 0.170454545455 0.568181818182 1.0 + 0.215909090909 0.0 0.0 0.0 0.0 0.0 0.3 0.781818181818 + 0.372727272727 0.0 + + + 0.603176307657 0.16230148171 0.0280701355818 0.0121531916631 + 0.420956251741 0.439103311336 0.0801526515221 0.0342959695567 + 0.0503999951499 0.026742999461 0.13656917266 0.587494503059 + 0.23429542139 0.0460298938208 + + + + + + + + + 1 2 1 7 1 3 1 3 1 3 1 7 1 0 + + + + 32.0 + + + 0.5 + + + 25.0 + + + 1.16 + + + 0.740740740741 + + + 0.4 0.52 0.0352 0.201216 -0.00672 0.001152 0.00421632 0.0006272 + -0.003204096 + + + 4.0 + + + 0.25 0.0 + + + 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 + + + 8.0 + + + 2.0 2.0 0.0555555555556 0.0 3.0 1.0 + + + 0.0 0.875 + + + 0.78125 + + + 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.5 + + + 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.0 + 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 + + + 0.158246264287 0.280638573497 0.0533098481565 0.0375155180909 + 0.167261210005 0.0864634366467 0.158474633629 0.0876834529707 + 0.0462196862126 0.0416359407806 0.010217220039 0.10587226677 + 0.12500913496 0.090412490821 + + + + + + + + + 43 1 48 1 48 1 48 1 48 2 45 4 46 3 41 9 41 8 41 7 43 5 43 6 43 5 10 4 + 26 10 9 5 2 10 10 13 10 18 7 14 10 19 3 17 10 19 2 18 9 20 1 19 9 20 + 1 19 9 41 8 41 8 41 8 41 7 42 7 42 7 42 7 42 7 42 7 21 2 19 7 21 1 20 + 7 42 7 42 7 39 11 40 10 1 1 25 1 9 17 12 2 18 10 41 8 42 7 4 1 37 7 + 43 6 43 6 42 7 43 6 43 6 43 6 43 5 44 6 43 6 20 2 21 6 43 5 44 5 45 4 + 45 4 45 3 47 2 45 5 23 2 1 1 10 2 5 5 9 2 2 17 1 9 6 4 4 36 5 5 3 30 + 2 1 7 5 4 30 19 29 5 1 7 1 7 31 10 1 3 1 1 34 1 1 5 43 7 43 6 43 5 44 + 5 43 6 44 6 45 5 46 3 43 6 43 1 2 3 43 2 2 1 43 6 44 5 44 5 44 3 1 1 + 43 6 43 7 43 5 46 3 45 4 46 3 45 4 45 5 44 5 45 4 45 4 45 4 45 4 45 4 + 45 3 47 2 1 0 + + + + 4704.0 + + + 0.510416666667 + + + 2110.0 + + + 0.202369668246 + + + 1.05708314078 + + + 0.537964060032 0.414716887004 0.0863701069339 0.144987217811 + 0.022328628984 -0.00251521233804 0.02384012744 0.00857324384857 + 0.029720544441 + + + 49.0 + + + 1.26530612245 0.354166666667 + + + 1.14285714286 0.244897959184 0.326530612245 3.10204081633 + 0.333333333333 0.25 0.708333333333 0.125 + + + 96.0 + + + 11.0 39.0 0.223880597015 3.0 4.0 3.0 + + + 0.0 0.989583333333 + + + 0.448554421769 + + + 0.274305555556 0.711805555556 0.475694444444 0.0 0.402777777778 + 0.993055555556 0.420138888889 0.0 0.354166666667 0.986111111111 + 0.40625 0.0 0.464743589744 0.679487179487 0.650641025641 + 0.330128205128 + + + 0.0 0.263888888889 0.458333333333 0.472222222222 0.638888888889 + 0.277777777778 0.0 0.0 0.0 0.833333333333 0.986111111111 + 0.930555555556 0.916666666667 0.0694444444444 0.0 0.0 0.0 + 0.833333333333 1.0 1.0 0.861111111111 0.0 0.0 0.0 0.0 + 0.777777777778 1.0 0.972222222222 0.819444444444 0.0 0.0 0.0 0.0 + 0.569444444444 0.958333333333 1.0 0.777777777778 0.0 0.0 0.0 0.0 + 0.847222222222 0.986111111111 1.0 0.847222222222 0.0 0.0 0.0 + 0.291666666667 0.972222222222 1.0 1.0 0.805555555556 0.277777777778 + 0.0 0.0 0.321428571429 0.321428571429 0.345238095238 0.464285714286 + 0.666666666667 0.821428571429 0.678571428571 0.547619047619 + + + 0.696755437192 0.0411158235707 0.0747749638153 0.0421624896509 + 0.679349360331 0.0515086842495 0.0356976504226 0.123861622257 + 0.0718463431432 0.0380448047432 0.383254657786 0.0373126362499 + 0.0790942198454 0.0359788880069 + + + + + + + + + 6 2 29 1 1 4 28 7 30 5 29 6 28 6 29 6 28 6 28 7 25 1 1 8 22 1 1 11 21 + 13 1 1 19 16 18 17 16 17 1 2 14 17 1 3 13 17 1 4 12 23 12 23 11 1 2 + 13 3 4 11 1 3 12 2 7 13 12 2 9 11 12 3 9 10 12 3 10 10 11 1 1 1 4 2 4 + 10 11 1 1 1 4 3 3 11 3 1 12 5 1 17 11 5 2 3 1 13 11 4 2 3 10 2 13 9 + 11 1 14 3 1 4 31 3 31 3 31 4 30 6 28 3 1 1 29 3 31 3 31 3 31 3 3 2 25 + 4 3 2 25 4 30 4 31 4 29 5 29 4 30 4 31 4 29 5 29 5 4 1 24 5 3 3 3 2 + 18 5 4 3 21 5 4 6 9 1 9 5 4 6 19 4 7 7 17 3 7 8 18 1 7 9 16 2 7 10 15 + 3 5 11 15 3 6 10 15 2 7 10 16 2 5 11 16 3 3 24 2 5 3 31 3 31 3 31 3 + 31 3 30 6 29 6 28 7 27 8 25 10 24 11 1 1 22 13 21 15 19 17 16 18 1 1 + 14 18 1 3 12 18 1 4 12 10 1 8 1 4 9 11 1 6 17 10 1 11 12 24 2 1 7 26 + 8 17 4 6 12 12 9 2 11 12 4 2 3 3 5 2 4 13 1 10 3 5 2 13 1 10 3 11 1 7 + 2 4 3 3 4 10 1 7 3 4 2 2 4 11 1 2 1 16 4 30 4 25 3 1 5 28 6 30 4 31 3 + 31 3 31 3 30 4 30 4 30 4 3 2 25 4 30 4 30 4 30 4 30 4 29 6 28 5 30 4 + 30 5 8 2 19 5 3 1 4 3 18 5 2 3 24 5 2 6 21 5 2 8 19 5 3 8 18 4 4 10 + 17 3 5 9 18 2 5 11 16 2 5 13 14 3 5 12 14 2 8 11 13 4 3 14 1 2 1 1 8 + 4 2 22 5 5 2 24 3 6 1 32 2 32 2 33 1 33 1 33 1 33 2 32 2 32 2 33 1 33 + 1 33 2 32 2 32 1 27 0 + + + + 4828.0 + + + 0.239436619718 + + + 2672.0 + + + 0.265718562874 + + + 1.08159010701 + + + 0.472804391218 0.483615216376 0.0287722509735 0.46893275561 + 0.01208999148 0.000449737007867 0.000271783624368 0.00228824596068 + -0.00722256639725 + + + 34.0 + + + 4.08823529412 0.647887323944 + + + 5.64705882353 2.94117647059 3.29411764706 4.35294117647 + 0.788732394366 0.535211267606 0.760563380282 0.507042253521 + + + 142.0 + + + 14.0 86.0 0.255656108597 9.0 11.0 1.0 + + + 0.0 0.992957746479 + + + 0.553438276719 + + + 0.428571428571 0.673611111111 0.717857142857 0.40625 0.768253968254 + 0.546296296296 0.892063492063 0.314814814815 0.528571428571 + 0.774305555556 0.667857142857 0.496527777778 0.222222222222 + 0.567901234568 0.396825396825 0.487654320988 + + + 0.176470588235 0.319444444444 0.597222222222 0.722222222222 + 0.558823529412 0.513888888889 0.388888888889 0.0277777777778 + 0.691176470588 0.527777777778 0.861111111111 0.513888888889 + 0.955882352941 0.847222222222 0.763888888889 0.444444444444 + 0.852941176471 0.861111111111 0.972222222222 0.0277777777778 + 0.911764705882 1.0 0.541666666667 0.0277777777778 0.470588235294 + 0.911111111111 0.988888888889 0.177777777778 0.717647058824 + 0.955555555556 0.677777777778 0.0 0.220588235294 0.833333333333 1.0 + 0.541666666667 0.485294117647 0.944444444444 0.902777777778 0.0 + 0.0882352941176 0.930555555556 1.0 0.555555555556 0.308823529412 + 0.902777777778 1.0 0.0833333333333 0.0 0.555555555556 1.0 + 0.555555555556 0.161764705882 0.861111111111 1.0 0.111111111111 0.0 + 0.333333333333 0.466666666667 0.333333333333 0.0117647058824 + 0.566666666667 0.677777777778 0.188888888889 + + + 0.493300719803 0.204435546343 0.00644662225984 0.0060724463898 + 0.182211621061 0.466167096324 0.111974088484 0.0237857931209 + 0.0280761570575 0.0179351409687 0.00525919212957 0.430307517769 + 0.294403481398 0.0601507052755 + + + + + + + + + 6 2 77 7 17 2 10 2 40 19 2 14 2 3 40 20 1 19 40 19 2 19 40 19 2 19 40 + 19 2 19 40 20 1 19 40 19 1 20 40 19 1 20 39 20 2 19 39 20 2 19 39 41 + 39 41 39 41 39 20 2 19 39 20 2 19 39 20 2 20 36 45 36 44 36 44 36 43 + 38 42 38 42 38 41 39 41 39 41 40 40 40 40 40 40 35 2 3 40 35 2 3 40 + 15 3 3 16 3 20 1 19 6 31 3 20 2 19 1 35 3 20 3 5 1 48 3 20 3 5 2 47 3 + 20 6 3 1 47 3 20 4 19 2 32 3 21 10 11 3 11 1 20 3 20 10 26 1 20 3 20 + 11 25 1 20 3 19 13 45 3 18 15 44 3 19 9 49 10 11 9 50 37 43 39 41 40 + 40 40 1 2 37 44 36 40 40 40 40 40 36 44 37 43 40 40 40 40 4 5 31 40 4 + 2 34 40 40 40 40 40 40 40 40 40 40 41 39 41 39 41 39 41 39 41 39 41 + 39 41 39 41 39 41 39 41 39 41 38 42 19 14 3 44 14 67 4 34 0 + + + + 6160.0 + + + 1.03896103896 + + + 3295.0 + + + 0.132625189681 + + + 1.50205761317 + + + 0.52197614337 0.494680936027 0.151039562152 0.119465649247 + 0.0876723140653 -0.00348349511878 -0.000762328830673 + -0.00242203351064 0.00157234165692 + + + 80.0 + + + 0.4625 0.61038961039 + + + 0.0 0.9 0.75 0.2 0.831168831169 0.831168831169 0.675324675325 + 0.103896103896 + + + 77.0 + + + 8.0 48.0 0.14375 3.0 2.0 10.0 + + + 0.0 0.987012987013 + + + 0.534902597403 + + + 0.813157894737 0.878947368421 0.294736842105 0.0 0.836842105263 + 0.939473684211 0.176315789474 0.0 0.147368421053 0.418421052632 + 0.955263157895 0.91 0.0 0.371052631579 0.981578947368 0.855 + + + 0.622222222222 0.81 0.822222222222 0.7 0.42 0.0 0.0 0.0 0.8 1.0 1.0 + 1.0 0.7 0.0 0.0 0.0 0.666666666667 0.89 1.0 0.81 0.16 0.0 0.0 0.0 + 0.766666666667 1.0 1.0 0.96 0.51 0.0 0.0 0.0 0.255555555556 0.33 + 0.377777777778 0.63 0.97 0.877777777778 0.94 0.85 0.0 0.0 0.0 0.62 + 0.97 1.0 1.0 0.85 0.0 0.0 0.0 0.67 1.0 1.0 1.0 0.7 0.0 0.0 0.0 0.74 + 1.0 0.922222222222 1.0 0.72 + + + 0.343457176383 0.201369123488 0.0212970892624 0.0146227558307 + 0.0534511255451 0.31510870434 0.0763607551205 0.0309923293011 + 0.0156772467465 0.0118746996233 0.0643762590673 0.143692522213 + 0.0230804356768 0.0643089987562 + + + + + + + + + 6 1 16 3 16 3 16 3 16 4 14 6 12 6 14 6 14 5 14 3 18 1 16 1 1 1 3 1 11 + 8 12 5 14 5 14 5 14 5 13 6 14 7 12 7 11 7 12 4 2 1 13 1 4 2 11 4 1 3 + 4 2 5 4 1 2 5 4 4 3 8 4 3 6 6 1 6 7 5 1 6 7 5 1 6 6 6 2 6 1 10 2 6 2 + 9 2 6 2 9 1 7 4 7 1 6 6 6 1 6 6 1 1 4 2 5 8 4 2 5 6 6 1 6 6 6 1 4 8 + 13 5 14 4 3 1 11 4 3 1 11 3 4 1 11 9 9 10 10 8 11 6 14 7 11 9 8 9 9 + 10 9 10 10 6 1 2 13 1 15 4 16 5 15 4 15 4 15 2 14 0 + + + + 1140.0 + + + 0.316666666667 + + + 352.0 + + + 0.798295454545 + + + 0.958257713249 + + + 0.357796717172 0.534813174114 0.034080797707 0.70613518879 + -0.0156965592497 0.00823635424444 -0.0379931028737 0.0016685093448 + -0.0962805901223 + + + 19.0 + + + 2.42105263158 0.45 + + + 2.94736842105 2.73684210526 2.31578947368 0.421052631579 + 0.133333333333 0.733333333333 0.866666666667 0.0666666666667 + + + 60.0 + + + 3.0 16.0 0.233644859813 6.0 4.0 2.0 + + + 0.0 0.983333333333 + + + 0.308771929825 + + + 0.0833333333333 0.15 0.216666666667 0.45 0.72 0.866666666667 + 0.746666666667 0.746666666667 0.04 0.173333333333 0.12 + 0.186666666667 0.0 0.2 0.173333333333 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0625 0.214285714286 0.25 0.214285714286 0.125 + 0.214285714286 0.375 0.214285714286 0.5625 0.642857142857 0.6875 + 0.904761904762 0.875 1.0 0.916666666667 0.809523809524 + 0.958333333333 1.0 0.75 0.285714285714 0.625 0.857142857143 0.625 + 0.5 0.5625 1.0 0.1875 0.0 0.1875 0.428571428571 0.4375 + 0.214285714286 0.3125 0.714285714286 0.125 0.0 0.0 0.0 0.0 0.0 + 0.0416666666667 0.0952380952381 0.0 0.0 0.0 0.0 0.4375 0.5 0.125 + 0.0 0.0 0.0 0.0 0.0 0.333333333333 0.190476190476 0.0 0.0 0.0 + + + 0.465075309657 0.222615930775 0.0772718687735 0.0412223456515 + 0.273543354111 0.387863195698 0.168269478028 0.0509323185885 + 0.0844083432011 0.066155161367 0.198289302481 0.303881470379 + 0.323266705837 0.130081508077 + + + + + + + + + 32 4 33 4 160 4 32 5 160 4 34 2 162 1 35 3 162 1 36 2 162 2 35 2 162 + 12 9 12 3 3 162 39 162 39 162 39 162 39 162 39 162 39 162 39 162 39 + 162 39 162 39 162 39 162 39 162 39 162 39 162 39 162 39 162 39 163 38 + 163 38 163 38 163 38 163 38 163 38 163 38 163 38 163 38 163 38 163 38 + 14 1 148 38 12 2 149 38 163 39 162 29 7 3 162 32 1 6 11 3 2 3 112 1 + 30 39 8 15 108 1 30 39 7 18 106 1 31 31 5 2 7 16 108 1 31 28 9 1 7 15 + 109 1 31 28 4 6 8 23 100 2 30 38 9 23 99 2 29 39 7 28 96 26 5 39 7 29 + 95 66 2 2 7 30 94 39 2 10 12 2 3 2 7 31 93 36 33 1 6 33 92 35 34 1 6 + 34 91 35 34 1 6 35 90 35 34 1 6 36 89 35 34 2 5 36 89 35 41 36 89 35 + 41 35 90 36 40 35 90 36 40 35 12 4 73 39 37 37 12 4 71 40 37 38 9 9 + 68 39 38 37 9 9 69 39 38 37 9 9 69 40 37 36 11 8 69 40 37 5 2 2 2 25 + 10 10 67 41 37 5 6 25 10 12 68 37 32 2 4 6 5 24 11 12 68 37 32 1 5 35 + 10 15 3 1 62 37 38 35 10 19 62 37 38 34 11 20 61 37 38 34 10 22 60 37 + 38 34 10 15 1 7 59 4 1 32 38 3 1 30 10 15 1 8 59 36 38 1 10 23 10 25 + 58 36 38 3 1 5 3 22 9 27 57 36 38 2 1 31 9 29 55 37 42 6 1 4 2 4 2 10 + 9 30 54 37 43 6 1 2 4 14 10 31 53 37 45 8 3 14 10 33 51 36 51 2 4 13 + 11 34 50 37 57 2 2 9 10 34 50 37 63 7 9 36 49 37 63 7 9 36 49 37 62 8 + 9 37 48 37 58 11 10 37 48 37 59 10 10 37 49 36 61 8 10 28 7 1 13 1 36 + 36 61 8 10 27 21 3 35 36 62 7 10 28 20 3 35 36 62 7 10 28 20 4 34 36 + 63 6 12 3 1 23 20 3 34 2 23 11 64 4 13 3 2 23 19 4 33 2 30 4 64 4 13 + 2 6 20 20 2 2 1 31 2 31 3 64 4 22 24 14 3 1 3 64 2 65 3 22 24 14 3 1 + 4 63 2 66 2 23 12 2 9 11 12 63 2 90 12 2 9 11 12 63 1 95 7 7 4 11 13 + 160 6 8 3 11 13 160 6 8 3 11 13 154 3 3 6 3 1 2 5 11 12 154 13 1 10 + 11 13 149 2 2 12 2 9 12 13 3 3 141 18 2 9 11 14 3 5 140 17 2 9 11 14 + 4 4 141 1 8 7 4 3 2 2 11 15 3 5 151 5 4 7 11 16 2 8 142 11 3 8 10 28 + 141 21 10 30 141 20 11 5 1 23 141 10 1 9 9 7 1 13 1 7 144 19 9 7 1 23 + 144 16 10 32 144 15 9 34 143 15 9 37 142 13 9 38 148 6 9 38 147 7 9 + 39 146 7 8 40 146 7 8 40 146 7 9 39 146 6 10 41 144 6 10 40 148 2 9 9 + 1 31 160 40 161 41 161 5 3 32 161 4 12 24 160 5 14 21 162 5 13 20 164 + 13 5 19 165 13 6 16 169 3 1 1 1 4 7 15 172 3 1 4 7 1 4 4 3 2 187 3 1 + 5 4 1 187 2 2 5 4 1 193 3 3 1 194 2 4 1 195 1 4 1 197 4 196 5 193 7 + 188 2 4 7 188 2 4 2 2 2 194 3 2 2 194 7 195 6 193 8 193 6 195 6 195 6 + 195 6 195 6 196 5 195 6 196 5 200 1 10 0 + + + + 31557.0 + + + 1.28025477707 + + + 7154.0 + + + 0.20142577579 + + + 1.68239826631 + + + 0.451508247134 0.44789180161 0.461819386425 0.154220964681 + 0.185364297855 0.0782283864675 0.0411577805135 0.0985182374125 + 0.00634478781071 + + + 201.0 + + + 0.820895522388 1.6178343949 + + + 0.258706467662 1.01492537313 0.935323383085 1.07462686567 + 0.28025477707 2.57324840764 2.8025477707 0.815286624204 + + + 157.0 + + + 16.0 103.0 0.229781771502 19.0 3.0 9.0 + + + 0.0 0.993630573248 + + + 0.226700890452 + + + 0.285641025641 0.668205128205 0.259487179487 0.0 0.376923076923 + 0.497435897436 0.00974358974359 0.0 0.0 0.388717948718 + 0.461538461538 0.019 0.0 0.00150829562594 0.330316742081 + 0.347058823529 + + + 0.0 0.0 0.528421052632 0.896 0.548 0.0 0.0 0.0 0.488421052632 0.65 + 0.627368421053 0.612 0.464 0.0 0.0 0.0 0.625263157895 0.87 + 0.469473684211 0.006 0.0 0.0 0.0 0.0 0.0 0.006 0.747368421053 0.778 + 0.038 0.0 0.0 0.0 0.0 0.0 0.334736842105 0.6 0.38 0.00210526315789 + 0.0 0.0 0.0 0.0 0.0 0.598 0.868 0.578947368421 0.076 0.0 0.0 0.0 + 0.0 0.006 0.262 0.576842105263 0.428 0.0 0.0 0.0 0.0 0.0 + 0.0230769230769 0.485829959514 0.740384615385 0.209615384615 + + + 0.479574271152 0.185855798756 0.155871947962 0.0957162582446 + 0.191414142768 0.374309931179 0.0930996458366 0.199244099272 + 0.104608395138 0.103014773625 0.0151589297315 0.346346908025 + 0.142933847651 0.0706560714085 + + + + + + + + + 2 1 142 2 21 4 2 3 111 4 1 15 4 11 109 21 1 21 101 21 1 21 102 42 102 + 42 102 42 102 42 102 42 101 22 1 20 102 42 102 20 2 19 103 21 1 20 + 102 21 1 20 102 42 102 42 102 21 1 20 102 20 3 19 102 42 102 42 102 + 42 102 20 3 19 102 4 1 15 3 19 102 21 1 20 103 20 1 20 20 1 82 41 19 + 2 82 20 1 20 19 5 79 20 1 20 19 6 78 42 16 11 75 42 16 12 73 43 16 12 + 74 20 1 19 18 13 73 19 2 18 19 14 72 20 1 20 16 15 72 20 1 20 16 2 1 + 10 74 19 3 19 16 2 1 10 74 18 4 10 1 7 17 11 76 18 4 19 16 12 75 19 2 + 20 16 14 3 1 2 3 64 41 16 25 62 41 16 29 58 18 3 20 18 23 1 4 57 17 1 + 2 1 7 8 6 15 30 57 15 24 3 13 34 56 4 35 2 14 10 1 16 2 6 54 2 37 1 + 14 10 2 7 2 15 54 2 51 19 3 17 52 2 51 36 1 2 52 1 52 41 103 42 49 2 + 51 42 50 1 51 42 101 43 101 44 100 44 12 5 83 43 13 5 83 5 6 32 13 6 + 82 5 7 30 13 9 80 6 7 27 1 1 12 10 80 10 2 27 15 12 78 37 16 15 76 37 + 1 1 14 16 75 41 12 16 75 1 1 2 3 34 11 16 76 3 4 27 3 4 11 13 79 1 5 + 11 3 13 5 2 12 14 79 2 2 12 4 12 5 2 12 14 3 8 68 15 7 11 4 2 12 26 + 67 14 9 9 4 2 13 28 65 2 3 9 8 7 7 2 12 30 65 2 3 7 10 11 2 2 12 32 + 71 2 12 15 12 33 84 15 12 33 83 3 5 8 12 34 91 7 11 37 88 5 1 1 12 5 + 2 31 85 6 15 5 1 6 2 24 85 7 13 13 2 25 84 6 14 6 1 32 85 2 1 2 15 34 + 1 4 84 3 18 28 10 1 84 3 18 27 96 4 3 1 12 34 90 5 1 2 12 36 88 9 11 + 5 6 21 92 3 2 3 13 4 7 20 2 2 89 1 20 1 9 3 1 21 120 18 2 3 122 23 + 122 23 121 21 110 3 2 2 2 20 2 3 111 28 1 5 109 15 3 12 1 7 106 15 3 + 20 108 5 2 5 5 18 112 2 13 5 2 9 112 3 14 10 1 4 111 14 3 17 111 3 2 + 9 1 16 115 30 116 27 118 25 123 20 124 20 123 22 124 20 127 17 127 16 + 127 17 127 16 3 1 125 18 128 15 132 11 133 11 133 12 133 11 134 10 + 133 11 142 1 6 0 + + + + 17424.0 + + + 1.19008264463 + + + 4569.0 + + + 0.223024731889 + + + 2.14245548266 + + + 0.491616503435 0.43968957467 0.426292081225 0.196170708214 + 0.256671910424 0.00340240663781 0.0183787009585 0.0165244830874 + 0.0171774281128 + + + 144.0 + + + 1.15972222222 1.40495867769 + + + 0.638888888889 0.805555555556 1.08333333333 2.11111111111 + 0.793388429752 1.9173553719 2.34710743802 0.561983471074 + + + 121.0 + + + 50.0 146.0 0.210084033613 13.0 3.0 5.0 + + + 0.0 0.99173553719 + + + 0.262224517906 + + + 0.889814814815 0.440740740741 0.0 0.0 0.198148148148 0.47037037037 + 0.156481481481 0.0 0.0 0.42037037037 0.35462962963 0.010752688172 + 0.0 0.0324074074074 0.688888888889 0.549283154122 + + + 0.840740740741 0.922222222222 0.888888888889 0.0518518518519 0.0 + 0.0 0.0 0.0 0.848148148148 0.948148148148 0.822222222222 0.0 0.0 + 0.0 0.0 0.0 0.307407407407 0.392592592593 0.362962962963 + 0.0111111111111 0.0 0.0 0.0 0.0 0.0 0.0925925925926 0.688888888889 + 0.818518518519 0.625925925926 0.0 0.0 0.0 0.0 0.0 0.32962962963 + 0.974074074074 0.737037037037 0.214814814815 0.0 0.0 0.0 0.0 + 0.0037037037037 0.374074074074 0.240740740741 0.225925925926 + 0.0444444444444 0.0 0.0 0.0 0.0 0.12962962963 0.888888888889 + 0.82962962963 0.637037037037 0.166666666667 0.0 0.0 0.0 0.0 + 0.311111111111 0.725925925926 0.785185185185 0.628472222222 + + + 0.361353807098 0.26822818302 0.0540777041101 0.027419945242 + 0.0782865127245 0.440895222079 0.181936166028 0.0463954216876 + 0.0488377768667 0.0469284120999 0.248523849182 0.15436265816 + 0.379232077748 0.112731825052 + + + + + + + + + 167 1 6 2 194 19 178 35 177 36 176 37 176 37 176 37 176 37 176 37 176 + 37 177 36 177 36 177 36 177 36 177 36 177 36 177 36 177 37 176 36 177 + 36 178 35 178 35 178 35 178 35 178 35 178 35 178 35 178 36 177 35 178 + 35 41 2 135 35 39 5 135 35 37 8 133 34 38 9 132 34 38 11 130 34 38 12 + 129 35 38 13 127 34 39 15 125 34 39 15 125 34 39 15 125 34 39 16 124 + 34 39 17 105 11 6 35 21 6 4 3 5 17 94 1 3 20 1 33 1 5 10 23 5 18 93 + 37 1 8 16 35 5 18 93 33 29 35 5 20 91 33 29 35 5 16 1 1 1 1 1 3 87 33 + 29 35 5 16 5 4 86 13 1 3 1 15 29 35 5 17 5 4 7 5 73 33 29 35 5 18 4 7 + 9 2 71 33 29 35 5 20 3 11 5 4 68 33 29 35 5 22 2 12 4 5 66 33 28 36 5 + 49 61 36 25 38 3 26 4 22 60 35 26 61 5 2 4 11 2 13 54 34 27 39 1 21 6 + 16 6 7 55 35 26 40 1 20 9 16 66 36 25 39 2 20 10 13 68 37 24 39 3 20 + 11 6 2 4 67 36 25 39 3 21 13 14 1 3 3 13 43 35 25 39 3 4 3 15 17 10 3 + 20 40 33 28 36 5 4 1 11 3 2 21 1 1 3 3 23 38 33 28 36 5 21 29 27 34 + 33 28 36 5 21 32 27 31 33 28 36 5 23 31 29 28 33 28 36 5 16 1 8 28 32 + 26 33 28 36 5 16 2 3 1 6 26 34 24 6 1 25 28 36 5 16 2 2 2 13 20 36 20 + 7 2 24 28 36 6 15 2 17 1 3 12 3 2 38 20 3 2 25 28 37 5 19 2 20 4 50 + 20 1 3 24 28 37 5 19 6 72 22 4 2 19 27 37 5 19 6 70 1 1 16 31 27 37 5 + 19 7 36 3 29 3 1 4 1 7 34 27 37 5 2 3 14 10 5 2 27 4 28 1 2 4 5 2 7 2 + 26 27 37 5 2 5 12 32 66 1 26 27 37 5 2 9 6 1 1 5 5 26 13 6 70 27 36 6 + 2 11 3 10 4 25 15 9 26 2 37 27 36 6 2 26 4 2 1 19 18 11 10 2 49 27 37 + 5 2 27 12 13 40 2 49 26 37 5 2 29 7 18 16 2 9 3 7 5 47 26 37 5 2 34 3 + 18 21 3 3 3 6 3 2 2 12 8 25 26 37 6 1 35 4 18 29 1 4 2 3 3 11 9 13 1 + 10 26 37 6 1 59 13 1 10 1 6 3 3 4 9 11 2 13 8 26 37 6 2 62 26 5 2 5 8 + 33 1 26 11 1 3 19 3 6 2 64 23 5 2 3 7 2 1 34 1 26 5 31 1 6 2 67 28 2 + 7 65 1 41 1 71 37 104 1 73 38 101 1 76 35 101 1 80 31 101 1 82 29 101 + 1 84 5 1 21 101 1 91 20 101 2 90 20 101 1 91 20 101 1 91 20 101 2 90 + 20 102 1 91 19 102 1 91 19 102 1 90 20 102 1 88 1 1 20 102 1 84 26 + 102 2 69 13 1 26 102 2 72 37 102 2 75 3 2 30 101 2 81 29 101 2 81 29 + 101 2 84 26 101 2 88 22 101 2 91 19 101 2 94 16 101 2 96 14 101 2 98 + 12 100 4 98 12 98 6 98 10 100 4 100 9 100 4 100 9 100 4 100 9 100 5 + 99 10 99 5 100 9 99 6 102 5 100 5 104 3 102 3 106 2 102 3 107 1 102 3 + 211 2 211 2 211 2 211 2 211 2 211 2 211 2 212 1 212 1 212 2 211 2 211 + 1 212 1 212 1 212 1 204 0 + + + + 29820.0 + + + 1.52142857143 + + + 7465.0 + + + 0.210850636303 + + + 0.823221092757 + + + 0.561004183043 0.427404626868 0.4811153703 0.0873628307359 + -0.0565462126528 -0.154747414586 0.00506028628677 0.00179026039154 + -0.00358063287267 + + + 213.0 + + + 1.14084507042 1.92857142857 + + + 2.00938967136 1.61502347418 0.769953051643 0.169014084507 + 0.171428571429 3.6 3.4 0.542857142857 + + + 140.0 + + + 26.0 138.0 0.245995423341 16.0 4.0 12.0 + + + 0.0 0.992857142857 + + + 0.250335345406 + + + 0.0188679245283 0.502425876011 0.145552560647 0.0495956873315 0.0 + 0.182749326146 0.495956873315 0.0382749326146 0.33153638814 + 0.580592991914 0.37358490566 0.0943396226415 0.308994708995 + 0.613227513228 0.266137566138 0.0 + + + 0.0 0.0747863247863 0.674208144796 0.801282051282 0.266968325792 + 0.0491452991453 0.133484162896 0.0705128205128 0.0 0.0 + 0.100217864924 0.438271604938 0.281045751634 0.0 0.0 0.0 0.0 0.0 + 0.0 0.540598290598 0.628959276018 0.0042735042735 0.0 0.0 0.0 0.0 + 0.0 0.17695473251 0.80174291939 0.559670781893 0.154684095861 0.0 + 0.0 0.0 0.444444444444 0.695473251029 0.655773420479 0.409465020576 + 0.374727668845 0.00617283950617 0.660633484163 0.690170940171 + 0.62443438914 0.553418803419 0.43665158371 0.0 0.0 0.0 + 0.599128540305 0.635802469136 0.516339869281 0.43621399177 + 0.348583877996 0.0 0.0 0.0 0.0 0.0 0.540305010893 0.950617283951 + 0.747276688453 0.0 0.0 0.0 + + + 0.528705706147 0.153578378774 0.140647131974 0.0532919344506 + 0.317824922775 0.304053556575 0.0841498067687 0.198167228974 + 0.0532448611606 0.0357917501544 0.153285043269 0.320096742001 + 0.217914274881 0.0433665534895 + + + + + + + + + 204 1 67 6 7 2 41 1 17 23 41 2 6 33 41 3 1 37 41 41 41 41 41 41 41 41 + 41 41 41 41 42 40 42 40 42 40 42 40 42 40 42 40 42 40 42 40 42 40 43 + 39 43 39 43 39 43 39 43 4 1 34 43 3 6 30 43 3 6 30 44 3 2 33 44 38 44 + 38 44 38 44 38 44 38 44 38 44 6 1 32 43 39 43 39 43 39 37 1 6 38 37 1 + 6 38 36 2 6 38 11 1 3 2 3 12 3 3 6 38 6 10 4 18 6 39 2 13 4 18 6 55 3 + 18 6 18 13 24 3 18 6 13 21 21 3 18 7 3 31 21 1 19 7 2 32 21 1 19 7 1 + 34 20 1 19 7 1 34 19 2 20 6 1 34 19 2 20 41 20 1 20 41 20 1 20 5 3 32 + 42 6 1 33 43 39 42 39 43 39 44 38 44 38 44 40 16 2 23 41 41 41 41 41 + 41 41 41 41 4 1 36 41 41 41 41 41 41 41 42 40 42 40 3 3 1 3 32 40 3 2 + 2 2 33 40 42 40 42 40 42 40 41 42 41 40 42 40 42 41 19 1 21 41 18 3 + 20 41 17 12 12 41 11 23 7 41 7 29 1 45 4 78 3 38 0 + + + + 7298.0 + + + 0.921348314607 + + + 3397.0 + + + 0.136591109803 + + + 1.59802073516 + + + 0.506387262545 0.508744346616 0.152637578559 0.156586113139 + 0.111003899643 0.00132009742627 -0.00192428866472 + -0.000464583652801 -0.00214046961886 + + + 82.0 + + + 0.329268292683 0.561797752809 + + + 0.487804878049 0.0975609756098 0.536585365854 0.0 0.179775280899 + 0.629213483146 0.988764044944 0.449438202247 + + + 89.0 + + + 4.0 38.0 0.20578778135 4.0 5.0 4.0 + + + 0.0224719101124 0.988764044944 + + + 0.465469991779 + + + 0.743181818182 0.820454545455 0.165909090909 0.0 0.837662337662 1.0 + 0.181818181818 0.0310559006211 0.0 0.0477272727273 0.95 + 0.84347826087 0.0 0.0800865800866 0.937229437229 0.809523809524 + + + 0.490909090909 0.918181818182 0.645454545455 0.654545454545 + 0.290909090909 0.0363636363636 0.0 0.0 0.563636363636 1.0 + 0.981818181818 1.0 0.336363636364 0.0 0.0 0.0 0.672727272727 1.0 + 1.0 1.0 0.2 0.0 0.0 0.0 0.677685950413 1.0 1.0 1.0 0.330578512397 + 0.181818181818 0.0909090909091 0.030303030303 0.0 0.0 0.0 0.1 + 0.981818181818 1.0 0.9 0.866666666667 0.0 0.0 0.0 0.0909090909091 + 0.836363636364 0.981818181818 1.0 0.625 0.0 0.0 0.0 0.163636363636 + 0.963636363636 1.0 1.0 0.583333333333 0.0 0.0 0.0 0.157024793388 + 0.851239669421 0.942148760331 0.95867768595 0.719696969697 + + + 0.366918238999 0.211115399951 0.0101482886418 0.00902191399581 + 0.0513488778144 0.379309848102 0.0876746175785 0.0200963633691 + 0.0177781339894 0.00698120159938 0.107882145748 0.223267883449 + 0.0952227478717 0.0628248580065 + + + + + + + + + 12 1 27 1 3 1 6 1 17 9 4 4 15 10 2 6 15 7 3 7 1 1 1 1 11 7 3 11 10 23 + 9 24 7 25 1 2 4 28 4 28 8 24 7 21 1 2 9 19 3 1 9 18 4 1 8 19 13 20 12 + 20 11 22 9 24 4 2 2 25 3 2 1 24 5 2 1 2 1 20 5 3 1 2 1 18 8 2 1 21 8 + 2 1 21 8 2 1 21 7 25 7 25 7 26 7 25 6 29 3 30 2 30 2 29 3 29 3 29 3 4 + 1 24 4 3 1 22 10 1 1 12 2 6 14 10 4 3 17 8 25 7 26 6 27 5 27 5 26 6 + 25 7 24 6 1 1 24 7 26 4 28 4 30 2 31 2 15 0 + + + + 1728.0 + + + 0.592592592593 + + + 989.0 + + + 0.258847320526 + + + 0.956810631229 + + + 0.483186013895 0.443730087567 0.0532802731922 0.152994302692 + -0.0107523797286 -0.000337683724464 0.00142971532926 + -0.00095994764474 0.00464405319431 + + + 32.0 + + + 0.78125 0.5 + + + 1.125 0.625 0.25 1.125 0.740740740741 0.740740740741 0.296296296296 + 0.148148148148 + + + 54.0 + + + 6.0 24.0 0.26618705036 5.0 5.0 3.0 + + + 0.0 0.981481481481 + + + 0.572337962963 + + + 0.278846153846 0.428571428571 0.903846153846 0.0 0.788461538462 1.0 + 1.0 0.455357142857 0.788461538462 1.0 0.980769230769 0.267857142857 + 0.490384615385 0.366071428571 0.471153846154 0.0178571428571 + + + 0.0 0.0 0.0 0.535714285714 0.958333333333 0.821428571429 0.0 0.0 + 0.416666666667 0.678571428571 0.285714285714 0.892857142857 1.0 + 0.857142857143 0.0 0.0 0.708333333333 1.0 1.0 1.0 1.0 1.0 + 0.142857142857 0.0714285714286 0.375 1.0 1.0 1.0 1.0 1.0 + 0.785714285714 0.821428571429 0.583333333333 1.0 1.0 1.0 1.0 + 0.964285714286 0.75 0.285714285714 0.5 1.0 1.0 1.0 1.0 + 0.964285714286 0.0357142857143 0.0 0.208333333333 1.0 0.75 + 0.535714285714 0.583333333333 0.928571428571 0.0714285714286 0.0 + 0.0 0.642857142857 0.107142857143 0.0714285714286 0.125 + 0.214285714286 0.0 0.0 + + + 0.516038362389 0.108519917956 0.0172589902177 0.0132241682404 + 0.201455885494 0.203323514845 0.0334210056631 0.0430561576682 + 0.0570010325329 0.0401521028815 0.0607055068929 0.125502537932 + 0.0253771346152 0.0306499141483 + + + + + + + + + 39 1 70 3 4 1 4 3 48 4 2 31 48 5 1 31 48 37 48 37 48 36 49 37 48 37 + 48 37 48 36 49 36 49 36 48 37 49 36 49 36 49 36 48 37 46 41 44 40 46 + 39 46 39 47 37 49 36 49 36 49 36 49 36 49 36 49 36 49 36 49 36 48 37 + 12 1 2 7 1 1 10 3 12 36 8 22 3 4 12 73 12 73 12 24 4 45 12 24 4 44 13 + 73 5 3 4 73 7 1 4 22 1 51 7 1 3 21 6 47 7 1 3 24 3 19 3 24 12 23 3 47 + 12 25 1 47 12 7 1 3 3 4 10 45 12 2 28 43 12 2 29 42 13 1 31 40 13 1 + 32 39 13 1 31 1 2 37 46 39 44 41 45 40 45 39 46 40 45 7 1 33 44 4 1 + 36 44 42 42 42 43 43 42 43 42 43 42 43 42 43 42 42 43 42 43 42 43 43 + 42 43 42 43 42 43 42 43 42 43 42 20 2 21 42 20 2 21 42 9 4 1 13 2 1 + 13 41 5 1 1 24 13 41 6 28 10 42 4 32 7 43 2 34 5 81 4 81 5 79 6 78 7 + 80 4 82 1 10 0 + + + + 7310.0 + + + 0.988372093023 + + + 3387.0 + + + 0.136994390316 + + + 1.41974789916 + + + 0.477041067387 0.471901213984 0.135911271329 0.126086727687 + 0.0860917781755 -0.000691340419116 -0.00132666944341 + -0.00122352220235 -0.000457026220526 + + + 85.0 + + + 0.435294117647 0.5 + + + 0.0941176470588 1.08235294118 0.188235294118 0.376470588235 + 0.186046511628 0.744186046512 0.558139534884 0.46511627907 + + + 86.0 + + + 5.0 39.0 0.194444444444 5.0 8.0 5.0 + + + 0.0 0.988372093023 + + + 0.463337893297 + + + 0.791383219955 0.865800865801 0.0884353741497 0.0 0.818594104308 + 0.878787878788 0.344671201814 0.220779220779 0.0 0.502164502165 + 0.997732426304 0.5 0.0 0.309917355372 0.621212121212 0.49173553719 + + + 0.53 0.790909090909 0.736363636364 0.7 0.21 0.0 0.0 0.0 0.8 1.0 1.0 + 1.0 0.163636363636 0.0 0.0 0.0 0.83 1.0 1.0 0.809090909091 0.09 0.0 + 0.0 0.0 0.690909090909 0.760330578512 0.735537190083 0.97520661157 + 0.654545454545 0.586776859504 0.636363636364 0.206611570248 0.0 0.0 + 0.00826446280992 0.933884297521 1.0 0.99173553719 1.0 + 0.0247933884298 0.0 0.0 0.0727272727273 1.0 1.0 1.0 0.963636363636 + 0.00909090909091 0.0 0.0 0.00826446280992 0.97520661157 1.0 1.0 1.0 + 0.314049586777 0.0 0.0 0.0165289256198 0.239669421488 + 0.181818181818 0.297520661157 0.338842975207 0.314049586777 + + + 0.438496990937 0.169974285013 0.0105176965788 0.00613841882314 + 0.0605994009835 0.323198497607 0.0706266550356 0.0718344317634 + 0.0509042812281 0.014031061182 0.100431103224 0.213418712962 + 0.0778935318804 0.0578618653019 + + + + + + + + + 40 1 76 3 75 3 74 3 64 2 1 12 58 8 1 11 52 2 1 23 49 1 1 27 49 29 41 + 2 5 30 40 4 4 30 41 3 2 32 41 3 3 31 41 3 4 30 40 5 3 2 1 27 41 4 3 2 + 2 26 43 2 3 30 41 37 41 1 1 1 1 1 1 31 43 1 1 1 1 1 1 29 41 37 40 39 + 38 40 35 43 38 40 38 7 1 32 38 40 39 39 40 37 31 1 9 37 31 1 10 36 31 + 2 9 36 31 1 10 36 31 1 10 36 30 3 9 36 29 4 9 37 15 7 5 5 9 69 9 69 9 + 24 6 39 9 40 2 27 9 69 9 69 9 69 9 29 1 39 9 23 8 38 10 22 9 37 10 6 + 5 5 2 3 11 36 10 2 12 1 16 37 11 1 29 37 42 36 42 36 42 36 42 36 43 + 35 43 35 43 35 42 31 47 4 1 27 46 36 42 36 42 36 42 36 42 36 42 36 42 + 36 42 37 41 37 41 36 42 36 42 36 42 36 42 36 42 36 42 36 42 37 41 36 + 42 37 41 37 41 3 3 5 21 5 74 3 75 4 74 4 74 4 73 6 73 5 73 6 72 5 73 + 6 73 4 74 3 76 2 2 0 + + + + 7098.0 + + + 0.857142857143 + + + 3019.0 + + + 0.151043391852 + + + 1.30531358885 + + + 0.536549902565 0.467307055316 0.131699708731 0.137958763265 + 0.0882294770204 -0.00269852308283 0.00415895990435 0.00103721167204 + 0.00396563821803 + + + 78.0 + + + 0.5 0.483516483516 + + + 0.717948717949 0.358974358974 0.307692307692 0.512820512821 + 0.879120879121 0.571428571429 0.351648351648 0.0879120879121 + + + 91.0 + + + 14.0 48.0 0.219931271478 4.0 3.0 4.0 + + + 0.0 0.989010989011 + + + 0.425331079177 + + + 0.377990430622 0.732265446224 0.0503432494279 0.0 0.790909090909 + 0.967391304348 0.045652173913 0.0 0.153110047847 0.49885583524 + 0.990846681922 0.453089244851 0.0 0.386956521739 0.834782608696 0.5 + + + 0.0606060606061 0.363636363636 0.537037037037 0.333333333333 + 0.0707070707071 0.0 0.0 0.0 0.245454545455 0.809090909091 + 0.991666666667 1.0 0.136363636364 0.0 0.0 0.0 0.536363636364 1.0 + 1.0 1.0 0.163636363636 0.0 0.0 0.0 0.627272727273 1.0 1.0 + 0.863636363636 0.0272727272727 0.0 0.0 0.0 0.30303030303 + 0.343434343434 0.388888888889 0.868686868687 0.969696969697 + 0.990740740741 0.969696969697 0.0 0.0 0.0 0.0 0.818181818182 1.0 + 1.0 0.927272727273 0.0 0.0 0.0 0.0 0.881818181818 1.0 1.0 + 0.909090909091 0.0 0.0 0.0 0.075 0.654545454545 0.7 0.641666666667 + 0.709090909091 0.433333333333 + + + 0.510976160696 0.145348364175 0.0159327361306 0.0154888795384 + 0.153034018355 0.340369158927 0.0481491306588 0.0391476891073 + 0.0249416976594 0.0290012211787 0.144399607382 0.328986283753 + 0.0736161887374 0.0329434102882 + + + + + + + + + 57 1 99 3 97 2 97 3 98 2 96 4 80 4 9 8 75 27 73 27 73 30 70 29 71 30 + 70 31 69 32 68 29 71 29 71 31 69 32 68 29 71 32 68 33 67 33 37 1 29 + 33 36 2 29 33 36 2 29 33 36 2 29 33 36 2 30 32 35 3 30 32 35 3 30 32 + 35 3 30 7 2 23 35 3 30 7 1 24 34 4 30 7 1 24 35 1 32 32 35 4 29 32 35 + 4 28 33 35 6 26 33 34 20 7 1 4 34 34 66 34 66 34 37 3 4 1 21 34 36 23 + 7 34 36 27 3 34 36 28 2 34 36 28 2 34 2 4 12 1 1 1 15 29 1 41 13 1 15 + 29 1 34 2 4 30 64 36 63 38 62 38 63 36 63 39 26 4 30 41 24 4 31 41 25 + 3 32 40 25 5 31 38 26 5 30 39 25 7 28 40 26 3 33 38 26 3 33 38 27 2 + 34 37 26 3 34 37 26 3 29 1 5 36 26 3 29 1 6 35 26 3 29 1 6 35 26 3 29 + 1 5 36 26 33 5 36 26 33 5 36 26 33 5 36 26 33 6 35 26 33 5 36 26 33 5 + 36 26 33 6 36 25 33 6 36 25 33 6 36 25 33 7 35 25 33 7 35 25 33 7 6 3 + 26 25 33 7 3 22 1 4 5 25 33 7 3 28 4 25 33 7 3 29 3 25 33 7 3 29 3 25 + 33 8 2 29 3 25 33 40 2 25 33 40 2 25 33 40 2 25 34 39 2 30 2 1 20 46 + 1 25 34 67 33 66 4 1 28 67 33 67 33 67 33 67 33 67 34 66 33 67 33 67 + 33 67 33 67 33 67 34 66 34 66 34 66 33 67 33 67 33 67 33 68 7 4 1 7 2 + 1 10 68 4 23 5 68 3 25 5 67 3 25 5 67 3 25 5 67 3 26 4 67 4 25 4 66 4 + 27 3 67 3 26 4 67 3 27 3 67 3 27 3 67 3 98 1 31 0 + + + + 12000.0 + + + 0.833333333333 + + + 4188.0 + + + 0.170725883477 + + + 1.30479562279 + + + 0.512242771555 0.494789033092 0.191774944004 0.182996729362 + 0.0841833168501 -0.000500078892684 0.0326787841022 0.0322286795002 + -0.00512368279238 + + + 100.0 + + + 0.63 0.8 + + + 0.68 0.32 1.12 0.4 0.333333333333 1.06666666667 1.36666666667 + 0.433333333333 + + + 120.0 + + + 8.0 52.0 0.20177383592 10.0 3.0 3.0 + + + 0.0 0.991666666667 + + + 0.349 + + + 0.024 0.752 0.505333333333 0.0 0.457333333333 0.606666666667 + 0.405333333333 0.0 0.528 0.309333333333 0.309333333333 + 0.262666666667 0.0 0.0 0.802666666667 0.621333333333 + + + 0.0 0.1 0.6 0.833333333333 0.644444444444 0.177777777778 0.0 0.0 + 0.0 0.0 0.574358974359 0.994871794872 1.0 0.184615384615 0.0 0.0 + 0.0888888888889 0.144444444444 0.6 1.0 1.0 0.211111111111 0.0 0.0 + 0.553846153846 0.989743589744 0.661538461538 0.194871794872 + 0.246153846154 0.194871794872 0.0 0.0 0.661111111111 1.0 + 0.672222222222 0.0 0.0 0.0 0.0 0.0 0.0974358974359 0.4 + 0.379487179487 0.189743589744 0.538461538462 0.651282051282 + 0.692307692308 0.317948717949 0.0 0.0 0.0 0.0 0.666666666667 1.0 + 1.0 0.144444444444 0.0 0.0 0.0 0.0 0.635897435897 0.912820512821 + 0.94358974359 0.389743589744 + + + 0.440269285312 0.115762921998 0.0979862845324 0.109992475541 + 0.0418026953998 0.230560539549 0.0275873569815 0.189422319756 + 0.284196987236 0.0561051410662 0.359960661051 0.162906574884 + 0.0379482457446 0.0313057726045 + + + + + + + + + 3 2 26 3 25 4 23 6 22 7 22 6 22 7 20 9 19 10 18 10 18 10 4 1 14 10 1 + 4 13 14 14 16 12 17 10 18 11 19 9 19 8 22 6 22 6 23 5 24 4 25 3 26 2 + 26 2 26 2 26 2 26 2 25 3 26 2 26 2 26 2 26 2 25 3 25 3 25 3 25 3 25 3 + 22 1 2 3 9 1 7 2 3 6 4 2 1 4 5 4 4 4 3 10 3 4 5 3 3 3 1 4 1 1 3 4 1 1 + 1 1 1 3 7 5 5 3 2 1 2 3 8 3 6 2 6 3 10 1 14 3 25 3 25 3 3 3 19 3 3 4 + 18 3 3 5 10 1 6 3 3 6 16 3 3 7 14 4 3 8 13 4 3 9 12 4 3 10 11 4 3 11 + 10 4 3 12 9 4 3 13 8 4 3 14 7 4 3 15 6 4 3 25 3 25 4 23 6 22 6 22 5 + 24 5 22 5 23 6 22 6 21 7 9 2 11 10 3 3 12 17 11 17 11 17 11 18 10 10 + 1 8 9 20 8 21 7 22 6 23 5 24 4 25 3 26 2 26 2 26 1 27 2 26 2 26 3 7 4 + 5 3 3 4 1 1 3 1 5 3 4 3 3 4 11 2 7 1 4 3 11 2 13 2 11 2 14 1 11 2 14 + 1 11 3 12 3 10 3 6 1 6 3 9 2 6 2 6 3 8 3 6 2 6 3 1 1 6 3 6 2 2 2 2 2 + 9 4 3 4 2 2 2 2 8 5 3 4 3 1 2 2 7 7 2 4 6 2 5 1 2 6 1 6 5 2 8 6 3 3 6 + 1 10 4 13 1 11 1 6 1 8 1 27 2 26 2 3 1 6 4 3 3 6 2 5 1 6 2 1 5 5 3 5 + 2 19 1 6 3 18 1 6 4 17 1 6 5 16 1 6 6 15 1 6 7 14 1 6 9 11 3 5 10 10 + 3 5 11 9 3 5 13 7 2 6 13 1 1 5 2 6 15 5 2 6 16 4 3 5 16 4 3 5 16 4 2 + 5 18 2 5 3 25 4 22 0 + + + + 3640.0 + + + 0.215384615385 + + + 2229.0 + + + 0.281292059219 + + + 0.986483439908 + + + 0.471794360534 0.50512100883 0.0266197213631 0.568446420431 + 0.00221309576003 0.000419532817346 -0.00474489470807 + 0.00274617089981 0.00390075898514 + + + 28.0 + + + 3.71428571429 0.769230769231 + + + 3.28571428571 4.14285714286 4.28571428571 3.14285714286 + 0.0615384615385 1.04615384615 0.461538461538 1.50769230769 + + + 130.0 + + + 25.0 97.0 0.219638242894 4.0 8.0 2.0 + + + 0.0 0.992307692308 + + + 0.612362637363 + + + 0.651785714286 0.562770562771 0.866071428571 0.787878787879 + 0.772321428571 0.458874458874 0.683035714286 0.350649350649 + 0.611607142857 0.709956709957 0.6875 0.536796536797 0.379464285714 + 0.666666666667 0.370535714286 0.705627705628 + + + 0.145833333333 0.291666666667 0.333333333333 0.352941176471 + 0.666666666667 0.770833333333 0.666666666667 0.823529411765 + 0.953125 1.0 0.921875 0.544117647059 0.96875 0.984375 0.921875 + 0.720588235294 0.729166666667 1.0 0.833333333333 0.0588235294118 + 0.5625 0.979166666667 0.875 0.0196078431373 0.40625 1.0 0.703125 + 0.264705882353 0.5 0.734375 0.375 0.205882352941 0.333333333333 1.0 + 0.958333333333 0.470588235294 0.583333333333 1.0 0.854166666667 + 0.352941176471 0.140625 1.0 0.765625 0.661764705882 0.328125 + 0.890625 0.46875 0.514705882353 0.0 0.916666666667 0.895833333333 + 0.764705882353 0.0625 1.0 0.9375 0.78431372549 0.0 0.640625 0.65625 + 0.441176470588 0.0 0.5 0.6875 0.5 + + + 0.38283233283 0.260465120126 0.0108187880591 0.00694970434917 + 0.0951270857514 0.447856185498 0.177588732376 0.019587761479 + 0.0346522200673 0.0237636160983 0.0516742438251 0.31014250314 + 0.341254823187 0.113205753287 + + + + + + + + + 25 1 26 4 24 3 25 2 26 2 25 3 25 2 26 3 26 1 27 1 295 4 19 9 19 7 20 + 7 22 2 6 1 20 1 3 5 16 11 15 15 14 12 16 4 4 2 18 4 3 3 18 4 24 4 24 + 4 24 4 24 4 24 3 22 1 1 5 20 7 21 7 21 9 19 7 1 2 18 7 21 6 22 7 21 6 + 1 1 20 1 2 3 22 0 + + + + 1316.0 + + + 0.595744680851 + + + 201.0 + + + 0.8407960199 + + + 0.528846153846 + + + 0.326147042565 0.64060134112 0.230425802228 0.670033905126 + -0.352609123389 0.125585759196 0.303488946798 -0.198719940339 + -0.443430420265 + + + 28.0 + + + 0.678571428571 0.170212765957 + + + 0.428571428571 1.71428571429 0.428571428571 0.142857142857 0.0 0.0 + 0.340425531915 0.255319148936 + + + 47.0 + + + 4.0 18.0 0.161764705882 6.0 2.0 2.0 + + + 0.0 0.978723404255 + + + 0.15273556231 + + + 0.0 0.0 0.333333333333 0.821428571429 0.0 0.190476190476 + 0.511904761905 0.0833333333333 0.0 0.047619047619 0.142857142857 + 0.0 0.285714285714 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.555555555556 0.888888888889 0.0 0.0 0.0 + 0.0 0.416666666667 0.75 0.916666666667 0.875 0.0 0.0 0.0 + 0.333333333333 0.833333333333 0.333333333333 0.222222222222 + 0.166666666667 0.0 0.0 0.0 0.416666666667 0.708333333333 + 0.208333333333 0.0 0.0 0.0 0.0 0.0 0.222222222222 0.611111111111 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0416666666667 0.0 0.0 0.0 0.0 + 0.166666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.6 0.291666666667 0.0 0.0 + 0.0 0.0 0.0 0.0 + + + 0.658057476426 0.136988704095 0.211581940749 0.0730197210974 + 0.849430607533 0.199533146054 0.117662130442 0.195895138624 + 0.114534451245 0.108893965452 0.738030266033 0.39601235307 + 0.0807220479464 0.121800207374 + + + + + + + + + 92 3 232 2 232 2 199 4 230 8 226 15 219 29 3 3 199 35 199 35 199 35 + 199 35 200 34 200 34 200 34 200 34 200 34 200 34 200 34 200 34 200 34 + 200 34 200 34 200 34 201 34 200 34 200 34 16 2 182 34 16 4 180 34 16 + 4 180 34 16 6 178 34 17 7 176 34 17 8 175 34 18 8 175 33 13 3 1 10 + 174 34 12 14 174 34 12 14 174 33 13 14 174 5 5 19 17 15 173 29 17 15 + 143 2 28 31 1 2 11 15 144 9 21 31 1 2 11 14 145 14 15 35 11 14 4 2 + 139 20 8 36 11 15 3 4 137 25 2 37 11 15 3 6 1 1 133 63 11 4 2 22 132 + 63 11 29 131 35 1 27 10 32 129 34 7 22 10 34 127 33 18 2 2 8 10 35 + 126 33 27 3 9 37 96 1 28 33 29 2 8 38 94 2 28 33 29 1 9 38 94 2 28 34 + 38 38 95 1 28 34 38 38 94 2 29 33 38 38 94 3 28 33 39 37 94 2 29 33 + 39 37 95 1 29 33 38 38 94 3 28 33 38 38 93 4 28 34 36 39 11 3 77 7 26 + 35 28 1 6 41 9 7 75 7 24 37 26 1 7 40 10 6 77 5 26 36 26 2 6 40 10 6 + 76 6 26 35 27 2 7 38 11 6 76 7 26 33 28 2 7 8 3 27 11 8 75 7 25 33 28 + 2 7 8 4 4 3 18 11 10 73 5 1 2 25 34 28 1 8 4 1 3 3 2 5 18 11 13 71 5 + 28 9 4 3 3 15 27 1 8 4 2 3 2 5 1 19 10 15 72 2 29 16 2 16 36 5 1 2 3 + 5 2 18 10 17 70 2 29 12 1 1 4 16 41 4 2 25 10 18 69 2 30 13 5 15 47 + 25 9 20 68 2 31 3 1 8 5 15 47 4 4 16 10 18 1 2 68 1 30 3 3 7 5 15 48 + 1 1 1 4 16 10 23 66 2 26 6 2 6 7 15 56 15 10 23 66 4 23 6 4 1 8 18 56 + 15 10 24 64 16 12 6 5 2 5 20 56 14 9 27 62 33 5 7 1 20 56 13 10 27 62 + 33 3 30 56 13 10 28 61 31 1 1 1 32 56 13 10 29 60 67 56 1 2 9 9 31 59 + 67 59 9 9 32 58 36 1 30 59 8 10 33 57 35 9 22 60 8 10 34 56 17 1 16 + 14 18 60 8 10 35 55 34 19 13 60 8 10 36 54 34 23 10 61 5 11 5 1 22 1 + 9 52 35 25 7 62 4 10 28 3 8 52 35 27 5 63 3 11 28 2 9 51 35 29 3 63 3 + 11 29 2 1 2 5 52 34 29 2 64 3 10 30 5 5 52 34 96 2 10 31 4 5 52 34 96 + 1 11 30 5 4 53 34 108 5 3 22 4 5 53 35 107 5 3 22 3 4 1 1 53 35 107 4 + 5 21 2 6 19 1 34 35 107 3 7 20 1 7 18 4 32 35 107 4 4 30 17 6 31 3 2 + 1 1 25 1 2 107 3 6 29 17 7 30 4 2 24 113 1 9 26 18 9 27 32 1 3 118 21 + 1 4 18 10 26 37 117 6 1 13 3 3 17 12 25 37 110 13 1 13 3 3 17 13 24 + 37 108 16 1 13 1 3 18 14 24 36 109 14 3 16 17 14 25 36 110 13 3 15 18 + 13 27 35 112 29 18 13 26 36 113 28 17 14 26 36 114 27 17 14 26 37 114 + 26 17 12 9 1 19 36 115 24 17 13 5 1 4 1 18 36 116 23 17 12 5 1 24 36 + 117 2 2 18 16 14 29 36 118 21 16 15 3 1 5 3 16 37 120 17 17 19 7 2 15 + 37 122 15 17 20 3 2 3 1 14 37 130 7 16 31 13 4 3 3 3 24 130 7 16 31 + 13 3 17 17 123 2 3 8 17 32 13 2 24 10 124 12 17 33 12 2 27 7 125 11 + 16 35 10 3 28 7 125 10 15 39 6 5 27 8 125 8 16 39 7 3 29 7 125 8 15 + 40 8 1 31 6 126 7 15 40 39 8 125 7 15 40 39 7 125 8 15 8 2 31 38 7 + 129 3 16 39 40 8 148 31 1 7 42 3 150 39 43 2 148 16 1 24 43 2 148 16 + 1 16 1 6 45 1 148 15 2 23 195 5 2 8 2 12 1 9 196 4 3 7 4 7 4 2 2 5 + 197 3 4 5 6 7 3 8 198 2 7 2 8 6 3 8 199 5 4 2 7 6 3 7 201 5 4 1 7 6 3 + 7 202 3 5 3 2 10 1 8 203 2 5 2 2 20 218 7 1 8 219 1 6 1 5 1 220 1 233 + 1 2111 1 232 2 232 3 230 6 228 6 228 6 228 6 228 5 229 5 229 5 230 3 + 231 3 233 1 11 0 + + + + 38376.0 + + + 1.42682926829 + + + 8410.0 + + + 0.207372175981 + + + 1.18556027442 + + + 0.445741070563 0.456904940802 0.513383911491 0.132854091289 + 0.102382775444 0.102640389059 0.0250695147956 0.131814381207 + -0.00269607846305 + + + 234.0 + + + 0.850427350427 2.23170731707 + + + 1.1452991453 0.649572649573 0.649572649573 0.957264957265 + 0.609756097561 3.75609756098 3.48780487805 1.07317073171 + + + 164.0 + + + 38.0 125.0 0.271670190275 29.0 3.0 9.0 + + + 0.0 0.993902439024 + + + 0.219147383782 + + + 0.0105130361648 0.512615643398 0.5370058873 0.0159798149706 + 0.540719305498 0.377015295577 0.0210830921869 0.0 0.029015979815 + 0.530277544155 0.32716568545 0.00420521446594 0.0 0.011988424969 + 0.353451839603 0.238941711451 + + + 0.0 0.0 0.0603448275862 0.399014778325 0.834482758621 + 0.563218390805 0.0 0.0 0.0 0.0410509031199 0.844827586207 + 0.740558292282 0.362068965517 0.394088669951 0.0655172413793 0.0 + 0.68275862069 0.845648604269 0.498275862069 0.387520525452 + 0.0879310344828 0.0 0.0 0.0 0.193333333333 0.446031746032 0.5 + 0.138095238095 0.0 0.0 0.0 0.0 0.0 0.113300492611 0.803448275862 + 0.597701149425 0.0637931034483 0.0 0.0 0.0 0.0 0.0 0.0275862068966 + 0.68144499179 0.836206896552 0.420361247947 0.0172413793103 0.0 0.0 + 0.0 0.0 0.047619047619 0.308620689655 0.430213464696 0.229310344828 + 0.0 0.0 0.0 0.0 0.0 0.0966666666667 0.565079365079 0.655 + 0.0825396825397 + + + 0.488048595747 0.156096439989 0.161392818486 0.118220304013 + 0.197128413242 0.299012896759 0.0706933170099 0.276453404138 + 0.189739670211 0.104549543351 0.0871861700082 0.264727422286 + 0.0939509050429 0.0722762822689 + + + + + + + + + 2 1 1 3 1 16 2 1 1 3 3 1 1 0 + + + + 36.0 + + + 0.444444444444 + + + 25.0 + + + 1.28 + + + 0.727272727273 + + + 0.48 0.47 0.041856 0.180096 0.001024 -0.000531456 -0.000592896 + -0.000999424 0.018364416 + + + 4.0 + + + 0.5 0.0 + + + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 9.0 + + + 5.0 3.0 0.0714285714286 0.0 2.0 1.0 + + + 0.0 0.888888888889 + + + 0.694444444444 + + + 0.5 1.0 1.0 0.333333333333 0.5 1.0 1.0 0.333333333333 1.0 1.0 1.0 + 1.0 0.0 1.0 1.0 0.0 + + + 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.0 + 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 + + + 0.386972597601 0.176891849932 0.103085363053 0.0422559170301 + 0.20257297992 0.116128359616 0.117735879364 0.0462989846442 + 0.0774467605131 0.0638125103358 0.0193096006116 0.0601423853448 + 0.0314070376683 0.0796432397219 + + + + + + + + + 1 1 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 1 3 1 3 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 + 1 7 1 4 1 1 19 3 1 59 1 3 1 3 1 3 1 23 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 + 3 1 3 1 3 1 2 2 3 1 3 1 3 1 3 1 3 1 2 2 2 2 2 2 2 2 3 1 2 2 2 3 1 3 2 + 1 3 1 3 1 2 6 2 2 3 2 2 20 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 1 3 1 3 1 3 2 1 3 1 3 1 2 2 2 2 2 2 2 2 2 1 3 0 + + + + 532.0 + + + 0.0300751879699 + + + 311.0 + + + 0.977491961415 + + + 1.12810572687 + + + 0.520900321543 0.49142550911 0.00248681600883 3.86112214364 + -0.00376267057258 4.42896148135e-06 -0.0487247995981 + 0.000431061059461 0.769614988933 + + + 4.0 + + + 5.0 0.0 + + + 5.0 4.0 4.0 7.0 0.0 0.0 0.0 0.0 + + + 133.0 + + + 11.0 14.0 0.0806451612903 2.0 35.0 1.0 + + + 0.0 0.992481203008 + + + 0.584586466165 + + + 0.0 0.636363636364 0.0606060606061 0.294117647059 1.0 + 0.878787878788 0.909090909091 0.794117647059 0.878787878788 + 0.848484848485 0.969696969697 0.617647058824 0.0 0.757575757576 + 0.666666666667 0.0588235294118 + + + 0.0 0.0 0.5 0.764705882353 0.117647058824 0.0 0.117647058824 + 0.470588235294 0.0 0.0 0.5 0.764705882353 0.117647058824 0.0 + 0.117647058824 0.470588235294 1.0 1.0 0.75 1.0 1.0 0.8125 + 0.647058823529 0.941176470588 1.0 1.0 0.75 1.0 1.0 0.8125 + 0.647058823529 0.941176470588 0.75 1.0 0.6875 1.0 1.0 0.9375 + 0.705882352941 0.529411764706 0.75 1.0 0.6875 1.0 1.0 0.9375 + 0.705882352941 0.529411764706 0.0 0.0 0.5 1.0 0.941176470588 0.375 + 0.117647058824 0.0 0.0 0.0 0.5 1.0 0.941176470588 0.375 + 0.117647058824 0.0 + + + 0.456022301767 0.249133029931 0.0518147764894 0.0175070377136 + 0.495109599759 0.314034130015 0.232626767936 0.0467827174869 + 0.0283310248424 0.0270283286468 0.602823956822 0.285588133174 + 0.302055091001 0.22070700668 + + + + + + + + + 3 1 156 10 147 34 123 34 123 34 123 34 123 34 123 33 124 34 123 34 + 123 35 122 34 123 34 123 34 123 34 124 33 124 33 124 33 124 33 124 33 + 124 33 124 33 124 33 123 35 123 35 19 3 100 35 19 3 100 35 19 3 100 + 34 20 3 101 34 18 6 99 16 3 15 17 11 96 15 4 13 17 13 95 16 3 13 17 + 14 94 32 17 14 94 16 2 14 17 14 94 15 5 12 17 14 94 15 5 11 18 19 89 + 32 17 18 90 32 16 15 2 7 85 18 1 13 16 25 84 32 16 28 82 31 16 29 81 + 31 16 30 80 31 15 32 79 31 15 32 79 31 15 32 85 25 15 33 104 4 16 36 + 101 3 17 17 2 12 2 4 100 3 16 17 5 16 101 2 16 7 1 11 3 16 101 2 16 + 11 1 22 105 2 16 33 106 2 20 12 1 1 3 16 3 1 99 1 20 16 1 17 2 2 98 1 + 20 12 1 3 2 14 1 1 2 2 2 1 95 1 22 10 2 3 1 13 3 7 95 1 24 8 3 1 3 12 + 6 2 1 2 94 1 25 7 1 3 4 11 105 1 27 5 2 3 3 11 105 1 28 4 2 2 3 11 + 106 1 28 8 3 11 106 1 28 8 4 11 105 1 30 7 2 13 104 1 29 23 104 1 28 + 25 103 2 26 5 1 22 2 3 96 2 26 27 2 4 96 2 15 2 7 24 2 2 4 1 98 2 15 + 2 6 10 4 11 124 2 5 11 5 11 2 1 104 1 22 10 7 14 102 2 21 13 4 20 63 + 3 31 3 21 36 63 12 4 3 15 3 22 35 63 31 3 3 23 34 63 37 24 33 63 37 + 25 1 1 1 1 23 1 3 64 37 31 25 64 37 31 25 64 37 36 16 2 2 64 17 1 19 + 39 6 75 37 42 2 77 36 89 4 28 36 88 5 28 36 36 7 5 5 35 5 27 37 37 19 + 32 4 27 39 37 17 33 3 1 1 26 40 37 17 31 2 30 40 38 16 63 39 39 16 64 + 38 40 15 65 37 41 12 36 5 26 37 44 9 33 8 26 37 45 8 33 8 26 3 3 31 + 46 7 34 6 27 3 5 29 47 5 35 6 27 4 4 8 1 20 49 3 35 6 27 4 2 31 87 6 + 27 3 5 29 86 7 28 2 4 21 3 6 86 7 27 4 1 32 89 4 27 17 1 19 91 1 29 + 36 96 1 9 3 12 36 94 4 8 4 11 36 90 2 2 4 8 5 10 36 89 2 4 4 3 2 17 + 36 79 1 9 2 4 1 1 16 2 2 4 7 1 28 79 4 3 2 10 7 1 12 3 36 80 4 1 4 6 + 1 2 20 3 7 1 20 1 7 81 9 4 6 1 5 8 4 3 7 1 19 2 6 85 6 4 2 1 3 1 4 9 + 3 4 37 84 5 5 5 1 3 11 2 5 36 85 2 7 6 1 1 12 1 1 1 4 36 93 9 19 36 + 94 1 2 4 20 36 94 3 1 4 20 14 1 20 93 4 4 1 9 1 9 1 13 1 2 19 94 3 3 + 6 4 4 35 8 96 10 6 1 38 6 96 10 47 5 97 7 5 2 42 4 99 8 1 3 43 3 99 4 + 154 2 779 3 154 4 153 2 154 3 5 3 146 3 5 3 2 2 142 4 1 1 4 4 135 1 7 + 6 4 4 136 4 3 14 137 19 139 18 140 17 141 15 142 15 144 12 145 12 146 + 10 148 9 155 2 154 3 153 3 154 3 153 5 154 1 13 0 + + + + 23707.0 + + + 1.03973509934 + + + 5156.0 + + + 0.271916214119 + + + 1.32138517618 + + + 0.312805842335 0.442785104732 0.313798396657 0.254227682522 + 0.111949334737 0.179845059725 0.0165791258414 0.114207054809 + 0.00272334050166 + + + 157.0 + + + 1.57961783439 1.56953642384 + + + 1.88535031847 1.1974522293 1.12101910828 2.08917197452 + 0.503311258278 2.27814569536 2.51655629139 0.794701986755 + + + 151.0 + + + 30.0 132.0 0.223001402525 31.0 5.0 9.0 + + + 0.0 0.993377483444 + + + 0.217488505505 + + + 0.803880803881 0.252361673414 0.919028340081 0.118758434548 + 0.0935550935551 0.470985155196 0.0445344129555 0.00877192982456 0.0 + 0.260458839406 0.155870445344 0.0 0.0 0.0 0.173026315789 + 0.192105263158 + + + 0.771929824561 0.747922437673 0.290858725762 0.0969529085873 + 0.939058171745 0.781163434903 0.168975069252 0.0 0.8 0.889473684211 + 0.502631578947 0.113157894737 0.971052631579 0.978947368421 + 0.302631578947 0.0 0.0 0.0664819944598 0.221606648199 + 0.016620498615 0.00554016620499 0.00554016620499 0.0360110803324 + 0.0 0.0 0.292105263158 0.934210526316 0.676315789474 0.163157894737 + 0.0 0.0 0.0 0.0 0.0 0.423684210526 0.592105263158 0.568421052632 + 0.0394736842105 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.118421052632 0.3 0.0473684210526 0.105263157895 0.0 0.0 0.0 + 0.0 0.0 0.273684210526 0.221052631579 0.394736842105 + + + 0.613817827697 0.0695667747601 0.153952495504 0.0817035249649 + 0.545562219848 0.0312615904084 0.0736368808079 0.17971083648 + 0.182910734631 0.0725428408755 0.205558312873 0.0960967910431 + 0.0707458874796 0.0606526341035 + + + + + + + + + 0 3 + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.33333333333 + + + 2.0 + + + 0.5 0.5 0.222222222222 0.0 0.0 0.0 0.0 0.0 0.0 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 1.0 + + + 0.0 0.0 0.0 3.0 3.0 3.0 + + + 0.0 -1.0 + + + 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.611531923285 0.624075847826 4.84190584415e-17 1.51341087023e-16 + 0.938065357227 0.958148015231 1.01963181359 6.53233907782e-17 + 2.04646500774e-16 3.70897674304e-16 1.15129051676 1.17773290199 + 1.25872203005 1.3993574542 + + + + + + + + + 14 6 40 25 5 2 13 28 1 3 14 32 14 27 1 4 14 32 14 32 13 33 13 33 13 + 33 13 33 13 33 13 33 13 33 13 33 14 32 14 32 14 32 14 32 14 32 14 32 + 14 32 19 21 20 28 18 32 14 4 4 24 14 32 14 32 14 32 14 32 14 32 14 32 + 14 32 14 19 2 11 14 7 2 9 2 12 14 32 14 32 15 31 15 31 15 31 15 31 15 + 31 15 31 15 31 34 12 35 1 6 4 43 3 44 2 45 1 357 3 43 2 45 1 60 2 40 + 6 40 10 36 16 19 1 10 24 10 2 10 36 10 37 9 37 9 37 9 37 9 37 9 37 9 + 37 10 36 9 37 9 37 9 37 9 37 9 37 10 36 10 36 9 37 9 37 10 37 9 37 9 + 36 10 1 8 23 15 2 6 27 10 3 6 28 9 4 4 29 9 7 1 29 9 37 9 37 9 37 9 + 37 9 3 2 32 9 2 5 1 1 13 4 11 9 2 9 13 1 7 15 7 1 25 2 1 10 36 10 36 + 10 37 9 37 9 37 9 37 9 2 4 31 10 1 7 4 1 23 10 1 16 19 37 9 44 2 7 0 + + + + 5060.0 + + + 0.418181818182 + + + 2943.0 + + + 0.159361196058 + + + 0.786840168855 + + + 0.521259485785 0.508437062599 0.0420676309271 0.385453269479 + -0.0450324192184 -0.00135608409586 0.00666072853855 + 0.00159442295307 -0.0220105236065 + + + 46.0 + + + 1.84782608696 0.245454545455 + + + 1.65217391304 1.91304347826 1.73913043478 2.0 0.145454545455 + 0.145454545455 0.0727272727273 0.618181818182 + + + 110.0 + + + 8.0 44.0 0.221518987342 5.0 10.0 0.0 + + + 0.0 0.990909090909 + + + 0.58162055336 + + + 0.0 0.0 0.754208754209 0.61038961039 0.814814814815 0.479166666667 + 0.682098765432 0.895833333333 0.962962962963 0.597402597403 + 0.632996632997 0.918831168831 0.833333333333 0.622023809524 + 0.182098765432 0.3125 + + + 0.0 0.0 0.0 0.0 0.553846153846 0.957142857143 0.714285714286 + 0.414285714286 0.0 0.0 0.0 0.0 0.474358974359 1.0 0.75 + 0.547619047619 0.717948717949 0.642857142857 0.619047619048 + 0.107142857143 0.371794871795 1.0 1.0 0.761904761905 0.961538461538 + 0.940476190476 0.97619047619 0.214285714286 0.307692307692 1.0 1.0 + 0.821428571429 0.923076923077 1.0 1.0 0.214285714286 0.246153846154 + 1.0 1.0 0.785714285714 0.923076923077 1.0 0.952380952381 + 0.22619047619 0.230769230769 1.0 0.988095238095 0.892857142857 + 0.910256410256 0.988095238095 1.0 0.297619047619 0.217948717949 0.5 + 0.583333333333 0.666666666667 0.705128205128 0.72619047619 + 0.833333333333 0.357142857143 0.0 0.0 0.0 0.0 + + + 0.267278663424 0.285502373356 0.0622736228045 0.0337066465151 + 0.0804413570758 0.398204662592 0.172818127194 0.0462225727632 + 0.00927879982127 0.0425569414956 0.0648368059827 0.174661105292 + 0.259512776789 0.0770433479061 + + + + + + + + + 1 2 3 3 1 4 1 4 1 14 1 3 2 3 2 3 3 2 4 1 2 0 + + + + 60.0 + + + 0.416666666667 + + + 39.0 + + + 0.974358974359 + + + 1.00840336134 + + + 0.391025641026 0.454545454545 0.0326033817158 0.218277449047 + -0.0124917817226 0.001587409871 -0.00213525800603 -0.00142800440606 + 0.0189500773734 + + + 5.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 12.0 + + + 3.0 3.0 0.117647058824 0.0 3.0 3.0 + + + 0.0 0.916666666667 + + + 0.65 + + + 0.333333333333 1.0 1.0 0.333333333333 1.0 1.0 1.0 0.666666666667 + 1.0 1.0 1.0 1.0 0.333333333333 0.833333333333 0.166666666667 0.0 + + + 0.0 0.5 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 + + + 0.448753070268 0.18899581366 0.0727074356786 0.0339684337116 + 0.254634068153 0.245185342055 0.141901211461 0.0205137622393 + 0.0768206350421 0.044437981175 0.0821617742912 0.116608673304 + 0.177519400861 0.113040757478 + + + + + + + + + 1 1 76 3 383 1 76 30 47 33 44 35 42 36 41 37 40 39 38 39 37 40 37 40 + 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 39 38 40 41 + 35 46 31 39 39 38 39 37 7 1 32 37 40 37 40 36 41 33 2 2 40 33 2 2 40 + 32 3 2 40 32 3 2 40 32 3 2 4 2 1 2 10 1 7 1 12 32 3 2 40 32 3 2 40 33 + 2 2 19 2 19 32 2 3 19 2 19 30 5 1 41 18 16 3 40 3 31 3 74 3 74 3 74 3 + 5 2 67 3 3 29 41 4 3 31 40 3 2 33 39 3 2 34 38 3 1 36 36 4 1 37 35 4 + 1 37 35 42 35 42 27 49 35 41 39 38 40 37 40 38 38 39 37 40 37 40 37 + 40 37 40 36 41 37 40 37 40 36 42 35 41 36 41 36 41 36 41 36 42 35 42 + 35 42 35 42 35 42 35 42 35 42 35 42 35 42 35 42 35 42 9 2 3 1 20 42 5 + 26 4 42 2 32 1 76 1 3 0 + + + + 7007.0 + + + 0.846153846154 + + + 3276.0 + + + 0.134004884005 + + + 1.53461178672 + + + 0.49799980721 0.515832315832 0.136712284322 0.153684446423 + 0.100318575133 -0.000858028269482 0.001061407079 -0.000494518788044 + 0.00302867322055 + + + 77.0 + + + 0.519480519481 0.340659340659 + + + 0.883116883117 0.25974025974 0.207792207792 0.727272727273 0.0 + 0.747252747253 0.395604395604 0.175824175824 + + + 91.0 + + + 5.0 31.0 0.250936329588 5.0 1.0 3.0 + + + 0.0 0.989010989011 + + + 0.467532467532 + + + 0.641148325359 0.908466819222 0.231121281465 0.0 0.657894736842 + 0.986270022883 0.24942791762 0.0 0.0741626794258 0.151029748284 + 0.983981693364 0.851258581236 0.0 0.095652173913 0.878260869565 + 0.75652173913 + + + 0.333333333333 0.858585858586 0.75 0.878787878788 0.505050505051 + 0.00925925925926 0.0 0.0 0.363636363636 1.0 1.0 0.990909090909 + 0.454545454545 0.0 0.0 0.0 0.363636363636 1.0 1.0 0.949494949495 + 0.454545454545 0.0 0.0 0.0 0.272727272727 1.0 1.0 0.990909090909 + 0.554545454545 0.025 0.0 0.0 0.0 0.281818181818 0.275 0.3 + 0.963636363636 0.975 0.972727272727 0.733333333333 0.0 0.0 0.0 0.0 + 1.0 1.0 1.0 0.722222222222 0.0 0.0 0.0 0.0727272727273 1.0 + 0.991666666667 1.0 0.75 0.0 0.0 0.0 0.327272727273 0.772727272727 + 0.75 0.718181818182 0.575 + + + 0.447926819302 0.175771447588 0.00848759252604 0.00674169450318 + 0.0327482077417 0.38375445447 0.0654677561059 0.0221933975633 + 0.0120125241217 0.00542330422566 0.135306611985 0.288465801007 + 0.119902471257 0.0413023224221 + + + + + + + + + 4 1 39 5 3 5 11 1 15 32 9 35 5 37 3 40 1 40 2 39 2 39 3 38 3 38 10 31 + 12 29 8 32 10 26 1 4 9 32 6 1 1 33 4 38 3 4 1 32 4 37 2 39 3 38 13 27 + 13 24 17 23 18 21 19 21 19 20 20 20 10 2 9 23 2 1 2 4 9 32 9 32 9 18 + 3 4 1 6 9 16 25 16 6 12 5 17 6 11 6 17 1 1 5 9 7 20 21 21 20 20 21 20 + 21 22 19 5 1 16 2 2 23 10 1 2 2 7 3 3 29 3 1 2 3 1 1 2 1 0 + + + + 1845.0 + + + 0.911111111111 + + + 1259.0 + + + 0.256552819698 + + + 0.969330855019 + + + 0.497557585385 0.460322044913 0.0791511495754 0.116480271739 + -0.00578187303547 0.00246168992662 -0.00436007700883 + -0.00296260494056 0.00977412065362 + + + 41.0 + + + 1.53658536585 0.488888888889 + + + 1.85365853659 0.19512195122 1.36585365854 2.73170731707 + 0.177777777778 0.266666666667 0.444444444444 0.8 + + + 45.0 + + + 2.0 20.0 0.274647887324 4.0 5.0 1.0 + + + 0.0 0.977777777778 + + + 0.682384823848 + + + 0.772727272727 0.509090909091 0.163636363636 0.483333333333 + 0.863636363636 0.990909090909 0.990909090909 0.908333333333 + 0.827272727273 1.0 0.927272727273 0.416666666667 0.652892561983 + 0.834710743802 0.404958677686 0.287878787879 + + + 0.52 0.8 0.0 0.633333333333 0.0 0.0 0.166666666667 0.266666666667 + 0.72 1.0 0.36 0.933333333333 0.1 0.6 0.866666666667 0.633333333333 + 0.76 1.0 0.96 1.0 0.966666666667 1.0 1.0 0.8 0.64 1.0 1.0 1.0 1.0 + 1.0 1.0 0.833333333333 0.6 1.0 1.0 1.0 1.0 1.0 0.566666666667 + 0.633333333333 0.64 1.0 1.0 1.0 0.933333333333 0.76 0.166666666667 + 0.3 0.56 1.0 0.96 1.0 0.433333333333 0.6 0.5 0.166666666667 + 0.166666666667 0.833333333333 0.733333333333 0.694444444444 + 0.0833333333333 0.6 0.333333333333 0.166666666667 + + + 0.458336623126 0.0495995392508 0.0413866259693 0.0473816854353 + 0.0732232467143 0.101667588214 0.0540916380419 0.0532445454367 + 0.121891102636 0.0120558694466 0.0930273758169 0.0487453809076 + 0.114596407051 0.020373960682 + + + + + + + + + 4 1 19 1 18 2 16 5 15 5 16 3 17 5 15 5 15 5 15 5 15 5 15 3 1 1 16 2 1 + 1 15 3 1 1 14 4 1 3 12 4 1 3 13 3 1 3 13 3 1 3 13 7 12 8 13 4 2 1 13 + 3 1 3 11 1 1 7 11 10 11 10 10 4 1 5 11 3 1 4 12 3 1 3 13 3 1 3 13 3 1 + 3 13 3 2 2 13 3 1 3 13 7 13 8 12 8 13 3 2 1 16 1 62 1 18 2 18 3 15 1 + 1 4 12 2 1 4 12 8 11 9 12 7 13 7 14 7 13 2 1 4 13 7 13 7 13 8 12 7 13 + 7 13 2 1 4 1 1 11 8 12 7 13 7 13 7 1 1 11 4 1 3 13 2 259 2 17 7 13 8 + 11 9 12 8 12 3 2 2 13 3 2 3 12 8 17 3 17 3 14 1 1 5 13 7 12 8 12 8 12 + 3 1 4 12 8 12 8 11 9 11 4 1 1 1 3 10 9 12 7 13 4 57 2 17 4 1 1 17 3 + 14 1 2 3 14 1 1 5 12 7 14 5 15 5 15 5 16 3 17 2 18 3 16 4 3 4 10 3 1 + 6 9 11 9 6 1 4 9 5 1 5 10 11 9 11 9 4 2 5 9 4 3 4 10 3 3 4 10 5 1 3 + 11 3 16 4 17 4 16 3 17 3 18 2 18 2 18 2 18 2 18 2 18 2 86 1 18 3 18 2 + 19 1 17 3 18 2 18 3 57 4 17 2 18 1 1 1 17 3 18 2 + + + + 2980.0 + + + 0.134228187919 + + + 706.0 + + + 0.701133144476 + + + 1.10674088574 + + + 0.386387356493 0.463699180767 0.0191453512479 2.25355918696 + 0.14084612191 0.00214413224406 0.0596951852486 0.0136208690957 + 0.16698190623 + + + 20.0 + + + 4.2 0.288590604027 + + + 2.4 8.6 4.0 1.8 0.48322147651 0.187919463087 0.268456375839 + 0.214765100671 + + + 149.0 + + + 12.0 37.0 0.29 10.0 22.0 0.0 + + + 0.0 0.993288590604 + + + 0.236912751678 + + + 0.6 0.227027027027 0.0648648648649 0.0 0.502702702703 + 0.513513513514 0.735135135135 0.357894736842 0.0108108108108 + 0.0324324324324 0.308108108108 0.210526315789 0.0 0.0 + 0.00540540540541 0.226315789474 + + + 0.111111111111 0.157894736842 0.0277777777778 0.0 0.0 0.0 0.0 0.0 + 0.888888888889 0.929824561404 0.518518518519 0.228070175439 + 0.175438596491 0.037037037037 0.0 0.0 0.527777777778 0.684210526316 + 0.638888888889 0.315789473684 0.842105263158 0.666666666667 + 0.315789473684 0.0 0.148148148148 0.701754385965 0.796296296296 + 0.298245614035 0.754385964912 0.685185185185 0.912280701754 + 0.0701754385965 0.0 0.0526315789474 0.0555555555556 0.105263157895 + 0.868421052632 0.277777777778 0.342105263158 0.0 0.0 0.0 0.0 0.0 + 0.175438596491 0.0740740740741 0.473684210526 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0277777777778 0.394736842105 0.236842105263 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.333333333333 + + + 0.488167537844 0.231265236865 0.0257132013427 0.00975604902674 + 0.258619716671 0.493779967372 0.162523303015 0.0588021427335 + 0.0557762577793 0.0232951091769 0.14313984413 0.503126560892 + 0.390425654769 0.121503120424 + + + + + + + + + 33 2 32 3 32 3 31 4 31 4 31 4 31 3 32 2 171 1 30 1 2 2 1 1 28 1 2 2 1 + 1 27 2 1 4 28 1 2 4 27 2 2 3 28 1 3 3 27 1 4 1 29 1 33 1 34 1 126 3 + 32 3 32 4 29 6 29 6 28 7 6 7 15 7 6 7 16 7 5 7 14 11 2 7 15 20 15 19 + 15 20 16 18 16 19 16 18 16 19 16 18 17 18 18 17 18 16 19 16 19 15 19 + 17 17 19 16 18 17 18 17 17 17 18 17 11 1 5 19 15 19 16 20 14 20 15 20 + 15 20 15 20 11 1 2 21 4 1 9 21 3 3 8 21 14 21 13 23 12 23 12 23 11 24 + 11 25 10 26 9 26 8 27 8 28 6 29 6 30 5 30 5 30 5 30 4 31 4 32 3 32 3 + 33 2 33 2 26 0 + + + + 2975.0 + + + 0.411764705882 + + + 777.0 + + + 0.365508365508 + + + 0.723373450366 + + + 0.321447497918 0.571321321321 0.0704871007043 0.371860448872 + -0.110638209355 0.0214625270428 0.0742851939269 -0.0452145660002 + -0.0901847699608 + + + 35.0 + + + 0.485714285714 0.2 + + + 0.914285714286 0.228571428571 0.685714285714 0.114285714286 + 0.423529411765 0.188235294118 0.141176470588 0.0470588235294 + + + 85.0 + + + 6.0 23.0 0.365853658537 8.0 6.0 1.0 + + + 0.0 0.988235294118 + + + 0.261176470588 + + + 0.0 0.291666666667 0.85119047619 0.5625 0.0 0.534391534392 + 0.904761904762 0.328282828283 0.0529100529101 0.354497354497 + 0.132275132275 0.0 0.248677248677 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.113636363636 0.5 0.95 0.636363636364 0.0 0.0 0.0 0.1 + 0.909090909091 1.0 0.975 0.954545454545 0.659090909091 0.0 0.0 0.36 + 0.963636363636 1.0 0.96 0.854545454545 0.290909090909 0.0 0.0 0.0 + 0.681818181818 1.0 0.6 0.0454545454545 0.0 0.0 0.0 0.0 + 0.931818181818 0.545454545455 0.025 0.0 0.0 0.0 0.181818181818 0.04 + 0.436363636364 0.0 0.0 0.0 0.0 0.0 0.409090909091 0.0 0.0 0.0 0.0 + 0.0 0.0 0.5 0.0727272727273 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.727980017449 0.0959119252018 0.0881960738654 0.0366009625496 + 0.876927531795 0.220076118991 0.0575505751792 0.101738315598 + 0.0655381144062 0.0518112984898 0.79239147334 0.370414201927 + 0.085231658023 0.051183421843 + + + + + + + + + 1 3 4 1 5 1 7 4 1 2 9 1 3 14 2 22 3 15 1 22 3 38 3 38 3 38 3 38 3 39 + 2 39 3 38 3 38 3 38 3 38 3 38 3 30 2 5 4 37 4 37 3 39 1 41 1 40 1 39 + 2 39 2 10 2 27 3 6 5 28 3 37 4 37 4 4 1 32 4 37 4 37 4 37 4 37 4 37 4 + 37 5 36 5 36 5 36 5 36 5 36 5 36 7 34 7 5 1 28 7 5 2 27 6 35 6 35 6 2 + 1 32 6 9 2 5 12 7 6 5 28 2 7 3 29 2 7 4 28 2 7 4 28 2 7 4 28 1 9 2 30 + 1 7 1 34 0 + + + + 2173.0 + + + 0.77358490566 + + + 1688.0 + + + 0.145142180095 + + + 1.02017291066 + + + 0.516869075829 0.437431644185 0.0708487444497 0.103836349234 + 0.00494387430166 -4.8722754653e-05 -0.000583642733335 + -0.00039985929967 0.00240229765549 + + + 41.0 + + + 0.439024390244 0.415094339623 + + + 0.780487804878 0.487804878049 0.0 0.390243902439 0.528301886792 + 0.22641509434 0.0754716981132 0.830188679245 + + + 53.0 + + + 18.0 34.0 0.148648648649 1.0 3.0 3.0 + + + 0.0 0.981132075472 + + + 0.776806258629 + + + 0.830769230769 0.823076923077 0.646153846154 0.385714285714 + 0.907692307692 0.961538461538 1.0 0.464285714286 0.969230769231 1.0 + 1.0 0.435714285714 0.804195804196 0.895104895105 0.909090909091 0.5 + + + 0.766666666667 0.685714285714 0.7 0.657142857143 0.4 0.2 0.0 0.0 + 0.866666666667 1.0 1.0 0.942857142857 0.971428571429 1.0 + 0.885714285714 0.657142857143 0.866666666667 1.0 1.0 0.857142857143 + 1.0 1.0 0.885714285714 0.0 0.733333333333 1.0 1.0 1.0 1.0 1.0 + 0.971428571429 0.0 0.933333333333 1.0 1.0 1.0 1.0 1.0 + 0.885714285714 0.0 0.933333333333 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.833333333333 1.0 0.933333333333 1.0 1.0 1.0 + 0.914285714286 0.0 0.583333333333 0.809523809524 0.777777777778 + 0.880952380952 0.833333333333 0.833333333333 0.833333333333 + 0.238095238095 + + + 0.468136879718 0.0479834431633 0.0141372052872 0.00894010803579 + 0.0621502988296 0.0809473630456 0.0567288348451 0.00878777919183 + 0.0162944573539 0.0131138287675 0.187781306089 0.0133409048624 + 0.121305594819 0.0436515921808 + + + + + + + + + 28 3 177 5 176 3 178 3 178 4 177 7 175 8 173 10 171 13 129 1 38 15 93 + 2 3 4 11 5 9 1 38 17 90 29 5 3 37 19 88 37 37 21 86 37 37 24 83 36 38 + 27 80 36 39 28 78 37 38 26 80 37 38 26 6 2 72 37 38 27 7 3 70 5 1 30 + 38 28 9 4 66 4 3 29 38 20 2 8 11 2 64 4 2 30 38 20 2 11 5 1 68 36 38 + 20 2 4 3 6 4 8 60 36 38 5 2 15 1 5 3 9 2 5 60 36 38 6 1 14 2 6 4 15 + 59 36 38 20 6 6 4 14 57 36 38 18 10 6 4 13 56 36 39 18 13 4 5 10 1 3 + 52 36 39 19 12 8 3 14 50 36 39 19 2 1 3 3 6 1 1 6 2 11 52 35 12 2 25 + 28 8 8 4 8 4 2 45 35 12 2 25 30 8 8 4 8 4 2 43 36 11 2 25 33 9 9 2 9 + 2 3 41 35 38 37 3 29 39 35 11 3 24 72 35 36 11 3 24 7 2 34 7 2 2 19 + 34 36 11 3 24 6 5 34 8 1 2 19 33 35 11 3 24 8 3 35 11 21 29 36 11 3 + 24 21 4 22 11 21 28 36 11 3 24 20 7 24 8 22 26 36 11 2 25 20 9 24 9 + 20 25 36 11 4 24 17 13 24 5 2 4 18 23 36 11 4 23 17 15 26 8 19 9 1 12 + 36 11 5 22 19 4 6 3 29 5 22 6 2 11 36 11 8 2 1 15 22 2 42 1 23 5 4 10 + 36 10 20 1 2 3 68 3 21 3 6 8 36 10 20 1 75 4 18 3 8 6 36 9 18 5 11 1 + 35 3 9 2 3 2 11 2 3 2 13 2 9 5 36 10 19 3 10 4 35 2 14 2 12 2 16 2 10 + 4 36 10 32 6 33 9 22 3 14 2 10 4 36 10 32 8 30 10 25 1 13 4 9 3 36 9 + 17 2 14 10 28 11 38 3 10 3 8 2 26 9 17 2 14 13 20 21 47 3 2 15 7 7 4 + 10 16 1 16 15 10 28 47 3 2 17 1 4 3 5 3 9 34 17 13 24 1 3 43 2 2 22 3 + 5 3 9 34 20 13 1 1 25 16 2 24 1 2 22 3 5 3 9 34 28 8 25 15 4 25 28 7 + 5 38 52 4 1 16 4 29 26 5 6 38 45 8 2 10 1 8 2 29 28 3 7 38 44 20 3 13 + 3 22 28 4 6 38 36 5 2 21 1 2 1 13 3 6 2 12 29 4 6 38 38 2 2 19 3 5 2 + 10 4 20 28 5 5 39 42 30 4 3 4 21 27 6 6 37 45 1 12 17 3 3 4 21 27 4 8 + 36 62 18 5 20 29 3 8 35 66 15 5 20 27 5 9 34 68 7 1 6 4 20 27 5 9 33 + 71 6 2 4 4 20 28 4 9 34 71 6 3 2 4 20 28 4 9 34 74 4 8 20 28 4 9 34 + 77 1 8 20 28 5 8 34 87 19 28 5 8 34 88 18 29 4 8 34 87 19 28 5 9 33 + 87 19 28 5 9 34 88 17 29 4 9 34 90 15 29 4 10 33 90 16 28 4 10 33 91 + 2 4 9 28 4 10 33 99 7 28 4 10 33 95 2 2 7 28 4 9 34 94 12 29 3 10 33 + 94 12 29 5 8 34 91 15 28 5 8 34 92 14 29 4 8 3 7 2 1 20 94 13 29 3 9 + 3 18 13 94 12 29 3 9 3 23 8 95 11 29 3 10 2 26 5 96 10 29 3 10 2 27 4 + 98 8 30 2 10 3 27 3 100 6 30 2 10 5 25 3 100 6 30 2 10 3 27 3 100 6 + 30 2 11 2 27 3 101 6 29 3 10 2 28 2 102 5 29 3 40 2 102 4 30 3 40 3 + 103 2 31 2 40 3 103 2 31 2 41 2 104 1 31 2 41 2 136 2 41 2 136 2 41 2 + 136 3 40 2 137 2 41 1 137 2 179 2 179 2 180 1 180 1 180 1 180 1 180 2 + 179 2 180 1 180 1 180 1 180 1 180 1 181 1 + + + + 21358.0 + + + 1.53389830508 + + + 6651.0 + + + 0.239362501879 + + + 0.840058694057 + + + 0.489479443359 0.404888667857 0.454446113591 0.0652827725665 + -0.0259160218601 0.0107459013728 0.00143196224607 0.013046080702 + 0.00333737249485 + + + 181.0 + + + 1.53591160221 2.80508474576 + + + 0.817679558011 2.98342541436 1.61325966851 0.729281767956 + 1.83050847458 5.01694915254 3.05084745763 1.15254237288 + + + 118.0 + + + 35.0 165.0 0.295525494277 22.0 5.0 21.0 + + + 0.0 0.991525423729 + + + 0.311405562319 + + + 0.287356321839 0.571111111111 0.729501915709 0.0451851851852 + 0.215325670498 0.657777777778 0.0337164750958 0.0 0.0 + 0.577777777778 0.326436781609 0.0 0.518740629685 0.655072463768 + 0.274362818591 0.0804347826087 + + + 0.0 0.0 0.118181818182 0.848484848485 0.915584415584 0.681818181818 + 0.0575757575758 0.0 0.431677018634 0.684057971014 0.620289855072 + 0.689855072464 0.670807453416 0.663768115942 0.11884057971 + 0.00289855072464 0.0422077922078 0.554545454545 0.739393939394 + 0.69696969697 0.0 0.0 0.0 0.0 0.0 0.246376811594 0.724637681159 + 0.475362318841 0.136645962733 0.0 0.0 0.0 0.0 0.0 0.550724637681 + 0.866666666667 0.434782608696 0.0 0.0 0.0 0.0 0.0 0.0333333333333 + 0.848484848485 0.701298701299 0.212121212121 0.0 0.0 0.310559006211 + 0.950724637681 0.904347826087 0.573913043478 0.347826086957 + 0.382608695652 0.16231884058 0.0 0.170807453416 0.605797101449 + 0.646376811594 0.495652173913 0.192546583851 0.173913043478 + 0.101449275362 0.0579710144928 + + + 0.468057093663 0.183890213001 0.0267860118528 0.0159109346739 + 0.0759197458905 0.445413633188 0.0584013511845 0.0432874015567 + 0.00943230011403 0.0153505195488 0.052871722252 0.377824076337 + 0.206204276858 0.0324199674697 + + + + + + + + + 6 26 2 3 45 35 43 38 39 39 40 38 39 39 39 39 40 38 39 39 39 38 40 39 + 38 40 38 39 39 39 40 38 39 39 38 40 38 40 37 41 38 40 38 40 49 28 39 + 40 38 4 1 1 5 29 38 4 1 1 5 29 38 4 1 35 38 40 38 40 38 40 38 40 38 + 40 38 40 38 40 38 40 38 40 38 40 38 41 37 40 38 41 13 9 16 67 11 73 4 + 75 3 27 3 45 3 4 31 17 1 22 3 5 30 40 3 5 30 17 2 21 3 5 31 16 3 20 3 + 5 31 17 1 21 3 5 31 39 3 5 30 40 4 3 31 40 4 3 30 42 2 5 29 43 1 5 29 + 42 3 4 29 42 4 1 32 41 37 40 38 40 38 40 37 41 38 40 38 40 38 1 6 1 1 + 31 40 1 1 36 37 41 38 33 3 1 1 2 37 41 37 41 38 40 38 40 38 7 1 32 37 + 6 4 31 38 40 38 6 3 24 1 6 38 7 1 32 37 41 37 39 1 1 37 20 1 17 40 19 + 2 17 40 19 2 17 40 17 4 17 40 8 21 9 41 1 31 5 5 0 + + + + 6474.0 + + + 0.939759036145 + + + 3363.0 + + + 0.134701159679 + + + 1.5761589404 + + + 0.4899421126 0.495133555261 0.130977712797 0.152542680311 + 0.0939252320948 0.000687232016555 0.000689037653701 + 0.00306538406017 -0.00158663389248 + + + 78.0 + + + 0.75641025641 0.506024096386 + + + 1.23076923077 0.461538461538 1.02564102564 0.25641025641 + 0.0481927710843 0.289156626506 0.867469879518 0.771084337349 + + + 83.0 + + + 12.0 60.0 0.195402298851 2.0 2.0 5.0 + + + 0.0 0.987951807229 + + + 0.519462465246 + + + 0.857894736842 0.882205513784 0.228070175439 0.0 0.99 1.0 + 0.228571428571 0.161904761905 0.118421052632 0.200501253133 + 0.982456140351 0.854636591479 0.0 0.0809523809524 0.914285714286 + 0.804761904762 + + + 0.588888888889 0.811111111111 0.737373737374 0.866666666667 + 0.588888888889 0.181818181818 0.0 0.0 1.0 1.0 0.918181818182 1.0 + 0.2 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.19 0.0 0.0 0.0 0.96 1.0 1.0 1.0 + 0.39 0.345454545455 0.3 0.345454545455 0.255555555556 + 0.244444444444 0.212121212121 0.4 1.0 1.0 0.877777777778 + 0.818181818182 0.0 0.0 0.0 0.23 0.93 1.0 1.0 0.736363636364 0.0 0.0 + 0.0 0.26 1.0 1.0 1.0 0.854545454545 0.0 0.0 0.0 0.08 0.8 + 0.854545454545 0.76 0.618181818182 + + + 0.336942515083 0.206072691533 0.00940796616987 0.0168755935451 + 0.0695284385284 0.333352522905 0.0804403842391 0.00720552869373 + 0.0250342047626 0.0151837172494 0.0583045023004 0.164990278362 + 0.0576432471949 0.0588103675629 + + + + + + + + + 29 3 94 19 14 1 63 24 1 9 63 34 63 34 63 34 63 34 63 34 63 17 1 16 63 + 34 63 35 62 35 62 35 62 35 62 35 62 35 63 34 63 34 63 34 63 34 63 34 + 63 34 63 34 63 35 62 35 61 37 61 36 61 36 61 36 61 36 26 2 33 37 23 5 + 33 34 27 1 35 34 27 2 34 34 27 2 34 34 27 2 34 33 28 2 34 17 2 14 28 + 2 34 33 28 2 34 33 28 2 34 33 28 2 35 33 5 18 4 2 35 62 35 62 35 3 15 + 44 35 2 26 34 64 33 65 32 65 32 65 32 65 33 64 33 64 33 64 33 64 33 + 64 32 65 32 65 32 65 32 65 32 65 32 65 32 66 28 68 29 68 32 66 5 3 23 + 65 6 1 26 64 33 64 32 65 32 6 1 58 33 5 1 58 33 5 2 57 33 5 2 57 33 4 + 3 30 2 25 33 4 3 30 2 25 33 5 13 13 2 4 2 25 33 5 34 25 33 5 34 25 33 + 5 34 25 33 5 34 25 33 5 17 1 16 25 33 4 18 1 16 25 33 4 17 3 16 24 34 + 3 36 24 10 1 22 3 37 24 4 25 4 3 37 23 5 25 5 1 40 22 5 24 5 1 40 24 + 1 26 4 3 39 52 3 2 39 53 4 1 40 52 4 1 40 50 7 2 37 53 3 4 37 54 2 4 + 37 54 2 5 36 53 3 5 36 54 2 5 36 53 3 5 36 61 37 60 37 60 37 61 35 61 + 37 60 37 61 36 61 36 61 36 61 36 62 35 62 35 62 35 62 36 61 36 61 36 + 61 36 61 36 61 36 62 4 9 1 3 6 1 11 62 3 26 6 62 3 27 6 61 3 28 5 61 + 3 28 5 62 2 28 5 62 3 28 2 64 2 29 2 64 2 29 4 62 2 29 4 63 1 29 4 63 + 1 30 3 94 3 94 3 94 3 95 2 95 2 96 1 55 0 + + + + 13192.0 + + + 0.713235294118 + + + 4601.0 + + + 0.152792871115 + + + 0.850724546695 + + + 0.49640476708 0.463193991644 0.14604565916 0.249162440018 + -0.0671200803503 0.00557492456468 -0.0377223609726 0.028749294754 + -0.0112050388353 + + + 97.0 + + + 0.556701030928 0.558823529412 + + + 0.288659793814 0.824742268041 0.494845360825 0.618556701031 + 0.235294117647 0.382352941176 1.20588235294 0.411764705882 + + + 136.0 + + + 12.0 37.0 0.160804020101 8.0 4.0 2.0 + + + 0.0 0.992647058824 + + + 0.34877198302 + + + 0.0 0.0 0.726715686275 0.421568627451 0.746323529412 0.189950980392 + 0.477941176471 0.412990196078 0.639705882353 0.515931372549 + 0.214460784314 0.0 0.0141176470588 0.735294117647 0.491764705882 + 0.0 + + + 0.0 0.0 0.0 0.0 0.524509803922 0.857843137255 0.612745098039 + 0.122549019608 0.0 0.0 0.0 0.0 0.524509803922 1.0 0.950980392157 + 0.0 0.558823529412 0.490196078431 0.230392156863 0.0 0.553921568627 + 1.0 0.995098039216 0.00490196078431 0.936274509804 1.0 + 0.529411764706 0.0 0.0735294117647 0.28431372549 0.362745098039 + 0.289215686275 0.877450980392 1.0 0.56862745098 0.0 0.0 0.0 0.0 0.0 + 0.259803921569 0.421568627451 0.691176470588 0.803921568627 + 0.803921568627 0.0539215686275 0.0 0.0 0.0 0.0 0.647058823529 1.0 + 0.936274509804 0.0 0.0 0.0 0.0 0.0542986425339 0.542986425339 + 0.764705882353 0.814479638009 0.212669683258 0.0 0.0 + + + 0.386645421427 0.12170223412 0.0913892734103 0.12777435127 + 0.129988991147 0.219404222721 0.0307978971789 0.198226667028 + 0.329227574023 0.0612791991433 0.352194780713 0.142278019698 + 0.0686379638488 0.0154343968376 + + + + + + + + + 1 2 3 1 2 2 1 7 1 3 2 2 1 3 2 3 + + + + 36.0 + + + 0.444444444444 + + + 23.0 + + + 1.47826086957 + + + 0.736842105263 + + + 0.463768115942 0.548913043478 0.0330401906797 0.256102572532 + -0.000986274348648 -0.000353185674233 0.0114375529525 + 0.00283442680334 -0.0171138577337 + + + 4.0 + + + 0.75 0.0 + + + 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 + + + 9.0 + + + 3.0 5.0 0.0769230769231 0.0 3.0 1.0 + + + 0.0 0.888888888889 + + + 0.638888888889 + + + 0.0 0.5 1.0 0.333333333333 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 + 0.0 0.333333333333 + + + 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.5 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.5 1.0 + 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 1.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.5 + + + 0.321429947293 0.24436973277 0.0848395671775 0.0674337331696 + 0.305771771015 0.135496984214 0.194041587334 0.265183713112 + 0.211031473865 0.146137262343 0.00513280510603 0.20407341141 + 0.0250016970015 0.145532034762 + + + + + + + + + 62 3 126 6 19 8 96 34 95 38 91 38 91 39 90 39 91 38 91 38 91 38 90 39 + 90 39 91 38 91 38 91 38 91 38 91 38 91 38 91 38 91 38 91 38 91 38 91 + 38 91 38 91 6 3 28 92 7 2 29 92 6 3 28 92 37 92 36 93 36 93 5 4 27 92 + 6 3 28 60 1 31 6 5 26 59 16 3 3 4 1 5 5 11 2 1 19 59 24 3 1 4 5 14 19 + 59 23 4 1 4 4 12 1 3 18 59 24 1 4 17 24 59 29 18 2 1 20 59 38 14 18 + 59 38 14 18 59 22 1 7 1 6 15 18 59 38 2 1 1 7 1 20 59 46 5 25 2 14 37 + 37 11 47 34 36 12 12 1 35 33 38 2 8 1 2 1 2 9 33 33 38 26 32 34 36 27 + 32 34 36 27 32 34 35 28 17 1 14 34 36 27 32 34 36 27 32 34 37 26 32 + 34 37 26 32 34 37 26 32 34 37 25 33 33 39 23 37 30 39 24 35 32 38 23 + 36 32 38 23 35 33 38 23 36 33 37 24 35 33 37 24 34 34 36 25 34 34 37 + 24 16 3 15 35 4 6 25 30 1 2 7 4 15 34 9 2 10 1 8 3 1 1 1 30 29 2 1 31 + 6 6 4 1 13 3 4 24 2 3 29 2 5 26 38 24 4 1 29 2 11 2 3 1 5 9 6 3 29 24 + 34 2 37 2 14 2 14 24 34 2 28 3 6 3 29 24 34 2 29 1 8 1 30 23 35 2 37 + 1 31 23 35 2 69 23 36 1 69 23 36 1 37 3 29 24 35 1 38 11 5 1 14 24 35 + 1 37 27 5 24 35 1 37 29 4 23 1 1 5 2 26 1 36 31 3 23 35 1 36 31 3 23 + 35 1 36 31 3 23 35 1 37 31 1 24 35 1 37 56 35 2 36 56 35 2 36 56 14 2 + 3 3 13 1 37 56 5 26 4 2 36 56 3 28 4 2 36 56 3 28 4 2 36 56 2 29 4 2 + 1 1 1 3 30 87 4 2 4 1 26 3 2 87 4 2 4 3 29 88 3 4 1 6 27 88 3 2 4 4 + 28 87 4 2 37 86 4 2 37 86 4 2 37 87 3 2 37 87 3 2 37 87 3 2 37 87 3 2 + 37 87 3 2 37 93 36 93 36 93 36 93 36 93 36 93 36 93 37 92 37 92 37 92 + 1 8 3 9 16 92 2 24 11 93 1 27 8 92 2 30 5 92 4 29 5 92 1 30 6 124 5 + 124 5 123 6 126 4 126 2 89 0 + + + + 15996.0 + + + 1.04032258065 + + + 6186.0 + + + 0.15712900097 + + + 0.738009707821 + + + 0.50171632517 0.485058051356 0.213392130353 0.132289997084 + -0.0714112080597 -0.000190427864447 -0.0115613634107 + 0.0356469749399 -0.00642155369122 + + + 129.0 + + + 1.06976744186 1.25806451613 + + + 0.682170542636 1.3023255814 1.7984496124 0.496124031008 + 0.161290322581 1.70967741935 2.51612903226 0.645161290323 + + + 124.0 + + + 23.0 92.0 0.210914454277 11.0 3.0 8.0 + + + 0.0 0.991935483871 + + + 0.38672168042 + + + 0.0 0.0453629032258 0.753024193548 0.629032258065 0.0352822580645 + 0.897177419355 0.537298387097 0.180443548387 0.936491935484 + 0.426411290323 0.176411290323 0.0 0.130987292278 0.633431085044 + 0.773216031281 0.0322580645161 + + + 0.0 0.0 0.0 0.0 0.55 0.953125 0.858333333333 0.328125 0.0 0.0 + 0.1125 0.0703125 0.479166666667 1.0 1.0 0.3671875 0.0 0.0 + 0.858333333333 1.0 0.883333333333 0.29296875 0.3625 0.359375 0.1 + 0.04296875 0.716666666667 1.0 0.966666666667 0.0546875 0.0 0.0 + 0.8875 0.953125 0.408333333333 0.25 0.2875 0.09375 0.0 0.0 0.9 1.0 + 0.908333333333 0.16796875 0.175 0.15625 0.0 0.0 0.241666666667 + 0.296875 0.441666666667 0.99609375 0.933333333333 0.6171875 0.0 0.0 + 0.0 0.0 0.2 0.867647058824 0.894117647059 0.665441176471 + 0.129411764706 0.0 + + + 0.39568999354 0.132855090672 0.0938030610981 0.117621451365 + 0.026437681344 0.239895487653 0.0394465719578 0.151755650519 + 0.223619056323 0.0661829074667 0.0965654630899 0.109766582463 + 0.0602696068013 0.0342001666809 + + + + + + + + + 46 2 47 5 45 5 43 7 42 7 41 3 3 2 48 2 46 4 46 4 45 5 45 5 44 5 45 5 + 47 2 48 1 44 1 4 2 42 2 47 4 43 8 2 1 40 9 43 6 43 6 20 3 19 7 20 5 + 18 5 23 3 20 4 21 5 20 4 23 4 4 1 40 5 3 5 9 1 1 2 24 13 9 4 23 13 9 + 5 23 14 1 1 9 2 22 17 6 4 23 18 7 2 23 19 3 2 1 1 24 19 2 5 24 25 24 + 25 25 25 24 25 25 25 25 25 24 25 25 25 24 5 2 18 25 4 4 11 1 5 34 3 2 + 4 4 2 35 2 48 2 48 2 48 1 49 1 295 1 48 2 48 2 48 6 35 2 6 10 32 3 5 + 10 32 1 7 10 39 5 4 1 39 5 45 5 45 5 46 4 45 4 44 7 44 7 43 7 1 1 41 + 7 1 6 41 8 43 7 37 12 39 11 38 6 2 4 39 4 4 4 47 1 34 0 + + + + 4000.0 + + + 0.625 + + + 724.0 + + + 0.584254143646 + + + 0.694444444444 + + + 0.427021084677 0.501276313029 0.195634332406 0.499797090105 + -0.230592309491 0.0644410933395 0.0396796621176 -0.0793482240153 + 0.112020895194 + + + 50.0 + + + 1.14 0.4125 + + + 1.6 1.28 0.88 0.8 0.15 0.85 0.25 0.4 + + + 80.0 + + + 1.0 24.0 0.354609929078 15.0 1.0 3.0 + + + 0.0 0.9875 + + + 0.181 + + + 0.0 0.175 0.141666666667 0.416666666667 0.0 0.688461538462 + 0.311538461538 0.219230769231 0.0208333333333 0.366666666667 + 0.129166666667 0.0 0.330769230769 0.0807692307692 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0333333333333 0.0 0.133333333333 0.0833333333333 + 0.0 0.0 0.116666666667 0.583333333333 0.4 0.133333333333 0.75 0.7 + 0.0 0.0 0.55 1.0 0.65 0.0666666666667 0.316666666667 0.616666666667 + 0.0 0.0 0.242857142857 0.985714285714 0.542857142857 0.0 0.0 + 0.0142857142857 0.0 0.0 0.0 0.683333333333 0.5 0.0 0.0 0.0 0.0 + 0.0833333333333 0.383333333333 0.4 0.0166666666667 0.0 0.0 0.0 + 0.0666666666667 0.333333333333 0.35 0.0 0.0 0.0 0.0 0.0 0.6 + 0.285714285714 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.541174266511 0.164344835964 0.0724760200743 0.0784350846875 + 0.558478829959 0.192217973217 0.125253880942 0.249117334997 + 0.165759516034 0.105570388922 0.665252597494 0.0487490855379 + 0.185957311589 0.0828762092322 + + + + + + + + + 1 1 10 3 10 1 11 1 11 1 10 2 10 2 11 1 10 2 10 2 11 1 11 1 10 3 9 3 9 + 3 10 1 11 1 11 2 9 3 9 4 9 3 9 2 10 3 9 3 9 3 9 4 7 5 7 5 7 6 6 6 7 6 + 6 6 6 7 5 4 8 5 7 3 9 3 10 2 10 2 10 2 10 3 10 2 9 4 8 6 6 1 2 7 2 1 + 7 1 3 1 11 1 9 0 + + + + 576.0 + + + 0.25 + + + 145.0 + + + 1.04827586207 + + + 1.04347826087 + + + 0.236363636364 0.575201760822 0.030953626635 0.986484070688 + 0.102829964328 0.00803493160227 -0.0122551960383 0.0165749638665 + -0.406409801242 + + + 12.0 + + + 1.16666666667 0.0416666666667 + + + 2.66666666667 1.33333333333 0.666666666667 0.0 0.0 0.0 0.0 + 0.166666666667 + + + 48.0 + + + 4.0 20.0 0.184615384615 1.0 12.0 1.0 + + + 0.0 0.979166666667 + + + 0.251736111111 + + + 0.5 0.75 0.777777777778 0.333333333333 0.0 0.111111111111 + 0.777777777778 0.416666666667 0.0 0.0 0.111111111111 0.138888888889 + 0.0 0.0 0.0 0.111111111111 + + + 0.333333333333 0.5 0.5 0.333333333333 0.666666666667 0.0 0.0 0.0 + 0.583333333333 0.5 0.833333333333 1.0 1.0 1.0 0.5 0.5 0.0 0.0 0.0 + 0.666666666667 1.0 1.0 1.0 0.333333333333 0.0 0.0 0.0 0.0 + 0.583333333333 0.75 0.166666666667 0.416666666667 0.0 0.0 0.0 0.0 + 0.0 0.5 0.0 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0833333333333 0.0 + 0.25 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.166666666667 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.25 + + + 0.578330123864 0.180892130972 0.127055460018 0.0497901929458 + 0.577025737088 0.338599791272 0.132668097858 0.0888979186202 + 0.0626792647617 0.0789934816963 0.559791269559 0.396474040337 + 0.23331795764 0.108844090162 + + + + + + + + + 2 1 5 1 5 1 5 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 3 4 2 4 2 + 4 2 3 3 4 2 5 1 4 3 3 2 4 3 3 2 5 1 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 + 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 + 4 2 4 2 4 2 4 2 4 2 4 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 5 2 3 3 3 3 3 4 2 3 3 2 + 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 4 2 4 2 4 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 2 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 + 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 5 2 3 + 3 3 2 5 2 5 1 4 2 4 2 4 3 3 3 3 2 5 1 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 + 4 3 3 3 3 3 3 3 4 2 3 3 3 3 3 3 4 2 4 2 4 3 3 3 3 3 3 3 3 3 3 + + + + 1038.0 + + + 0.0346820809249 + + + 565.0 + + + 0.695575221239 + + + 0.932019704433 + + + 0.474690265487 0.508479110928 0.00207440447932 4.34452900796 + 0.00716822337284 2.42059738567e-05 0.0549720175158 + 0.000689809648324 0.507113017183 + + + 6.0 + + + 3.0 0.0 + + + 2.0 2.66666666667 1.33333333333 2.66666666667 0.0 0.0 0.0 0.0 + + + 173.0 + + + 6.0 26.0 0.0628272251309 0.0 69.0 2.0 + + + 0.0 0.994219653179 + + + 0.544315992293 + + + 0.0 0.0232558139535 0.0232558139535 0.0454545454545 0.802325581395 + 0.988372093023 1.0 0.75 0.93023255814 1.0 0.906976744186 1.0 + 0.337209302326 0.186046511628 0.0 0.5 + + + 0.0 0.0 0.0 0.0454545454545 0.0454545454545 0.0 0.0909090909091 0.0 + 0.0 0.0 0.0 0.0454545454545 0.0454545454545 0.0 0.0909090909091 0.0 + 0.285714285714 0.909090909091 1.0 0.954545454545 1.0 1.0 + 0.909090909091 0.318181818182 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 0.772727272727 0.857142857143 1.0 1.0 1.0 0.863636363636 + 0.952380952381 1.0 1.0 0.857142857143 1.0 1.0 1.0 0.863636363636 + 0.952380952381 1.0 1.0 0.238095238095 1.0 0.714285714286 + 0.0454545454545 0.0 0.0 0.5 1.0 0.047619047619 0.0454545454545 0.0 + 0.0 0.0 0.0 0.0909090909091 0.409090909091 + + + 0.353830597089 0.300264294238 0.0380146200723 0.0131803061762 + 0.203262138616 0.423892201666 0.268859600908 0.0468041002987 + 0.0146432375218 0.0195038437951 0.293793024409 0.289151731003 + 0.433360973589 0.240825294897 + + + + + + + + + 9 1 31 2 30 4 2 2 23 4 3 2 23 4 1 4 22 11 13 1 7 14 9 2 7 15 3 6 8 16 + 1 7 7 18 1 1 1 2 9 24 8 23 9 3 1 19 10 2 1 19 10 21 10 11 2 8 10 22 9 + 21 11 21 10 21 10 23 8 25 7 24 8 23 9 22 10 22 9 9 4 10 10 8 3 11 10 + 10 1 9 12 19 13 19 12 19 13 19 13 18 15 12 3 2 15 12 3 2 15 12 2 2 16 + 6 3 2 2 3 16 10 3 1 18 15 17 14 18 7 1 6 19 3 1 1 2 6 19 2 6 1 2 2 19 + 1 7 4 26 6 26 6 26 5 26 6 25 6 26 6 27 4 28 2 31 1 23 0 + + + + 1728.0 + + + 0.592592592593 + + + 789.0 + + + 0.311787072243 + + + 0.91553133515 + + + 0.402060591193 0.436616686993 0.0588963593715 0.185332517345 + -0.0453309856122 0.00532091932917 -0.00463891064835 + -0.00479610870016 0.0257397338178 + + + 32.0 + + + 0.9375 0.5 + + + 0.625 2.25 0.25 0.625 0.740740740741 0.148148148148 0.592592592593 + 0.444444444444 + + + 54.0 + + + 10.0 44.0 0.294117647059 1.0 5.0 2.0 + + + 0.0 0.981481481481 + + + 0.456597222222 + + + 0.115384615385 0.616071428571 0.894230769231 0.25 0.798076923077 + 0.955357142857 0.807692307692 0.544642857143 0.528846153846 + 0.955357142857 0.326923076923 0.0 0.336538461538 0.1875 0.0 0.0 + + + 0.0 0.0 0.0357142857143 0.75 0.833333333333 0.785714285714 + 0.392857142857 0.0 0.0416666666667 0.392857142857 0.678571428571 + 1.0 1.0 0.964285714286 0.357142857143 0.25 0.75 0.964285714286 + 0.964285714286 0.892857142857 0.833333333333 0.892857142857 0.75 + 0.75 0.416666666667 1.0 1.0 0.964285714286 1.0 0.535714285714 + 0.607142857143 0.0714285714286 0.208333333333 1.0 0.928571428571 + 1.0 0.916666666667 0.285714285714 0.0 0.0 0.0 0.785714285714 1.0 + 0.892857142857 0.166666666667 0.0 0.0 0.0 0.0 0.75 0.571428571429 + 0.142857142857 0.0 0.0 0.0 0.0 0.0416666666667 0.464285714286 + 0.0357142857143 0.0 0.0 0.0 0.0 0.0 + + + 0.559131636098 0.126068153342 0.062564246531 0.0442887850913 + 0.337113436767 0.262789592298 0.0470174783957 0.060697370528 + 0.0331862857665 0.0535863870482 0.0849129972711 0.223479632636 + 0.0670812533809 0.0368323010841 + + + + + + + + + 72 1 76 1 37 6 32 2 38 31 6 2 38 20 1 14 1 4 37 20 1 19 37 40 37 19 2 + 19 37 19 2 19 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 + 38 39 38 39 38 39 38 39 38 39 38 39 37 41 35 42 35 44 34 42 2 3 30 42 + 1 4 30 42 1 4 30 42 2 2 30 44 1 1 33 41 2 2 32 40 3 2 32 40 3 2 32 7 + 1 32 3 2 32 33 1 6 3 3 31 40 4 3 30 41 2 9 3 2 20 6 1 34 2 22 2 15 2 + 33 3 74 3 74 4 73 4 73 4 38 1 34 4 38 11 1 3 20 4 37 27 9 4 5 1 31 32 + 4 4 37 34 2 4 37 35 1 4 37 35 1 4 37 40 37 40 37 40 37 40 38 39 38 40 + 37 40 37 40 37 41 1 6 24 1 4 41 1 6 24 1 4 40 4 4 29 40 3 6 28 42 1 6 + 28 40 4 3 30 40 37 40 37 41 37 40 37 40 37 41 36 41 36 42 35 41 36 41 + 36 40 37 41 36 41 36 41 36 41 36 41 2 3 32 40 1 9 27 40 1 27 9 74 3 + 74 3 74 3 73 5 73 4 73 4 73 4 74 3 76 1 34 0 + + + + 7238.0 + + + 0.81914893617 + + + 3391.0 + + + 0.139486877027 + + + 0.734052111411 + + + 0.50571947415 0.454409680273 0.119203884415 0.151343821331 + -0.0816693718103 0.000105687501042 -0.000684617372121 + -0.00111043835812 0.00605394753139 + + + 77.0 + + + 0.480519480519 0.478723404255 + + + 0.883116883117 0.311688311688 0.571428571429 0.103896103896 + 0.297872340426 0.808510638298 0.595744680851 0.127659574468 + + + 94.0 + + + 8.0 41.0 0.235294117647 3.0 3.0 4.0 + + + 0.0 0.989361702128 + + + 0.468499585521 + + + 0.0 0.353070175439 0.782608695652 0.410087719298 0.183066361556 + 0.423245614035 0.995423340961 0.594298245614 0.858123569794 + 0.958333333333 0.0869565217391 0.171052631579 0.730434782609 + 0.91875 0.0369565217391 0.0 + + + 0.0 0.0 0.166666666667 0.648148148148 0.767676767677 0.453703703704 + 0.462962962963 0.037037037037 0.0 0.0 0.0 0.608333333333 1.0 + 0.891666666667 1.0 0.108333333333 0.0 0.0 0.0 0.564814814815 1.0 + 1.0 1.0 0.166666666667 0.336363636364 0.358333333333 0.391666666667 + 0.708333333333 1.0 0.983333333333 1.0 0.208333333333 0.736363636364 + 1.0 1.0 0.891666666667 0.118181818182 0.208333333333 0.3 0.35 + 0.666666666667 1.0 1.0 0.944444444444 0.0 0.0 0.0 0.0 + 0.709090909091 1.0 1.0 1.0 0.00909090909091 0.0 0.0 0.0 + 0.490909090909 0.7 0.866666666667 0.808333333333 0.145454545455 0.0 + 0.0 0.0 + + + 0.365194030304 0.181435192673 0.023181565145 0.0149512569197 + 0.0541564665605 0.325413430843 0.0549097022377 0.0353726531559 + 0.0119737379065 0.0113452994748 0.0807663433952 0.1884738801 + 0.0671608457551 0.0427523719712 + + + + + + + + + 8 6 17 4 2 4 1 4 9 3 4 9 9 1 6 4 1 1 10 3 20 4 21 1 145 9 16 9 15 2 1 + 3 1 1 17 6 20 5 2 2 19 5 22 4 21 3 171 1 20 5 19 5 20 4 21 2 23 1 22 + 2 13 4 5 3 10 5 7 3 4 2 3 5 6 5 2 10 5 18 6 18 6 17 9 8 1 6 9 1 1 11 + 15 8 17 4 20 3 21 1 16 0 + + + + 1104.0 + + + 0.521739130435 + + + 245.0 + + + 0.910204081633 + + + 0.684210526316 + + + 0.467968056788 0.585306122449 0.139246470433 0.875783117579 + -0.133833419749 0.000403737576251 0.0554138700826 -0.00422416814796 + -0.491061309204 + + + 24.0 + + + 1.70833333333 0.326086956522 + + + 0.833333333333 2.0 2.5 1.5 0.434782608696 0.260869565217 + 0.0869565217391 0.521739130435 + + + 46.0 + + + 1.0 12.0 0.375 3.0 3.0 0.0 + + + 0.0 0.978260869565 + + + 0.221920289855 + + + 0.0 0.0 0.30303030303 0.486111111111 0.30303030303 0.111111111111 + 0.0 0.680555555556 0.19696969697 0.375 0.0151515151515 + 0.541666666667 0.166666666667 0.194444444444 0.0454545454545 + 0.0694444444444 + + + 0.0 0.0 0.0 0.0 0.0 0.555555555556 0.611111111111 0.111111111111 + 0.0 0.0 0.0 0.0 0.0666666666667 0.5 0.944444444444 0.277777777778 + 0.533333333333 0.222222222222 0.0 0.0 0.0 0.0 0.555555555556 + 0.777777777778 0.466666666667 0.0555555555556 0.444444444444 0.0 + 0.0 0.0 0.777777777778 0.611111111111 0.333333333333 0.0 + 0.722222222222 0.0 0.0 0.0 0.666666666667 0.444444444444 + 0.533333333333 0.0 0.722222222222 0.0555555555556 0.0 + 0.0555555555556 0.944444444444 0.111111111111 0.533333333333 0.0 + 0.111111111111 0.222222222222 0.0 0.166666666667 0.277777777778 0.0 + 0.2 0.0 0.0555555555556 0.388888888889 0.0 0.0 0.0 0.0 + + + 0.33152024407 0.240655305715 0.347190201585 0.117563772116 + 0.0553523200632 0.295436580275 0.157765559014 0.22891384765 + 0.113339025452 0.118595604514 0.498322101674 0.43492178957 + 0.0682436070512 0.102463386339 + + + + + + + + + 27 1 13 2 14 1 11 5 12 3 12 3 12 4 11 3 12 3 12 3 11 4 13 2 11 3 13 3 + 11 3 10 6 10 3 10 1 4 2 11 1 11 3 2 2 23 7 11 1 11 8 10 1 11 8 8 3 10 + 9 8 3 10 9 8 3 10 10 6 3 11 10 5 4 10 12 3 4 11 13 2 4 11 12 4 2 11 + 14 2 2 12 15 1 3 11 20 11 19 10 19 11 20 9 21 8 1 1 19 9 22 8 21 8 10 + 1 10 9 9 2 9 10 9 1 10 9 9 4 8 10 7 6 7 9 8 6 7 10 8 3 8 11 18 12 19 + 11 18 12 8 1 8 13 5 10 2 13 6 9 2 13 5 9 3 14 4 4 7 15 14 16 15 15 15 + 14 8 1 7 15 4 1 1 6 2 16 2 11 1 16 2 28 1 186 2 27 4 24 7 23 7 23 7 + 24 5 25 3 28 2 29 1 29 1 20 0 + + + + 2070.0 + + + 0.434782608696 + + + 718.0 + + + 0.463788300836 + + + 0.902637577336 + + + 0.402458937662 0.442528264788 0.0564055775664 0.288130005873 + -0.048543436206 0.00604347308503 0.00362586955556 -0.00886684572227 + 0.0412541387921 + + + 30.0 + + + 1.53333333333 0.579710144928 + + + 0.933333333333 3.6 0.666666666667 0.8 0.985507246377 0.579710144928 + 0.695652173913 0.0579710144928 + + + 69.0 + + + 6.0 31.0 0.284810126582 6.0 6.0 3.0 + + + 0.0 0.985507246377 + + + 0.346859903382 + + + 0.0252100840336 0.504201680672 0.798319327731 0.0634920634921 + 0.602941176471 0.970588235294 0.602941176471 0.25 0.00840336134454 + 0.840336134454 0.470588235294 0.00793650793651 0.294117647059 + 0.161764705882 0.0 0.0 + + + 0.0 0.0 0.0 0.333333333333 0.740740740741 0.458333333333 + 0.111111111111 0.0 0.0 0.0833333333333 0.5625 0.916666666667 + 0.972222222222 0.90625 0.0555555555556 0.0833333333333 0.0625 + 0.861111111111 1.0 0.944444444444 0.583333333333 0.53125 + 0.0555555555556 0.722222222222 0.59375 0.833333333333 1.0 + 0.944444444444 0.638888888889 0.65625 0.0 0.222222222222 0.0 + 0.037037037037 0.833333333333 1.0 0.962962962963 0.625 + 0.037037037037 0.0 0.0 0.0 0.59375 0.944444444444 0.416666666667 + 0.0 0.0 0.0 0.09375 0.472222222222 0.40625 0.25 0.0 0.0 0.0 0.0 + 0.59375 0.0277777777778 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.63422714409 0.116930796616 0.0439285723529 0.0294706421198 + 0.613468753972 0.222887920137 0.0612811465955 0.0351345333883 + 0.0152504094289 0.051039541216 0.461836212942 0.231665613979 + 0.0893846599556 0.0377659775878 + + + + + + + + + 1 1 3 1 3 2 1 3 1 3 1 7 1 3 1 3 2 1 2 0 + + + + 40.0 + + + 0.4 + + + 24.0 + + + 1.33333333333 + + + 0.793650793651 + + + 0.375 0.546296296296 0.0288628472222 0.228877314815 + -0.00477430555556 0.000963476596961 -0.00282029164781 + 0.00180882579506 -0.0230446867278 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 10.0 + + + 2.0 2.0 0.0769230769231 0.0 5.0 1.0 + + + 0.0 0.9 + + + 0.6 + + + 0.0 0.666666666667 1.0 0.666666666667 1.0 1.0 1.0 1.0 0.0 1.0 1.0 + 0.666666666667 0.0 0.0 0.5 0.0 + + + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.5 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 + 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 + + + 0.476156477082 0.185983091966 0.0781042398315 0.0366279193018 + 0.333427623858 0.237304594385 0.147964823346 0.0880012560969 + 0.0964418700511 0.0700857863109 0.0434320647623 0.2341509366 + 0.126934453277 0.138008091028 + + + + + + + + + 36 5 141 2 398 2 141 11 16 10 104 16 8 16 102 20 4 18 104 19 3 18 104 + 40 104 40 104 40 103 41 104 40 104 40 104 40 104 40 104 40 104 40 104 + 40 104 19 2 19 104 20 1 19 21 2 80 41 20 3 81 39 21 4 80 36 23 5 80 + 36 23 6 78 38 22 8 77 4 4 30 21 9 85 29 21 10 77 1 6 30 20 10 75 39 + 20 12 73 39 19 14 72 39 19 14 73 38 18 14 73 39 18 14 75 36 19 14 73 + 8 1 27 20 13 1 1 73 2 3 2 3 28 18 13 75 39 17 14 74 39 17 14 74 39 17 + 14 74 39 16 16 5 2 66 8 1 30 16 18 1 7 1 1 61 38 17 26 2 1 60 39 16 + 25 2 2 61 38 16 31 59 39 14 37 63 13 14 3 14 37 91 2 14 36 92 2 13 37 + 92 1 14 39 90 1 15 39 104 40 104 39 104 40 104 40 104 40 23 1 80 40 + 22 3 64 2 13 40 21 4 63 3 12 41 21 6 62 2 11 41 21 7 62 2 12 7 1 33 + 19 9 1 2 58 2 12 6 4 31 19 10 74 6 7 27 20 9 76 5 8 2 2 1 1 20 20 10 + 75 5 15 18 21 10 76 5 6 2 7 17 20 13 77 2 6 5 5 16 20 14 77 1 6 6 3 + 16 21 14 88 2 3 15 22 14 89 1 3 16 21 13 94 16 20 14 94 16 20 15 1 3 + 89 15 21 20 88 15 21 25 84 6 1 7 20 26 85 5 1 6 21 26 90 8 19 28 89 8 + 19 29 88 7 20 30 87 7 20 30 87 7 20 32 84 8 19 34 82 9 19 35 81 8 20 + 36 80 8 20 36 80 8 20 32 1 3 80 8 20 28 1 2 3 2 81 7 21 31 3 1 82 5 + 22 28 1 1 88 4 24 25 93 2 27 22 124 20 126 3 2 14 3 3 120 2 2 12 5 3 + 121 1 2 13 4 4 120 23 123 15 3 3 126 13 1 4 128 16 128 7 2 1 2 4 119 + 4 5 9 4 2 120 6 2 5 2 4 3 3 114 12 3 3 2 5 2 2 117 27 117 27 115 1 5 + 23 116 28 118 25 120 24 121 23 123 21 128 16 128 15 130 14 138 6 139 + 4 142 2 128 4 4 8 130 14 131 13 131 14 131 12 133 11 134 10 135 8 137 + 6 139 5 140 3 142 2 8 0 + + + + 18720.0 + + + 1.10769230769 + + + 4310.0 + + + 0.221345707657 + + + 2.07707222492 + + + 0.490441808771 0.427110199824 0.451986991643 0.214421879005 + 0.275947653067 0.0250423141746 0.0366407811193 0.0362787359933 + 0.0335214003581 + + + 144.0 + + + 0.888888888889 1.03846153846 + + + 0.666666666667 0.694444444444 0.333333333333 1.86111111111 + 0.584615384615 1.47692307692 1.53846153846 0.430769230769 + + + 130.0 + + + 8.0 57.0 0.293501048218 17.0 4.0 4.0 + + + 0.0 0.992307692308 + + + 0.230235042735 + + + 0.752604166667 0.429292929293 0.0 0.0 0.199652777778 0.503367003367 + 0.0251736111111 0.0 0.00260416666667 0.395622895623 0.25 0.0 0.0 + 0.0513468013468 0.668402777778 0.407407407407 + + + 0.611111111111 0.822916666667 0.809027777778 0.0 0.0 0.0 0.0 0.0 + 0.586805555556 0.989583333333 0.961805555556 0.0 0.0 0.0 0.0 0.0 + 0.253472222222 0.267361111111 0.253472222222 0.0751633986928 0.0 + 0.0 0.0 0.0 0.0 0.277777777778 0.784722222222 0.901960784314 + 0.100694444444 0.0 0.0 0.0 0.0 0.0104166666667 0.333333333333 + 0.996732026144 0.708333333333 0.256944444444 0.0 0.0 0.0 0.0 + 0.0208333333333 0.205882352941 0.0347222222222 0.0 0.0 0.0 0.0 0.0 + 0.0 0.199346405229 0.822916666667 0.753472222222 0.357638888889 + 0.016339869281 0.0 0.0 0.0 0.0 0.302083333333 0.795138888889 + 0.798611111111 0.477124183007 + + + 0.398794354039 0.250714069913 0.10277091628 0.0417324542573 + 0.126463936474 0.440172478058 0.165281106565 0.0600656250615 + 0.0522172822675 0.0605282314114 0.222623752708 0.210146608824 + 0.365883348284 0.101975958955 + + + + + + + + + 46 3 73 6 72 6 72 6 72 7 70 9 69 10 68 11 67 11 67 11 67 12 66 14 63 + 15 51 2 10 5 3 6 51 3 10 1 8 4 52 2 11 1 3 3 5 2 50 4 10 2 1 6 1 3 50 + 5 10 14 4 2 43 5 10 16 1 4 40 6 10 3 1 20 26 2 7 9 9 4 1 19 20 25 9 + 24 17 27 10 23 18 13 1 12 12 3 1 14 2 3 17 25 13 2 2 13 2 5 7 3 8 24 + 12 2 3 11 2 9 1 5 1 1 7 23 13 2 3 11 2 10 2 3 9 8 5 8 15 2 4 11 1 10 + 13 8 6 3 1 2 17 3 2 12 1 10 12 9 6 8 14 30 11 9 6 11 11 4 2 25 9 10 4 + 13 11 3 3 26 8 27 11 3 1 28 8 29 9 34 5 30 9 35 4 29 10 34 5 29 10 34 + 5 29 10 34 5 29 10 33 1 1 3 30 10 35 3 29 11 3 2 13 1 16 4 9 5 14 12 + 1 5 4 4 1 3 15 26 2 17 1 6 2 9 15 26 2 1 2 14 1 6 2 9 14 21 3 3 6 13 + 1 4 6 6 13 23 3 2 8 12 2 2 8 5 11 30 8 12 2 4 6 5 12 30 7 12 2 4 3 8 + 8 28 1 5 7 11 3 4 3 8 7 28 2 3 9 11 3 3 4 8 7 29 1 4 8 11 2 5 4 7 3 2 + 1 30 1 5 1 2 2 20 5 6 2 39 3 23 6 46 3 23 5 12 2 25 1 7 5 24 2 6 2 3 + 1 1 1 24 5 4 2 28 1 6 3 1 5 26 1 4 6 32 3 1 6 25 2 3 6 33 9 21 6 2 7 + 34 9 20 2 2 2 2 7 36 7 21 14 36 7 22 13 36 7 23 13 29 3 3 7 22 15 29 + 3 3 6 21 16 11 4 2 1 12 14 20 14 11 8 12 13 23 11 11 8 12 13 24 11 10 + 8 13 13 23 10 11 3 1 3 14 2 1 9 26 8 17 1 18 8 27 6 35 9 28 6 35 10 + 29 4 36 9 29 4 37 8 70 3 76 2 50 4 2 4 17 1 48 1 1 15 12 1 48 18 1 1 + 7 5 46 20 7 8 43 15 1 1 12 6 43 15 1 1 1 2 58 16 2 2 58 22 1 1 7 3 44 + 26 7 3 42 1 2 24 4 3 2 1 44 31 44 1 2 28 2 1 44 30 3 2 44 4 1 25 1 3 + 43 5 1 26 1 1 44 33 1 1 43 36 42 36 42 37 41 35 1 2 40 36 41 38 41 38 + 40 38 40 37 41 36 42 36 42 35 43 35 43 35 43 35 43 34 44 14 6 10 1 4 + 43 5 1 7 7 7 6 1 44 8 3 2 2 1 4 8 50 27 51 26 51 26 52 27 52 26 52 2 + 1 23 52 1 3 21 53 1 3 17 1 3 53 8 1 1 1 6 1 2 2 3 53 8 4 9 1 4 52 9 5 + 16 48 9 5 15 49 10 4 14 49 8 7 19 43 9 8 18 43 9 8 19 42 8 9 19 43 7 + 9 23 39 6 12 21 39 6 15 19 38 6 16 12 2 5 38 5 17 11 2 5 37 6 19 9 3 + 5 37 5 20 7 7 1 38 5 24 3 46 5 23 4 46 5 22 6 47 3 23 5 47 3 23 4 9 0 + + + + + 10920.0 + + + 0.557142857143 + + + 3755.0 + + + 0.333422103862 + + + 1.16617429838 + + + 0.599782108704 0.487528379427 0.0860606944321 0.372948003428 + 0.0600248358438 -0.0167698800068 0.00879416674165 -0.018383700038 + 0.0370686965496 + + + 78.0 + + + 3.26923076923 1.61428571429 + + + 1.53846153846 1.79487179487 4.51282051282 5.12820512821 + 1.68571428571 2.71428571429 0.885714285714 1.17142857143 + + + 140.0 + + + 27.0 124.0 0.251148545176 23.0 12.0 3.0 + + + 0.0 0.992857142857 + + + 0.343864468864 + + + 0.29022556391 0.29022556391 0.0 0.0 0.241428571429 0.372857142857 + 0.101428571429 0.111428571429 0.661654135338 0.338345864662 + 0.777443609023 0.606015037594 0.251428571429 0.507142857143 + 0.512857142857 0.45 + + + 0.0 0.487654320988 0.37908496732 0.0 0.0 0.0 0.0 0.0 0.0 + 0.633333333333 0.447058823529 0.327777777778 0.0 0.0 0.0 0.0 + 0.00588235294118 0.783333333333 0.776470588235 0.688888888889 + 0.117647058824 0.0 0.0 0.0 0.0588235294118 0.0944444444444 + 0.0294117647059 0.0 0.0941176470588 0.194444444444 0.2 + 0.244444444444 0.477124183007 0.679012345679 0.503267973856 + 0.234567901235 0.62091503268 0.981481481481 0.895424836601 + 0.438271604938 0.476470588235 0.977777777778 0.558823529412 + 0.0833333333333 0.488235294118 1.0 0.852941176471 0.277777777778 + 0.0 0.75 0.847058823529 0.661111111111 0.358823529412 + 0.994444444444 0.617647058824 0.733333333333 0.0 0.227777777778 + 0.358823529412 0.172222222222 0.217647058824 0.455555555556 + 0.0941176470588 0.344444444444 + + + 0.373520935146 0.196961054737 0.0419139997431 0.070019266933 + 0.0193293803296 0.328337700554 0.0744889447493 0.0986355784477 + 0.111893791416 0.07358764442 0.154074631201 0.172131984854 + 0.092725056831 0.0337417659041 + + + + + + + + + 39 1 78 1 42 3 33 1 42 2 33 3 41 2 33 3 41 2 33 3 41 2 20 2 2 12 41 3 + 6 29 41 38 41 38 41 38 40 39 41 38 41 38 41 38 40 39 41 38 40 39 40 + 39 40 39 41 38 41 38 41 38 41 38 41 38 41 38 40 40 37 43 38 40 39 41 + 38 41 31 2 5 41 30 4 4 41 29 5 4 40 31 3 5 39 33 1 7 38 33 2 6 38 33 + 2 6 7 2 30 31 3 6 6 3 30 31 3 6 38 32 3 6 38 32 3 6 39 9 2 5 1 1 2 11 + 3 6 67 3 3 6 73 6 72 8 72 7 72 7 17 1 54 7 22 5 3 3 39 7 10 2 1 21 38 + 7 5 29 38 7 4 30 38 7 3 32 37 7 3 32 37 7 3 32 37 7 3 32 37 8 2 32 37 + 8 2 32 37 8 2 32 37 8 2 32 37 8 2 32 37 8 2 32 37 8 2 33 36 8 2 33 31 + 2 1 10 2 33 37 7 2 32 38 8 1 32 38 8 1 33 37 8 1 33 37 8 1 33 37 42 + 37 42 37 42 37 42 37 42 37 42 37 42 37 42 37 42 37 42 37 42 37 42 37 + 42 37 42 37 42 7 2 2 6 21 41 2 27 9 41 2 31 4 42 1 34 3 41 3 31 5 41 + 1 33 3 76 3 76 3 76 3 75 4 1 0 + + + + 7426.0 + + + 0.840425531915 + + + 3347.0 + + + 0.148789961159 + + + 1.43209334248 + + + 0.505603946895 0.486508540789 0.140143205913 0.145635962174 + 0.0956489032358 -0.000603527706016 0.00303367179068 0.0024923717454 + 0.00223740973593 + + + 79.0 + + + 0.341772151899 0.617021276596 + + + 0.354430379747 0.0506329113924 0.354430379747 0.607594936709 + 0.297872340426 0.765957446809 1.10638297872 0.297872340426 + + + 94.0 + + + 5.0 30.0 0.166101694915 4.0 2.0 4.0 + + + 0.0 0.989361702128 + + + 0.450713708591 + + + 0.608695652174 0.850877192982 0.196796338673 0.0 0.728260869565 1.0 + 0.0739130434783 0.0 0.0934782608696 0.327083333333 0.986956521739 + 0.595833333333 0.0 0.24375 0.854347826087 0.641666666667 + + + 0.323232323232 0.712962962963 0.768518518519 0.648148148148 + 0.40404040404 0.185185185185 0.0 0.0 0.336363636364 1.0 1.0 + 0.958333333333 0.236363636364 0.0 0.0 0.0 0.381818181818 1.0 1.0 + 1.0 0.145454545455 0.0 0.0 0.0 0.481818181818 1.0 1.0 1.0 + 0.163636363636 0.0 0.0 0.0 0.172727272727 0.2 0.308333333333 + 0.558333333333 1.0 0.95 0.9 0.283333333333 0.0 0.0 0.0 + 0.441666666667 1.0 1.0 1.0 0.2 0.0 0.0 0.0 0.433333333333 1.0 1.0 + 1.0 0.25 0.0 0.0 0.125 0.416666666667 0.7 0.716666666667 0.8 + 0.516666666667 + + + 0.46981537406 0.162432317837 0.0170200903985 0.0117666657056 + 0.0764430963274 0.360485465143 0.0643280101375 0.0127387985038 + 0.00453588007483 0.0148668346719 0.150197721889 0.311633035679 + 0.109534980708 0.045499949465 + + + + + + + + + 66 4 69 5 70 4 70 4 70 4 69 5 70 3 72 2 72 2 41 1 19 1 8 4 40 3 3 3 3 + 22 40 3 1 30 40 34 40 34 40 34 40 34 40 35 39 34 40 34 40 34 40 35 39 + 35 39 35 39 34 40 34 40 34 40 34 40 34 40 34 40 34 41 33 40 34 40 35 + 40 34 40 34 40 34 40 34 40 35 39 35 38 35 39 35 39 35 39 35 39 35 39 + 35 39 35 7 2 29 36 6 6 4 58 6 69 5 69 5 69 5 69 5 69 5 39 3 9 1 1 1 + 15 5 39 13 1 1 7 1 7 5 40 18 2 2 7 5 40 22 7 6 38 25 5 5 39 26 3 5 40 + 27 3 3 41 26 5 2 40 27 5 3 39 27 5 3 40 26 6 3 39 26 6 2 41 25 6 2 40 + 26 6 3 39 26 7 2 38 27 6 3 38 28 5 3 38 28 4 4 7 2 29 28 5 3 38 29 3 + 4 38 30 2 4 38 37 37 36 38 36 38 36 38 36 38 36 38 36 38 37 37 37 38 + 35 39 35 39 35 39 36 38 36 38 35 39 35 3 3 33 36 2 20 16 36 2 28 8 36 + 2 28 8 36 2 29 7 67 6 69 5 69 5 70 4 70 5 69 5 70 4 70 3 71 3 70 3 72 + 1 36 0 + + + + 7844.0 + + + 0.698113207547 + + + 3411.0 + + + 0.139548519496 + + + 0.773432835821 + + + 0.505206764577 0.496458237355 0.111966033836 0.160508611428 + -0.0802330846077 -0.00126338584897 0.0062368260817 + 0.000581416737812 -0.00521543322262 + + + 74.0 + + + 0.337837837838 0.367924528302 + + + 0.378378378378 0.108108108108 0.27027027027 0.540540540541 + 0.188679245283 0.0754716981132 1.01886792453 0.188679245283 + + + 106.0 + + + 3.0 18.0 0.193548387097 4.0 9.0 2.0 + + + 0.0 0.990566037736 + + + 0.434854665987 + + + 0.0 0.19341563786 0.899572649573 0.397119341564 0.0668016194332 + 0.292397660819 1.0 0.510721247563 0.600427350427 1.0 0.224358974359 + 0.191358024691 0.538461538462 0.791423001949 0.257085020243 0.0 + + + 0.0 0.0 0.0 0.34126984127 0.837606837607 0.777777777778 + 0.675213675214 0.047619047619 0.0 0.0 0.0 0.404761904762 1.0 + 0.982905982906 0.923076923077 0.0 0.0 0.0 0.0 0.428571428571 1.0 + 1.0 0.940170940171 0.0 0.0538461538462 0.2 0.146153846154 0.55 1.0 + 1.0 1.0 0.157142857143 0.179487179487 1.0 1.0 1.0 0.470085470085 + 0.350427350427 0.410256410256 0.357142857143 0.222222222222 1.0 1.0 + 1.0 0.0769230769231 0.0 0.0 0.0 0.239316239316 1.0 1.0 1.0 + 0.145299145299 0.0 0.0 0.0 0.4 0.530769230769 0.569230769231 + 0.635714285714 0.553846153846 0.292307692308 0.0 0.0 + + + 0.490791071534 0.142787225128 0.0218713695814 0.0226847889321 + 0.114379342542 0.326916426494 0.0517345228022 0.0208934904478 + 0.0365248958655 0.031096757876 0.138221671771 0.306665932843 + 0.10642416155 0.0284305810921 + + + + + + + + + 39 2 43 2 129 1 44 2 43 1 36 2 42 4 41 6 39 7 38 9 36 10 35 10 37 7 + 38 2 2 1 40 2 28 5 13 1 22 4 1 4 9 5 2 1 19 2 3 5 8 12 16 4 1 6 5 14 + 14 12 4 15 14 13 3 15 13 15 2 15 1 4 8 12 4 21 9 10 5 9 4 1 6 1 9 10 + 6 7 4 2 16 10 6 8 2 4 15 10 6 8 2 4 15 10 6 8 1 6 13 11 6 15 13 11 6 + 8 1 5 13 12 7 7 3 2 14 12 6 7 21 11 7 6 21 11 7 6 21 11 7 6 21 11 6 7 + 21 11 6 12 16 11 6 14 14 11 6 14 13 12 6 16 11 12 6 17 10 13 5 17 8 + 15 6 16 4 1 3 10 1 3 8 11 8 2 1 2 1 12 8 9 9 18 9 9 9 18 9 9 9 17 10 + 6 13 4 2 10 11 5 14 3 2 7 17 2 14 3 2 6 18 2 20 5 40 4 41 4 227 1 44 + 1 43 2 44 1 30 0 + + + + 2880.0 + + + 0.703125 + + + 898.0 + + + 0.440979955457 + + + 0.875699888018 + + + 0.498734561652 0.527556828225 0.126124394268 0.158330007046 + -0.0476649371668 -0.00117312746646 0.0025457790845 0.00814413995315 + -0.0129331515398 + + + 45.0 + + + 1.0 0.890625 + + + 0.355555555556 0.711111111111 0.977777777778 1.95555555556 0.0625 + 1.6875 1.3125 0.5 + + + 64.0 + + + 6.0 19.0 0.260273972603 7.0 0.0 2.0 + + + 0.0 0.984375 + + + 0.311805555556 + + + 0.0 0.176136363636 0.414772727273 0.301136363636 0.0 0.693181818182 + 0.727272727273 0.1875 0.272727272727 0.630681818182 0.636363636364 + 0.119318181818 0.09375 0.421875 0.333333333333 0.015625 + + + 0.0 0.0 0.0 0.0 0.0 0.225 0.5 0.0 0.0 0.0 0.25 0.395833333333 + 0.541666666667 0.791666666667 0.6875 0.0 0.0 0.0 0.7 1.0 1.0 0.975 + 0.6 0.125 0.0 0.0 0.604166666667 0.520833333333 0.5 0.520833333333 + 0.0833333333333 0.0 0.0208333333333 0.25 0.291666666667 + 0.541666666667 0.416666666667 0.354166666667 0.0416666666667 0.0 + 0.025 0.85 0.8 0.975 0.875 1.0 0.475 0.0 0.0833333333333 + 0.208333333333 0.645833333333 0.6875 0.25 0.854166666667 0.0625 0.0 + 0.0833333333333 0.0 0.166666666667 0.1875 0.0 0.229166666667 0.0 + 0.0 + + + 0.620645442601 0.059124903134 0.00918490258761 0.0235930263366 + 0.384193827077 0.123107197538 0.0359268002302 0.00880922956161 + 0.0718458452456 0.0176147010659 0.0426987289085 0.0809396682632 + 0.122032355177 0.0132030153349 + + + + + + + + + 35 2 42 2 40 5 39 6 39 4 40 5 38 6 37 7 36 7 38 5 9 1 29 6 7 2 29 6 7 + 2 28 7 7 3 9 2 3 9 3 8 7 38 5 38 6 38 6 38 6 38 6 38 6 38 6 38 6 38 6 + 38 6 39 5 39 5 39 5 39 5 39 5 39 5 39 5 39 5 39 5 39 5 35 9 32 12 39 + 5 39 5 39 5 39 5 39 6 38 5 39 6 39 5 39 5 39 5 39 5 39 5 39 5 39 5 39 + 5 39 5 39 5 39 5 40 4 39 5 39 5 3 29 7 5 2 31 6 5 2 32 5 5 2 32 5 5 1 + 34 5 37 6 38 8 36 7 37 8 35 10 34 9 36 7 37 8 35 11 33 10 32 13 30 2 + 1 9 37 2 2 1 38 3 1 2 37 8 36 9 35 9 36 7 37 6 38 5 39 3 7 0 + + + + 3652.0 + + + 0.530120481928 + + + 1952.0 + + + 0.171106557377 + + + 1.10452322738 + + + 0.496402020587 0.454955517793 0.074289945537 0.145923475195 + 0.0221141196195 -0.0030545809291 0.0200700747056 0.00385039402229 + 0.0191762352834 + + + 44.0 + + + 0.75 0.168674698795 + + + 0.0909090909091 0.0 0.454545454545 2.45454545455 0.289156626506 0.0 + 0.192771084337 0.144578313253 + + + 83.0 + + + 4.0 23.0 0.182320441989 3.0 2.0 2.0 + + + 0.0 0.987951807229 + + + 0.534501642935 + + + 0.331818181818 1.0 0.74025974026 0.0 0.327272727273 1.0 + 0.761904761905 0.0 0.372727272727 0.995670995671 0.761904761905 + 0.017316017316 0.436363636364 0.484848484848 0.601731601732 + 0.688311688312 + + + 0.0 0.74 1.0 1.0 0.82 0.618181818182 0.0 0.0 0.0 0.6 1.0 1.0 1.0 + 0.545454545455 0.0 0.0 0.0 0.64 1.0 1.0 1.0 0.545454545455 0.0 0.0 + 0.0 0.666666666667 1.0 1.0 1.0 0.545454545455 0.0 0.0 0.0 0.7 1.0 + 1.0 1.0 0.545454545455 0.0 0.0 0.0666666666667 0.716666666667 1.0 + 0.983333333333 1.0 0.545454545455 0.0 0.0606060606061 0.82 1.0 1.0 + 0.84 1.0 0.854545454545 0.88 0.818181818182 0.0666666666667 + 0.0166666666667 0.106060606061 0.133333333333 0.3 0.363636363636 + 0.666666666667 0.454545454545 + + + 0.591147333599 0.0695367426126 0.0879766554111 0.0652677503277 + 0.436059655398 0.0820249581237 0.0460508852672 0.0945827543359 + 0.0763925074897 0.0650528972357 0.118344168179 0.0462211800232 + 0.0909350525179 0.0556017052165 + + + + + + + + + 38 1 41 1 1 11 3 21 40 38 40 38 40 38 40 38 40 38 41 37 40 38 40 38 + 41 36 42 37 41 37 41 37 41 36 42 36 42 37 41 37 41 36 42 37 41 37 39 + 40 39 39 40 38 39 38 40 38 40 39 40 37 42 36 42 36 42 36 42 36 42 36 + 42 36 42 37 16 1 2 6 9 1 6 72 6 72 6 23 7 7 6 29 6 26 1 45 6 72 6 72 + 6 72 6 72 6 72 6 3 10 3 5 1 11 39 6 2 32 38 6 2 32 38 7 1 32 38 7 1 + 32 38 7 1 32 38 7 1 32 38 40 38 40 38 40 39 39 39 39 34 44 1 4 3 1 22 + 47 37 41 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 30 1 8 39 2 231 + 3 35 3 39 1 36 1 155 2 76 2 75 3 77 2 + + + + 6864.0 + + + 0.886363636364 + + + 3235.0 + + + 0.133230293663 + + + 1.4962962963 + + + 0.496718119593 0.45467142781 0.137619225944 0.141388307887 + 0.0965665686714 0.000103007709078 -0.000405880711568 + -0.000207689690693 3.06240235047e-05 + + + 78.0 + + + 0.538461538462 0.25 + + + 0.153846153846 0.461538461538 0.615384615385 0.666666666667 + 0.0909090909091 0.272727272727 0.5 0.136363636364 + + + 88.0 + + + 4.0 25.0 0.182978723404 6.0 4.0 7.0 + + + 0.0 0.988636363636 + + + 0.4712995338 + + + 0.866028708134 0.866028708134 0.0334928229665 0.0 0.947727272727 + 0.981818181818 0.102272727273 0.0681818181818 0.00239234449761 + 0.406698564593 0.99043062201 0.545454545455 0.0 0.363636363636 + 0.845454545455 0.518181818182 + + + 0.767676767677 0.79797979798 0.767676767677 0.666666666667 + 0.111111111111 0.0 0.0 0.0 0.881818181818 1.0 1.0 1.0 + 0.0272727272727 0.0 0.0 0.0 0.909090909091 1.0 1.0 0.972727272727 + 0.00909090909091 0.0 0.0 0.0 0.909090909091 0.972727272727 1.0 + 0.954545454545 0.209090909091 0.190909090909 0.2 0.0727272727273 + 0.0 0.010101010101 0.030303030303 0.767676767677 1.0 0.959595959596 + 1.0 0.0909090909091 0.0 0.0 0.0 0.827272727273 1.0 1.0 1.0 + 0.0909090909091 0.0 0.0 0.0 0.872727272727 1.0 1.0 1.0 + 0.0818181818182 0.0 0.0 0.0 0.581818181818 0.718181818182 + 0.663636363636 0.8 0.190909090909 + + + 0.504622410197 0.155884341418 0.00104104657236 0.00145754021807 + 0.12462597889 0.375652668693 0.0537066642822 0.0201603002615 + 0.0157725313299 0.00290783831402 0.142707854646 0.337930232852 + 0.111490433331 0.0335831739299 + + + + + + + + + 1 2 33 1 36 1 33 2 34 2 31 4 31 4 33 3 33 3 33 2 33 3 27 8 27 12 23 9 + 26 9 26 9 26 10 25 9 26 2 1 1 1 2 34 1 28 10 25 11 2 1 21 15 20 16 19 + 17 18 18 17 19 16 20 16 21 14 22 13 23 11 25 10 4 1 21 10 2 2 22 9 2 + 2 23 7 30 5 31 4 32 3 32 3 4 1 27 3 32 3 26 1 1 2 2 3 23 1 2 9 23 2 3 + 7 23 2 4 6 30 6 22 2 1 1 4 6 24 1 4 8 27 8 27 9 3 2 21 14 21 5 2 8 21 + 4 6 3 22 4 2 1 3 3 22 8 27 8 27 8 2 1 15 2 7 4 3 4 12 1 3 2 6 4 3 4 + 12 1 10 5 3 3 24 5 2 5 23 5 2 6 22 6 1 7 21 6 1 8 21 5 1 9 20 16 19 + 18 17 19 15 21 14 21 14 21 3 1 11 5 2 14 1 2 11 5 3 19 8 5 6 18 6 5 7 + 17 6 5 8 15 7 5 9 9 13 4 10 8 13 4 10 9 12 4 11 8 11 6 10 9 9 6 11 10 + 4 10 11 25 13 22 14 21 10 26 9 25 10 25 10 2 5 18 10 3 4 3 3 12 23 13 + 24 11 18 2 5 10 26 9 28 7 29 6 29 6 6 1 4 1 17 6 5 2 4 1 7 2 7 7 5 3 + 3 1 7 2 7 7 5 3 2 3 5 3 7 7 4 9 5 3 7 8 3 3 3 3 5 3 7 8 4 2 1 5 5 3 7 + 8 5 1 1 5 5 3 7 8 10 2 5 3 7 8 7 2 1 2 5 3 7 8 1 1 5 2 1 2 5 3 7 10 5 + 2 2 1 6 2 8 9 16 1 9 8 17 2 8 11 3 3 7 3 8 11 2 5 3 1 2 4 7 23 1 4 7 + 22 2 4 7 29 6 29 6 28 7 28 7 9 2 17 7 9 2 7 1 2 2 4 8 9 2 7 2 1 3 3 9 + 8 2 7 2 1 3 2 10 8 2 8 17 9 1 8 17 8 2 9 16 8 2 10 14 9 2 11 14 8 2 + 12 13 9 1 13 12 9 1 14 11 9 1 15 10 9 1 16 9 9 1 17 8 9 2 18 1 1 4 9 + 2 23 1 9 2 33 2 20 4 8 4 19 5 8 2 21 4 8 2 22 2 9 3 21 2 9 3 33 2 32 + 3 32 3 32 3 33 2 33 2 34 1 34 1 34 1 34 1 24 0 + + + + 5390.0 + + + 0.227272727273 + + + 2421.0 + + + 0.346551011979 + + + 1.27404046725 + + + 0.485591758389 0.463209984531 0.035626414622 0.501515940365 + 0.0508993159252 6.08112622905e-05 -0.00374513651994 + 0.000751125214125 0.0830257594725 + + + 35.0 + + + 4.08571428571 0.792207792208 + + + 4.8 4.22857142857 3.77142857143 2.62857142857 0.155844155844 + 0.857142857143 1.35064935065 0.779220779221 + + + 154.0 + + + 16.0 68.0 0.243498817967 15.0 9.0 1.0 + + + 0.0 0.993506493506 + + + 0.449165120594 + + + 0.733552631579 0.474358974359 0.476973684211 0.0320512820513 + 0.459064327485 0.68660968661 0.634502923977 0.165242165242 + 0.251461988304 0.85754985755 0.593567251462 0.19943019943 + 0.0526315789474 0.569800569801 0.5 0.492877492877 + + + 0.592105263158 0.855263157895 0.578947368421 0.325 0.263157894737 + 0.0 0.0 0.0 0.565789473684 0.921052631579 0.815789473684 0.2 1.0 + 0.644736842105 0.118421052632 0.0125 0.105263157895 0.894736842105 + 0.884210526316 0.38 0.957894736842 0.631578947368 0.147368421053 + 0.41 0.0 0.815789473684 1.0 0.5375 0.394736842105 0.473684210526 + 0.0394736842105 0.0 0.0 0.605263157895 1.0 0.725 0.368421052632 + 0.934210526316 0.302631578947 0.0 0.0 0.421052631579 0.926315789474 + 0.79 0.557894736842 0.536842105263 0.494736842105 0.0 0.0 + 0.197368421053 0.842105263158 1.0 0.447368421053 1.0 0.973684210526 + 0.0625 0.0 0.0315789473684 0.252631578947 0.32 0.147368421053 + 0.494736842105 0.715789473684 0.26 + + + 0.596230099413 0.159228926698 0.0662270251435 0.0214703557901 + 0.438264878617 0.394966085651 0.084247718496 0.125607432474 + 0.00732368234425 0.0218748405129 0.246153492054 0.452802997382 + 0.240282201154 0.0442254957267 + + + + + + + + + 97 2 161 2 4 4 1 16 150 38 150 38 150 38 150 38 150 38 150 38 150 38 + 150 38 150 38 150 39 149 39 149 39 149 39 149 40 148 39 150 38 150 38 + 150 38 20 1 129 17 1 20 19 4 127 39 18 5 126 39 17 7 125 38 18 8 124 + 37 18 10 121 40 17 12 120 41 15 11 122 40 15 10 122 40 16 11 121 41 + 14 13 120 41 14 14 120 40 14 10 1 2 6 1 114 39 15 9 1 1 1 2 5 1 115 + 38 14 20 117 37 14 22 114 38 16 21 113 38 16 18 1 3 112 38 15 24 110 + 39 13 27 109 39 13 28 79 68 13 29 77 69 13 30 76 69 12 32 75 56 7 6 + 12 33 74 36 10 5 15 3 12 34 73 34 13 3 18 1 12 35 72 34 14 2 18 1 12 + 6 2 9 1 1 1 15 72 34 14 1 19 1 12 7 1 9 2 17 71 34 34 1 12 16 3 17 71 + 34 46 7 3 8 1 17 72 34 46 6 4 7 2 17 72 34 46 6 4 16 4 4 74 34 46 7 2 + 17 82 35 45 2 2 2 5 15 6 1 75 35 45 1 10 16 5 1 75 34 58 17 1 5 14 1 + 58 34 57 14 1 9 13 2 58 35 56 14 1 3 1 5 13 2 58 35 56 14 1 1 4 4 12 + 4 58 34 56 4 1 8 8 3 12 4 58 34 56 4 2 6 10 1 13 5 57 34 56 4 2 6 10 + 1 12 6 2 2 53 34 56 3 4 4 24 10 52 35 57 2 5 3 23 11 53 34 65 2 23 11 + 53 35 60 1 3 2 23 10 54 35 58 8 4 2 16 10 55 35 55 18 2 2 11 10 55 35 + 54 19 2 2 9 12 55 35 55 22 10 10 56 35 56 4 1 5 2 8 12 10 55 35 56 4 + 2 3 4 7 12 11 4 1 49 35 57 19 12 12 2 2 3 3 12 2 29 35 58 18 11 17 2 + 5 11 2 28 36 59 7 1 9 11 1 1 25 8 4 26 36 60 15 12 1 1 24 9 21 7 38 + 61 14 11 2 2 23 9 67 61 13 9 29 9 67 62 12 9 30 1 2 5 19 3 45 63 11 8 + 35 4 20 1 46 65 9 9 14 1 20 3 39 5 23 67 6 10 35 3 37 25 5 68 5 10 35 + 3 18 1 17 27 4 68 5 9 36 3 36 27 4 68 5 10 35 3 36 27 4 68 5 9 17 1 + 18 3 41 21 7 68 3 10 35 2 42 22 5 70 1 10 37 1 41 24 3 82 36 1 41 25 + 3 83 35 2 40 25 3 83 15 3 4 1 12 2 40 25 3 83 3 17 2 2 11 2 40 27 1 + 83 3 22 10 2 40 113 2 22 8 4 38 115 3 19 8 6 37 116 9 9 11 6 36 117 9 + 6 13 7 36 119 3 10 13 7 36 120 1 12 9 1 2 7 4 2 29 134 1 1 5 12 36 + 137 4 12 35 138 2 3 1 9 34 138 2 4 1 9 34 138 4 1 1 10 35 137 6 10 35 + 137 6 10 35 137 6 10 35 137 6 10 35 137 6 10 35 137 6 10 35 137 5 11 + 35 135 7 11 35 134 8 12 34 135 7 12 35 134 7 12 34 135 7 12 2 1 32 + 135 5 28 20 135 5 46 2 135 5 46 2 186 2 186 2 187 1 148 0 + + + + 23124.0 + + + 1.52845528455 + + + 6724.0 + + + 0.186198691255 + + + 0.898478892497 + + + 0.435471787547 0.499836650706 0.392573607112 0.135389354619 + -0.0359072730308 0.101607245438 -0.0146814358165 0.0945031986857 + -0.00542205009557 + + + 188.0 + + + 0.702127659574 1.9593495935 + + + 0.36170212766 0.297872340426 1.08510638298 1.06382978723 + 0.455284552846 2.50406504065 3.25203252033 1.36585365854 + + + 123.0 + + + 20.0 107.0 0.228043143297 22.0 1.0 4.0 + + + 0.0 0.991869918699 + + + 0.290780141844 + + + 0.0 0.214138641043 0.592999313658 0.628689087165 0.660992907801 + 0.575840768703 0.331503088538 0.000686341798216 0.189361702128 + 0.525737817433 0.169526424159 0.0 0.0 0.0775566231984 + 0.526424159231 0.148936170213 + + + 0.0 0.0 0.0 0.0 0.0231884057971 0.91847826087 0.860869565217 + 0.510869565217 0.0 0.0 0.231770833333 0.619444444444 0.591666666667 + 0.794270833333 0.675 0.489583333333 0.339130434783 0.368115942029 + 0.5625 0.84347826087 0.901449275362 0.464673913043 0.00289855072464 + 0.0 0.913888888889 0.997222222222 0.880208333333 0.00833333333333 + 0.0 0.00260416666667 0.0 0.0 0.220289855072 0.289855072464 + 0.377717391304 0.113043478261 0.0 0.0 0.0 0.0 0.0 0.252777777778 + 0.864583333333 0.711111111111 0.483333333333 0.190104166667 0.0 0.0 + 0.0 0.0 0.0760869565217 0.246376811594 0.414492753623 0.54347826087 + 0.0811594202899 0.0 0.0 0.0 0.0 0.0 0.241666666667 0.877604166667 + 0.319444444444 0.192708333333 + + + 0.434478166304 0.131611799081 0.176295777083 0.152769983488 + 0.127239719086 0.242588295256 0.042715339927 0.304719606219 + 0.239495331369 0.104698684552 0.107823716307 0.146874257391 + 0.0990198767355 0.0871970917946 + + + + + + + + + 273 1 89 1 89 1 86 6 84 6 85 5 84 6 84 6 84 6 84 7 84 3 88 2 88 2 88 + 2 25 1 2 3 1 4 52 2 3 7 3 7 1 16 51 39 51 40 49 41 49 42 49 41 49 41 + 49 41 49 41 49 41 48 42 48 42 48 42 48 42 48 42 49 41 49 20 1 20 48 + 42 48 21 1 20 48 42 48 38 54 32 65 26 55 40 51 41 49 41 49 41 48 42 + 48 42 48 42 48 42 48 42 48 42 49 41 48 42 48 42 49 41 49 41 49 41 49 + 41 49 41 49 41 49 41 49 13 1 6 1 20 49 3 36 2 49 2 37 2 49 2 37 2 49 + 2 88 2 37 3 39 3 6 2 35 6 38 4 4 5 34 4 40 2 5 4 35 4 39 3 6 2 36 6 + 37 4 43 6 37 4 43 6 36 5 43 4 39 4 44 3 39 4 45 1 40 3 46 1 40 3 46 1 + 27 16 46 1 23 20 46 2 14 5 3 20 46 2 6 36 46 44 46 44 46 21 2 21 46 + 20 4 20 46 21 3 20 46 45 45 45 45 44 46 21 2 22 45 45 45 22 2 21 45 + 21 3 21 45 20 4 21 45 21 4 20 45 21 4 20 45 22 1 22 45 45 45 22 2 17 + 49 21 3 12 54 21 4 10 55 21 3 15 51 4 1 16 3 22 44 21 3 22 44 3 6 12 + 2 24 43 4 1 42 43 46 44 46 44 47 43 47 44 45 44 22 2 22 44 46 44 23 1 + 23 43 23 1 22 44 46 44 46 45 46 44 46 44 23 2 21 44 46 44 46 44 30 4 + 2 1 4 1 4 44 16 1 5 20 4 44 9 4 1 28 4 44 4 38 4 44 3 39 3 45 2 39 5 + 44 5 37 4 44 4 39 3 45 2 40 3 87 4 87 2 88 2 88 2 1 0 + + + + 12060.0 + + + 0.671641791045 + + + 3957.0 + + + 0.175638109679 + + + 1.60478313741 + + + 0.493146834084 0.530024834642 0.162803791228 0.289215017499 + 0.169930913678 0.00125003466606 -0.00899143823975 -0.0043734206751 + -0.00867135024259 + + + 90.0 + + + 1.0 0.529850746269 + + + 0.933333333333 0.711111111111 1.33333333333 0.933333333333 + 0.179104477612 0.268656716418 0.89552238806 0.716417910448 + + + 134.0 + + + 10.0 66.0 0.15587529976 8.0 4.0 4.0 + + + 0.0223880597015 0.992537313433 + + + 0.328109452736 + + + 0.51652892562 0.770053475936 0.0151515151515 0.0 0.444005270092 + 0.740409207161 0.129117259552 0.0946291560102 0.0 0.0 + 0.590909090909 0.663101604278 0.0 0.00895140664962 0.627140974967 + 0.63810741688 + + + 0.295454545455 0.802139037433 0.828877005348 0.609625668449 0.0625 + 0.0 0.0 0.0 0.0 0.92513368984 1.0 0.641711229947 0.0 0.0 0.0 0.0 + 0.0 0.946524064171 0.989304812834 0.641711229947 0.0 0.0 0.0 0.0 + 0.0 0.78431372549 0.730392156863 0.612745098039 0.244791666667 0.25 + 0.240196078431 0.122549019608 0.0 0.0 0.0 0.0 0.238636363636 1.0 + 0.957219251337 0.438502673797 0.0 0.0 0.0 0.0 0.278409090909 + 0.807486631016 0.919786096257 0.336898395722 0.0 0.0 0.0 0.0 + 0.420454545455 0.994652406417 1.0 0.267379679144 0.0 0.0 0.0 + 0.0343137254902 0.458333333333 0.627450980392 0.828431372549 + 0.455882352941 + + + 0.417182213546 0.21569067963 0.0284849871393 0.0178852127179 + 0.0470763527872 0.482222982108 0.097029784014 0.0454630607068 + 0.0288082545641 0.0175002312402 0.294827230242 0.423271838096 + 0.202743514733 0.0591014754482 + + + + + + + + + 89 1 92 1 34 2 91 2 33 2 91 2 10 1 22 2 91 31 3 3 91 32 2 3 91 33 1 3 + 91 37 91 37 91 37 92 3 1 32 92 3 2 12 1 18 92 3 2 31 92 2 4 30 93 2 3 + 30 93 2 3 29 93 36 92 36 92 36 92 36 92 36 92 36 93 36 92 36 92 36 92 + 36 92 36 92 36 92 36 92 36 92 37 90 38 90 38 91 37 91 37 91 37 91 37 + 91 6 1 2 1 26 93 35 93 35 93 35 93 35 94 34 94 34 94 34 94 34 94 34 + 94 3 25 6 95 1 28 4 95 1 29 3 95 1 30 2 95 1 30 2 95 1 31 1 95 2 30 1 + 96 1 127 1 1978 1 127 1 127 2 126 2 99 1 26 2 35 9 55 1 26 2 35 22 12 + 1 29 2 25 2 35 16 1 6 1 3 7 1 29 5 22 2 35 16 2 5 3 3 5 1 29 16 11 3 + 34 23 3 4 4 1 29 17 4 1 5 3 35 31 2 1 29 20 1 3 3 3 35 34 29 30 35 17 + 2 15 29 31 34 17 4 14 29 30 35 1 1 2 2 9 6 13 29 30 35 2 5 8 7 1 1 10 + 29 17 1 13 34 2 6 8 6 12 29 18 1 12 34 2 7 1 1 23 29 18 1 13 33 3 6 1 + 1 23 29 32 33 18 1 15 29 32 33 34 29 32 34 10 1 23 28 32 34 35 27 32 + 33 37 24 36 30 38 24 35 32 37 24 35 32 37 25 34 33 35 27 33 34 34 28 + 31 35 34 28 31 35 34 28 31 35 34 28 31 36 33 28 31 3 1 33 32 28 32 2 + 5 29 1 1 1 4 4 3 18 28 32 3 19 14 1 13 19 27 32 2 23 10 4 7 1 4 18 28 + 31 2 27 6 4 3 7 1 19 28 31 3 26 5 5 4 10 2 14 28 32 2 36 3 3 1 23 28 + 15 3 12 1 1 2 37 3 26 28 15 2 15 2 66 28 32 2 67 27 32 2 67 27 32 2 5 + 1 31 2 28 27 33 1 35 4 28 27 10 1 59 12 2 1 16 27 10 4 14 1 40 20 12 + 27 11 6 10 3 36 29 6 27 2 5 4 6 10 3 35 32 5 26 2 15 10 4 39 28 4 27 + 1 18 7 4 39 29 3 27 1 21 5 3 2 1 36 30 2 26 2 23 3 4 1 1 36 31 1 27 1 + 25 1 7 35 31 1 26 2 33 35 59 1 33 36 58 1 33 3 2 31 58 1 33 3 3 30 58 + 1 33 4 1 31 58 1 33 36 92 36 91 37 92 37 91 37 91 37 91 37 91 37 91 + 37 91 37 91 38 90 38 90 38 91 37 91 37 91 37 91 3 16 18 91 3 19 15 91 + 2 23 13 90 2 26 10 90 2 27 9 90 3 26 9 89 5 24 10 89 4 26 10 90 1 28 + 8 120 8 120 9 120 8 121 6 124 4 125 2 88 0 + + + + 20608.0 + + + 0.795031055901 + + + 5743.0 + + + 0.182657147832 + + + 0.729678789104 + + + 0.482504548502 0.540006312032 0.206297156067 0.300257375585 + -0.095883018452 0.00934815790139 -0.0132308056946 0.0542595294891 + -0.0929409269009 + + + 128.0 + + + 0.8984375 1.11801242236 + + + 0.5625 2.28125 0.4375 0.3125 0.39751552795 0.695652173913 + 2.53416149068 0.844720496894 + + + 161.0 + + + 23.0 105.0 0.240768094535 13.0 6.0 7.0 + + + 0.0 0.993788819876 + + + 0.27867818323 + + + 0.0 0.015625 0.3765625 0.629573170732 0.23359375 0.11484375 + 0.82890625 0.217225609756 0.778125 0.18046875 0.13984375 + 0.00990853658537 0.0 0.03671875 0.8796875 0.0236280487805 + + + 0.0 0.0 0.0 0.0 0.0 0.7375 0.878125 0.315476190476 0.0 0.0 0.0 + 0.0625 0.115625 0.653125 1.0 0.354166666667 0.0 0.0 0.0 0.20625 + 0.871875 0.640625 0.378125 0.488095238095 0.43125 0.503125 0.175 + 0.078125 0.9375 0.865625 0.0 0.0 0.8 0.996875 0.35 0.0 0.065625 0.2 + 0.034375 0.0 0.55 0.765625 0.321875 0.05 0.2125 0.08125 0.00625 0.0 + 0.0 0.0 0.0 0.08125 0.990625 0.871875 0.03125 0.0 0.0 0.0 0.0 + 0.065625 0.775 0.88125 0.065625 0.0 + + + 0.293426680637 0.139434759413 0.0839588930638 0.187444682704 + 0.12184625582 0.181889943707 0.101065205232 0.119979913303 + 0.370397487676 0.115421814965 0.0169050550306 0.158990938353 + 0.206202211866 0.0376512163487 + + + + + + + + + 40 2 79 3 43 2 2 1 18 16 41 19 3 19 41 19 4 18 41 19 3 19 41 19 3 19 + 40 20 3 19 41 19 3 19 41 20 2 19 40 20 3 19 41 19 3 19 41 20 1 20 41 + 42 40 42 40 42 40 42 40 42 40 42 40 41 41 41 41 41 41 41 41 41 41 42 + 39 43 39 43 40 42 40 42 40 42 35 2 3 42 35 2 3 42 33 4 3 41 44 3 1 34 + 46 2 1 33 42 40 42 5 4 31 42 6 2 32 36 1 6 39 11 16 8 2 7 39 4 33 6 + 76 6 76 6 7 1 68 6 2 2 14 1 58 5 17 2 9 1 48 6 15 4 7 2 7 1 40 11 11 + 2 2 16 40 42 40 42 39 43 39 43 39 43 39 43 40 42 40 42 40 42 40 42 40 + 42 40 42 40 42 38 44 5 1 27 49 4 2 27 49 4 1 35 42 3 3 34 49 33 44 38 + 43 39 43 39 43 39 43 39 43 39 43 39 43 4 3 33 41 41 41 5 2 33 43 4 2 + 33 43 39 44 38 44 38 44 39 3 2 38 39 2 3 38 39 3 2 38 12 12 15 3 2 38 + 11 21 2 3 2 3 2 38 11 31 2 39 10 31 3 38 9 31 5 37 9 31 4 38 9 32 3 + 39 8 32 4 39 7 32 4 39 7 32 4 41 5 32 4 40 5 34 2 42 6 32 2 46 1 33 2 + 41 6 33 2 42 5 33 2 42 6 76 5 78 3 117 1 81 1 81 1 81 1 81 1 81 2 80 + 2 80 2 80 2 81 1 81 1 81 1 81 1 81 1 75 0 + + + + 9512.0 + + + 0.706896551724 + + + 3634.0 + + + 0.168684645019 + + + 1.34792626728 + + + 0.502782364092 0.385312627121 0.143837668454 0.163471741395 + 0.0875517327344 -0.00253221377067 -0.0114452370546 0.0015102159972 + 0.0123676980076 + + + 82.0 + + + 0.792682926829 0.534482758621 + + + 1.17073170732 0.19512195122 1.17073170732 0.585365853659 + 0.413793103448 0.724137931034 0.586206896552 0.413793103448 + + + 116.0 + + + 10.0 38.0 0.171830985915 9.0 2.0 5.0 + + + 0.0 0.991379310345 + + + 0.38204373423 + + + 0.863793103448 0.494827586207 0.0275862068966 0.0965517241379 + 0.88013136289 0.573070607553 0.0 0.0 0.0689655172414 0.684482758621 + 0.846551724138 0.141379310345 0.0 0.642036124795 0.8013136289 0.0 + + + 0.742857142857 0.913333333333 0.671428571429 0.1 0.0 0.106666666667 + 0.271428571429 0.12 0.785714285714 1.0 0.985714285714 + 0.266666666667 0.0 0.0 0.0 0.0 0.614285714286 1.0 1.0 + 0.173333333333 0.0 0.0 0.0 0.0 0.876623376623 1.0 1.0 + 0.175757575758 0.0 0.0 0.0 0.0 0.107142857143 0.166666666667 0.35 + 1.0 0.842857142857 0.786666666667 0.392857142857 0.0 0.0 0.0 + 0.342857142857 1.0 1.0 0.766666666667 0.192857142857 0.0 0.0 0.0 + 0.342857142857 1.0 1.0 0.693333333333 0.0 0.0 0.0 0.0 + 0.305194805195 0.884848484848 0.805194805195 0.727272727273 0.0 0.0 + + + 0.617850322737 0.0966349309746 0.0327461569437 0.0181517456499 + 0.3653006973 0.338525397952 0.0271138719597 0.0708434160177 + 0.0358395416322 0.00595062827228 0.0449556784511 0.493167885734 + 0.0869221955384 0.00865287324863 + + + + + + + + + 2 4 3 4 4 5 4 1 8 2 36 27 3 5 36 35 37 34 37 34 37 34 37 34 36 29 1 5 + 36 35 36 35 36 35 36 36 35 35 36 35 36 35 36 35 37 34 36 35 36 35 35 + 36 35 36 35 36 35 36 34 39 32 39 33 38 33 37 34 37 34 38 33 38 33 37 + 35 8 1 26 36 35 36 35 36 35 36 35 36 35 37 34 37 33 38 33 38 34 37 19 + 12 2 38 4 28 1 38 3 29 1 38 2 30 1 38 2 30 1 38 2 30 1 39 1 30 1 39 1 + 30 1 39 1 30 1 39 1 30 1 39 1 70 1 70 1 70 1 70 1 70 1 70 1 740 1 70 + 1 70 1 70 1 70 1 70 2 5 2 62 27 4 2 37 28 2 4 37 34 38 33 37 34 37 34 + 37 34 37 8 1 25 37 34 37 34 37 34 37 35 35 38 33 37 34 37 34 37 34 37 + 34 5 6 26 34 4 8 24 35 2 9 19 5 1 36 2 8 25 36 34 37 34 37 34 37 6 1 + 1 1 25 37 8 1 25 37 34 37 34 37 34 37 34 37 34 37 34 37 34 37 34 37 + 34 37 34 37 35 36 35 36 35 37 34 37 34 37 18 3 13 37 2 27 5 37 1 32 1 + 37 1 70 1 35 0 + + + + 8449.0 + + + 0.596638655462 + + + 2907.0 + + + 0.161334709322 + + + 2.30743801653 + + + 0.492839942995 0.480587477334 0.124084049141 0.501587437529 + 0.198936020491 5.6402319049e-05 0.00660431751784 0.00263302258394 + 0.0132333678514 + + + 71.0 + + + 0.464788732394 0.268907563025 + + + 0.169014084507 0.112676056338 1.12676056338 0.338028169014 + 0.201680672269 0.36974789916 0.134453781513 0.36974789916 + + + 119.0 + + + 12.0 41.0 0.132716049383 4.0 2.0 1.0 + + + 0.0 0.991596638655 + + + 0.344064386318 + + + 0.882352941176 0.421568627451 0.0 0.0 0.969348659004 0.411111111111 + 0.0333333333333 0.05 0.132183908046 0.0648148148148 0.548148148148 + 0.812962962963 0.0 0.0 0.451851851852 0.742592592593 + + + 0.696428571429 0.841666666667 0.683333333333 0.141666666667 0.0 0.0 + 0.0 0.0 0.960317460317 1.0 0.859259259259 0.0 0.0 0.0 0.0 0.0 + 0.968253968254 1.0 0.837037037037 0.0 0.0 0.0 0.0 0.0 + 0.904761904762 1.0 0.807407407407 0.0 0.0 0.133333333333 + 0.140740740741 0.0592592592593 0.230158730159 0.296296296296 + 0.207407407407 0.0518518518519 0.133333333333 0.992592592593 + 0.755555555556 0.77037037037 0.0 0.0 0.0 0.0 0.0666666666667 1.0 + 0.992592592593 0.733333333333 0.0 0.0 0.0 0.0 0.0666666666667 1.0 + 1.0 0.711111111111 0.0 0.0 0.0 0.0 0.0148148148148 0.725925925926 + 0.681481481481 0.577777777778 + + + 0.220676274224 0.321822520721 0.0316594543642 0.0125501336945 + 0.278537752574 0.528632821233 0.197091267128 0.020376573164 + 0.00895618816983 0.0134178885095 0.210665955648 0.231809864719 + 0.364751661745 0.109147318128 + + + + + + + + + 40 1 193 2 192 2 191 3 191 3 191 3 191 3 191 3 191 3 191 3 191 3 190 + 4 190 4 155 1 34 4 155 15 1 3 15 5 155 39 155 39 155 39 155 38 156 38 + 156 39 155 39 155 39 155 39 17 1 137 39 16 4 135 39 16 4 135 39 17 4 + 134 39 16 6 133 39 16 8 131 40 14 11 128 41 13 14 124 44 10 21 120 43 + 10 22 120 42 11 21 113 1 6 42 11 20 113 2 6 6 2 34 12 18 123 40 11 17 + 2 3 112 2 8 39 12 15 3 4 110 3 8 39 12 14 4 5 108 5 7 39 12 15 3 6 + 109 1 9 39 11 16 3 7 108 1 9 39 11 16 3 8 117 39 11 4 1 11 3 7 2 1 + 104 3 8 39 11 4 1 11 3 8 2 1 89 2 6 3 3 3 8 39 11 31 66 25 1 13 9 38 + 11 32 65 39 9 38 11 33 64 39 9 38 11 35 62 39 9 38 11 36 61 39 9 39 9 + 39 59 39 9 39 9 40 58 39 9 39 9 41 57 39 9 39 9 42 56 39 10 38 9 42 + 56 39 10 38 9 5 1 35 57 39 10 38 9 3 4 34 57 39 10 38 16 27 1 6 57 39 + 10 3 4 31 16 9 1 16 3 4 58 39 10 1 25 1 6 5 16 9 1 16 4 2 59 39 11 1 + 33 3 18 7 1 17 65 38 46 2 18 26 64 38 67 25 1 1 18 1 43 38 67 26 19 2 + 42 38 68 24 20 3 41 38 68 28 16 3 41 38 68 29 14 7 43 26 75 29 13 9 + 44 24 76 22 2 4 13 9 44 25 75 6 1 12 6 2 14 9 37 38 70 5 2 11 6 2 13 + 10 37 4 3 1 1 30 70 4 3 9 8 1 12 12 36 5 2 32 72 3 2 8 1 1 6 1 13 11 + 37 39 77 9 7 1 13 13 35 39 75 13 4 3 11 14 35 39 75 16 1 3 11 14 36 + 38 75 16 1 3 10 13 38 38 76 19 10 14 5 4 28 38 72 1 2 20 10 15 4 5 27 + 38 71 1 4 8 2 8 10 17 3 8 24 38 72 22 10 17 4 8 23 38 73 21 10 31 21 + 38 74 20 10 32 20 38 75 19 10 32 21 37 77 16 11 33 20 37 77 16 11 34 + 19 37 78 15 10 36 18 37 79 14 10 36 18 37 82 10 11 37 17 37 87 6 10 + 38 16 4 4 18 6 6 86 6 10 39 15 2 21 1 10 4 85 7 9 41 15 1 33 3 85 6 + 10 41 15 1 34 2 86 5 10 41 50 1 102 41 50 1 102 41 50 2 101 8 1 33 48 + 4 100 5 6 30 49 3 101 5 7 28 50 4 100 5 11 23 51 5 99 1 1 7 7 23 52 3 + 100 13 3 23 52 3 100 14 3 22 52 3 99 2 1 2 1 4 4 2 2 22 53 1 107 3 4 + 2 4 20 53 2 107 2 5 1 4 19 54 2 108 1 3 4 4 18 54 2 112 5 7 1 3 5 3 2 + 54 2 124 2 3 3 60 2 124 3 1 5 3 1 55 2 130 7 55 2 130 7 55 2 124 1 3 + 9 55 2 124 2 2 9 55 2 129 8 56 1 135 2 56 1 193 1 517 2 192 3 191 3 + 191 4 190 4 189 6 188 6 188 6 188 6 189 5 189 5 190 4 190 4 193 1 61 + 0 + + + + 25608.0 + + + 1.4696969697 + + + 6236.0 + + + 0.201571520205 + + + 1.40554465162 + + + 0.497823933902 0.459664151516 0.554673824605 0.0948043320133 + 0.137397860086 0.0261189329067 -0.0128302424004 -0.0491014158639 + 0.00434062073935 + + + 194.0 + + + 0.613402061856 1.80303030303 + + + 0.103092783505 0.989690721649 0.762886597938 0.59793814433 + 0.393939393939 2.81818181818 2.84848484848 1.15151515152 + + + 132.0 + + + 14.0 76.0 0.246511627907 23.0 0.0 7.0 + + + 0.0 0.992424242424 + + + 0.243517650734 + + + 0.49053030303 0.620580808081 0.0 0.0 0.0587507730365 0.588744588745 + 0.2622139765 0.0 0.0 0.010101010101 0.563131313131 0.212121212121 + 0.0 0.534322820037 0.534322820037 0.0204081632653 + + + 0.104166666667 0.889705882353 0.8359375 0.401960784314 0.0 0.0 0.0 + 0.0 0.166666666667 0.759803921569 0.799479166667 0.468137254902 0.0 + 0.0 0.0 0.0 0.0 0.21568627451 0.684895833333 0.546568627451 + 0.106770833333 0.0 0.0 0.0 0.0 0.0164705882353 0.34 0.776470588235 + 0.6575 0.282352941176 0.0 0.0 0.0 0.0 0.0 0.0392156862745 + 0.565104166667 0.828431372549 0.2421875 0.0 0.0 0.0 0.0 0.0 0.125 + 0.708333333333 0.479166666667 0.144607843137 0.0 0.0 0.234375 + 0.720588235294 0.635416666667 0.257352941176 0.0 0.0 0.0 0.0 0.325 + 0.823529411765 0.84 0.421176470588 0.08 0.00235294117647 + + + 0.333487382599 0.256295881582 0.0632446338018 0.0744237978859 + 0.00618555983915 0.391457590776 0.159871417189 0.172466943158 + 0.136341178842 0.0842450810974 0.161445270161 0.159501798205 + 0.312413085613 0.0859266651819 + + + + + + + + + 0 11 22 1 3 3 107 20 1 20 106 20 1 20 106 41 106 41 106 20 1 20 106 + 41 106 20 1 20 106 20 1 20 106 20 1 20 106 20 1 20 106 20 1 20 106 41 + 106 41 106 41 106 20 2 19 106 21 1 19 24 3 79 20 2 19 23 5 78 20 2 19 + 23 6 77 20 2 19 23 7 76 20 2 19 22 10 74 4 1 2 1 12 1 14 28 11 75 1 2 + 2 1 28 27 11 73 4 1 28 30 12 72 41 21 13 72 7 2 32 21 15 71 4 4 32 21 + 15 71 40 21 15 71 40 21 14 72 40 20 15 72 40 21 14 72 40 21 14 5 2 65 + 41 20 15 3 4 64 41 20 16 2 5 63 41 19 3 2 19 63 19 2 20 18 5 1 1 1 17 + 63 19 2 20 18 4 5 17 62 20 1 20 18 4 5 21 58 18 4 19 18 6 2 23 58 40 + 17 32 58 19 1 20 17 30 5 3 52 40 17 40 50 40 17 40 50 40 16 41 50 27 + 1 12 16 40 51 4 32 5 15 1 3 36 51 3 34 4 15 1 6 33 51 3 34 3 16 1 7 + 31 15 1 36 3 34 4 15 1 8 29 16 3 34 3 34 4 15 1 9 24 1 3 15 4 34 3 34 + 4 15 1 10 23 3 1 15 5 33 4 33 4 14 6 7 23 18 7 31 3 35 3 14 35 5 1 12 + 6 34 2 34 5 13 36 2 2 13 10 66 6 10 42 13 10 66 5 12 41 13 10 67 4 13 + 5 2 33 10 17 63 3 14 4 5 31 11 19 59 5 14 2 10 27 11 19 60 3 36 12 2 + 3 12 19 60 3 36 12 2 2 13 19 61 2 35 12 3 2 12 21 59 3 36 9 5 2 12 22 + 58 3 36 10 5 1 13 21 58 3 37 8 20 22 57 3 37 9 4 1 14 13 2 8 56 3 36 + 3 3 5 1 2 15 13 2 10 54 3 36 3 3 5 1 2 15 25 55 2 37 2 2 9 16 25 54 2 + 42 8 13 29 53 2 41 9 12 31 51 3 41 8 13 32 51 2 41 7 14 32 51 1 42 7 + 13 34 93 8 12 35 91 9 12 37 89 8 13 38 89 7 13 39 88 6 13 8 1 31 92 2 + 13 6 4 31 107 5 4 32 108 3 3 34 107 2 3 7 3 16 7 2 107 2 4 6 3 15 8 3 + 106 2 5 4 5 15 6 3 108 1 7 3 2 17 6 2 121 18 130 16 131 16 133 13 6 3 + 126 21 126 21 126 21 127 20 127 9 2 8 129 7 7 4 129 7 8 3 129 7 2 1 + 137 11 132 10 2 5 131 20 127 20 119 3 5 20 120 4 4 19 121 26 122 24 + 124 23 127 19 128 19 129 18 130 17 135 12 140 7 140 7 133 1 5 7 135 + 12 136 11 137 9 139 9 138 9 140 6 143 4 142 4 10 0 + + + + 18081.0 + + + 1.19512195122 + + + 4540.0 + + + 0.236123348018 + + + 2.03608479928 + + + 0.47381721079 0.399725572326 0.455862827884 0.187010543141 + 0.249678043021 0.0173273446527 0.037394912849 0.0381797293725 + 0.0332189260063 + + + 147.0 + + + 0.918367346939 1.56097560976 + + + 0.680272108844 0.789115646259 0.707482993197 1.49659863946 + 1.23577235772 2.69918699187 1.9512195122 0.260162601626 + + + 123.0 + + + 19.0 86.0 0.256735340729 17.0 4.0 5.0 + + + 0.0 0.991869918699 + + + 0.251092306841 + + + 0.938888888889 0.480286738351 0.0 0.0 0.235135135135 0.421970357454 + 0.0278988666085 0.0 0.0216216216216 0.522231909329 0.224934612031 + 0.0 0.0 0.120313862249 0.654751525719 0.386224934612 + + + 0.974074074074 0.933333333333 0.878472222222 0.0888888888889 0.0 + 0.0 0.0 0.0 0.907407407407 0.940740740741 0.899305555556 0.0 0.0 + 0.0 0.0 0.0 0.256140350877 0.210526315789 0.305921052632 + 0.210526315789 0.112280701754 0.0 0.0 0.0 0.0 0.474074074074 + 0.659722222222 0.522222222222 0.0 0.0 0.0 0.0 0.0 0.0888888888889 + 0.770833333333 0.955555555556 0.451851851852 0.0798611111111 0.0 + 0.0 0.0 0.0 0.134868421053 0.273684210526 0.256140350877 + 0.131578947368 0.0 0.0 0.0 0.0 0.0 0.511111111111 0.985185185185 + 0.652777777778 0.351851851852 0.09375 0.0 0.0 0.0 0.0 + 0.315789473684 0.680921052632 0.621052631579 0.473684210526 + + + 0.398953112115 0.245236297304 0.104703613576 0.0484751003581 + 0.0998440061162 0.445008010099 0.154359510163 0.0810102965687 + 0.0416713796302 0.0646294410949 0.12500979449 0.250450839559 + 0.347136790512 0.0936088745196 + + + + + + + + + 20 1 23 1 22 2 4 2 15 2 3 4 10 1 1 13 9 5 1 8 10 4 5 4 10 4 5 3 13 2 + 6 1 15 1 116 2 21 2 21 3 20 3 20 3 19 4 20 2 21 3 21 1 20 0 + + + + 552.0 + + + 0.958333333333 + + + 81.0 + + + 1.30864197531 + + + 0.566666666667 + + + 0.418069584736 0.399355877617 0.845730758447 0.511846093922 + -0.373413041147 0.454659257838 -0.205211054287 -0.090082161349 + 0.319815857751 + + + 23.0 + + + 0.260869565217 0.333333333333 + + + 0.869565217391 0.0 0.0 0.173913043478 0.666666666667 0.666666666667 + 0.0 0.0 + + + 24.0 + + + 2.0 6.0 0.148148148148 3.0 0.0 0.0 + + + 0.0 0.958333333333 + + + 0.146739130435 + + + 0.266666666667 0.133333333333 0.233333333333 0.533333333333 + 0.194444444444 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0 + 0.444444444444 0.305555555556 0.0 0.0 + + + 0.0 0.333333333333 0.166666666667 0.0 0.0 0.5 0.666666666667 + 0.333333333333 0.0 0.666666666667 0.333333333333 0.0 0.0 + 0.444444444444 0.666666666667 0.444444444444 0.0 0.666666666667 1.0 + 0.111111111111 0.0 0.0 0.0 0.0 0.0 0.111111111111 0.222222222222 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.444444444444 0.222222222222 0.0 0.0 0.0 0.0 + 0.0 0.444444444444 0.888888888889 0.888888888889 0.111111111111 0.0 + 0.0 0.0 0.0 + + + 0.106489125749 0.255631338259 0.242475261566 0.29128970498 + 0.0719518699528 0.162751604049 0.140415959992 0.411165571081 + 0.294776996765 0.309744755292 0.159570551153 0.438774824823 + 0.195567258129 0.0642113136754 + + + + + + + + + 25 4 30 2 15 3 12 3 14 6 10 4 13 6 9 1 1 3 13 7 6 2 2 3 1 3 9 7 6 1 1 + 5 2 1 10 6 6 2 1 3 14 9 4 6 13 11 3 6 14 10 2 5 16 10 1 5 16 15 1 1 + 16 18 15 18 14 19 14 19 13 20 13 19 14 18 14 19 14 18 16 6 1 2 2 7 15 + 1 1 3 2 2 3 4 19 3 7 4 19 2 31 2 28 5 26 3 1 3 27 2 1 2 27 3 30 5 27 + 6 26 6 28 5 28 4 29 4 4 1 24 4 4 1 23 4 5 1 23 4 5 1 23 4 4 2 5 1 17 + 4 2 5 2 3 17 4 2 5 2 2 18 4 2 8 19 3 4 5 1 1 19 4 4 3 23 4 2 4 23 5 1 + 4 24 4 1 6 22 3 2 6 23 3 1 5 24 3 1 5 22 11 23 9 25 8 27 6 29 4 27 6 + 28 5 30 1 32 1 24 0 + + + + 2013.0 + + + 0.540983606557 + + + 579.0 + + + 0.561312607945 + + + 0.785714285714 + + + 0.365015112263 0.422222222222 0.0879662376159 0.468089125932 + -0.127565940125 0.0139139012606 -0.0140787092421 -0.0142577491032 + 0.150924600833 + + + 33.0 + + + 1.18181818182 0.737704918033 + + + 2.42424242424 1.33333333333 0.363636363636 0.606060606061 + 1.11475409836 0.524590163934 0.852459016393 0.459016393443 + + + 61.0 + + + 5.0 28.0 0.256198347107 5.0 3.0 1.0 + + + 0.0 0.983606557377 + + + 0.287630402385 + + + 0.0333333333333 0.35 0.591666666667 0.4609375 0.758333333333 + 0.591666666667 0.241666666667 0.3984375 0.416666666667 + 0.558333333333 0.0 0.0 0.303703703704 0.0222222222222 0.0 0.0 + + + 0.0 0.0 0.0 0.09375 0.71875 0.964285714286 0.59375 0.09375 0.0 + 0.125 0.75 0.5625 0.4375 0.25 0.625 0.53125 0.5 0.96875 1.0 0.34375 + 0.0625 0.642857142857 0.90625 0.625 0.535714285714 0.96875 1.0 + 0.125 0.0 0.321428571429 0.0625 0.0 0.0 0.625 1.0 0.3125 0.0 0.0 + 0.0 0.0 0.107142857143 0.84375 0.857142857143 0.15625 0.0 0.0 0.0 + 0.0 0.714285714286 0.375 0.107142857143 0.0 0.0 0.0 0.0 0.0 + 0.257142857143 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.458950705446 0.204171926902 0.166613670795 0.0819543366708 + 0.19451389553 0.38321458377 0.111051263929 0.304819275117 + 0.0518179358177 0.102939166697 0.0501876637334 0.30298592895 + 0.205369939696 0.0642157992148 + + + + + + + + + 2 1 72 2 72 3 71 3 70 6 69 3 70 5 69 6 29 3 36 6 28 4 36 7 27 6 34 6 + 29 3 37 4 30 3 37 3 31 3 38 1 31 4 38 2 14 5 6 9 38 2 10 24 38 2 5 29 + 38 36 38 36 37 37 38 36 38 36 38 36 37 37 37 37 37 36 39 35 39 35 39 + 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 35 39 1 1 2 1 + 30 41 2 1 30 39 35 39 35 39 35 39 35 33 1 5 35 33 1 5 35 33 1 5 34 33 + 2 5 34 33 2 5 34 20 3 10 2 5 35 10 24 5 23 4 9 1 32 5 69 5 69 5 70 4 + 70 4 69 5 70 4 21 9 40 4 9 22 39 4 3 29 38 4 2 30 37 5 2 30 37 5 2 30 + 30 3 3 6 2 30 38 4 2 30 38 3 5 27 41 2 3 28 40 3 3 28 40 34 40 4 2 29 + 39 4 2 29 38 36 38 5 2 29 38 5 1 30 38 36 38 36 38 37 37 36 38 36 38 + 36 37 37 38 36 38 37 37 37 37 37 37 36 38 36 38 36 38 36 38 36 38 36 + 38 36 11 7 9 7 4 36 6 14 4 50 3 71 3 72 1 13 3 71 3 71 2 72 2 71 2 71 + 2 25 0 + + + + 7474.0 + + + 0.732673267327 + + + 3240.0 + + + 0.156172839506 + + + 1.32652210175 + + + 0.487595129376 0.527354938272 0.126390136793 0.153492828667 + 0.0911910759496 0.0004157305091 -0.00345742405267 + -0.000581280192442 -0.00641246270372 + + + 74.0 + + + 0.581081081081 0.435643564356 + + + 1.02702702703 0.432432432432 0.432432432432 0.378378378378 + 0.435643564356 0.435643564356 0.712871287129 0.158415841584 + + + 101.0 + + + 2.0 26.0 0.177121771218 6.0 3.0 4.0 + + + 0.0 0.990099009901 + + + 0.43350280974 + + + 0.457777777778 0.88 0.373333333333 0.0 0.463157894737 + 0.993684210526 0.410526315789 0.115384615385 0.0444444444444 + 0.0177777777778 0.997777777778 0.67735042735 0.0 0.0589473684211 + 0.884210526316 0.574898785425 + + + 0.481481481481 0.589743589744 0.787037037037 0.735042735043 + 0.615384615385 0.203703703704 0.0 0.0 0.0 0.726495726496 1.0 1.0 + 0.632478632479 0.0 0.0 0.0 0.0 0.811965811966 1.0 1.0 + 0.564102564103 0.0 0.0 0.0 0.1 0.869230769231 1.0 0.976923076923 + 0.684615384615 0.333333333333 0.269230769231 0.169230769231 + 0.0648148148148 0.111111111111 0.0 0.0 0.991452991453 1.0 1.0 + 0.324786324786 0.0 0.0 0.0 0.0683760683761 1.0 1.0 1.0 + 0.384615384615 0.0 0.0 0.0 0.102564102564 1.0 1.0 1.0 + 0.307692307692 0.0 0.0 0.0 0.123076923077 0.715384615385 0.85 + 0.792307692308 0.215384615385 + + + 0.52067381649 0.143042353861 0.0213310145001 0.0109592236489 + 0.166982754424 0.346027327806 0.0503707299378 0.0136237940724 + 0.0264573405663 0.0165388461662 0.146475019603 0.354962534177 + 0.0938131406655 0.0333468749877 + + + + + + + + + 39 1 92 1 92 1 92 1 50 2 40 1 50 2 39 2 50 2 39 2 50 2 39 3 48 3 39 3 + 48 3 39 3 48 3 40 2 47 4 3 1 35 3 32 5 1 3 6 4 2 2 36 2 20 1 5 2 1 22 + 2 5 2 1 11 1 35 36 2 22 1 7 4 6 14 37 2 22 1 17 12 1 1 37 2 22 1 18 + 12 38 2 20 3 17 14 37 2 18 4 18 15 36 1 18 4 19 15 2 1 33 1 19 1 21 + 13 38 2 4 1 13 2 21 12 4 1 33 2 41 12 4 1 33 2 41 12 38 2 41 12 37 3 + 41 12 38 2 41 12 38 2 41 12 38 2 41 12 38 2 41 12 38 3 40 13 37 3 40 + 13 37 3 17 1 1 1 20 13 37 3 18 3 19 12 37 4 42 11 29 4 1 6 41 13 3 1 + 32 3 41 10 40 2 41 11 39 2 41 12 38 2 41 19 31 2 41 13 1 3 33 2 35 1 + 5 13 37 2 34 2 2 2 1 12 3 4 30 4 35 17 2 10 25 4 33 30 11 4 3 2 6 4 + 32 31 26 5 23 4 5 24 31 5 25 1 7 25 31 5 33 24 3 1 18 1 8 5 18 1 13 + 30 26 5 18 1 1 1 10 25 32 6 31 1 3 15 37 6 35 15 37 6 35 18 34 6 34 + 16 37 6 35 16 14 2 7 9 4 6 35 16 12 6 4 13 2 5 36 15 5 37 3 15 1 12 4 + 16 5 37 3 27 5 14 7 38 1 29 8 11 2 1 2 39 2 33 4 11 1 2 1 39 2 91 2 + 92 1 92 1 92 1 92 1 92 1 85 0 + + + + 6417.0 + + + 1.34782608696 + + + 3312.0 + + + 0.190519323671 + + + 0.958717287136 + + + 0.504069523209 0.498956557261 0.244951543938 0.0540007064948 + -0.00910574204877 0.00333621533521 0.000351205548528 + -0.00166298763255 0.00103484027985 + + + 93.0 + + + 1.03225806452 1.63768115942 + + + 0.602150537634 1.11827956989 1.67741935484 0.688172043011 + 1.5652173913 1.68115942029 1.97101449275 1.33333333333 + + + 69.0 + + + 20.0 73.0 0.180995475113 11.0 0.0 8.0 + + + 0.0 0.985507246377 + + + 0.516129032258 + + + 0.194373401535 0.902813299233 0.877237851662 0.347826086957 + 0.186700767263 0.813299232737 0.703324808184 0.338164251208 + 0.153452685422 0.624040920716 0.401534526854 0.243961352657 + 0.360294117647 0.953431372549 0.936274509804 0.25462962963 + + + 0.0 0.393939393939 0.920454545455 0.868686868687 0.818181818182 + 0.681818181818 0.484848484848 0.121212121212 0.0 0.342592592593 + 0.864583333333 0.953703703704 1.0 0.979166666667 0.777777777778 0.0 + 0.0 0.272727272727 0.988636363636 1.0 1.0 0.931818181818 + 0.787878787879 0.0 0.125 0.314814814815 0.625 0.666666666667 + 0.712962962963 0.177083333333 0.462962962963 0.111111111111 0.0 + 0.12037037037 0.28125 0.305555555556 0.212962962963 0.0208333333333 + 0.194444444444 0.0277777777778 0.0 0.474747474747 0.965909090909 + 1.0 0.888888888889 0.5 0.747474747475 0.030303030303 0.0 + 0.611111111111 1.0 1.0 1.0 0.958333333333 0.555555555556 0.0 + 0.114583333333 0.648148148148 0.90625 0.907407407407 0.907407407407 + 0.875 0.462962962963 0.0 + + + 0.326124810743 0.201730634811 0.0165133326058 0.00947948330306 + 0.11375213745 0.339805262803 0.036551106069 0.032651824129 + 0.00953752754696 0.0166596599709 0.145128158271 0.105019633558 + 0.0892641339431 0.0491937974427 + + + + + + + + + 1 1 35 1 33 2 33 4 31 3 32 2 33 3 28 1 3 4 25 4 2 5 23 10 26 4 1 5 25 + 4 2 5 25 3 2 13 17 3 2 26 4 3 2 27 2 4 2 33 2 32 3 32 3 32 2 34 2 33 + 2 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 3 32 5 1 + 3 27 10 25 10 25 2 4 1 27 3 32 3 32 3 33 5 30 2 2 1 30 2 32 3 1 2 5 1 + 8 1 12 5 33 2 33 2 33 2 33 2 33 2 33 2 33 2 33 2 3 3 27 2 2 9 22 2 2 + 23 8 2 2 24 7 2 2 25 6 3 1 25 6 3 1 25 6 3 1 26 1 1 3 3 1 28 3 3 1 28 + 3 33 2 33 3 31 4 32 3 32 3 32 3 32 3 32 3 + + + + 2485.0 + + + 0.492957746479 + + + 1471.0 + + + 0.210061182869 + + + 1.07662236122 + + + 0.510057183988 0.47864426532 0.06695639931 0.139255939674 + 0.0179162588277 -0.000810225670655 0.00364825893899 + 0.000319576088527 0.00427796136977 + + + 35.0 + + + 0.885714285714 0.366197183099 + + + 2.05714285714 0.228571428571 0.114285714286 1.02857142857 + 0.507042253521 0.0 0.281690140845 0.619718309859 + + + 71.0 + + + 7.0 22.0 0.222222222222 2.0 2.0 1.0 + + + 0.0 0.985915492958 + + + 0.591951710262 + + + 0.544117647059 0.847222222222 0.729166666667 0.118055555556 + 0.274509803922 1.0 0.981481481481 0.0864197530864 0.235294117647 + 1.0 0.993827160494 0.111111111111 0.326797385621 0.796296296296 + 0.845679012346 0.512345679012 + + + 0.5625 0.805555555556 0.777777777778 0.694444444444 0.472222222222 + 0.694444444444 0.416666666667 0.0277777777778 0.0625 0.694444444444 + 1.0 0.916666666667 0.75 1.0 0.0277777777778 0.0 0.0 0.555555555556 + 1.0 1.0 0.955555555556 0.977777777778 0.133333333333 0.0 0.0 + 0.472222222222 1.0 1.0 1.0 1.0 0.222222222222 0.0 0.0 + 0.444444444444 1.0 1.0 1.0 0.972222222222 0.222222222222 0.0 0.0 + 0.444444444444 1.0 1.0 1.0 1.0 0.222222222222 0.0 0.0 + 0.333333333333 1.0 1.0 1.0 1.0 0.611111111111 0.0 0.125 + 0.733333333333 0.644444444444 0.622222222222 0.711111111111 + 0.733333333333 0.755555555556 0.6 + + + 0.602046921224 0.0690424269683 0.0175038373708 0.0131905321183 + 0.400242585786 0.139691559 0.0474448584318 0.00312156396094 + 0.00252200304607 0.0158440605639 0.0476819719752 0.142432164779 + 0.10830897167 0.0499436521779 + + + + + + + + + 51 1 1 1 52 3 51 5 50 5 49 6 49 6 49 5 49 6 49 5 50 5 594 1 53 3 51 4 + 49 5 28 1 3 1 17 4 29 6 15 4 29 7 15 4 29 7 15 4 28 9 14 4 28 10 12 4 + 28 12 11 2 30 11 12 2 30 11 12 1 31 1 1 8 2 4 36 2 2 9 1 12 29 2 4 21 + 27 2 5 9 9 1 28 3 3 1 2 5 47 11 46 9 47 9 47 9 5 2 38 7 3 1 4 2 38 6 + 3 2 34 1 5 2 1 7 1 5 32 3 2 12 3 2 19 1 8 3 6 12 4 3 18 2 7 2 3 15 4 + 6 27 28 27 27 28 27 28 26 29 11 2 12 29 12 3 11 29 11 4 11 29 1 2 9 4 + 9 29 15 2 8 30 20 34 20 44 10 46 4 50 5 48 6 48 8 45 10 44 10 46 12 2 + 1 39 17 39 9 1 1 1 5 39 7 48 3 1 2 49 1 281 3 1 1 49 5 49 5 49 6 50 5 + 50 5 50 4 51 3 42 0 + + + + 4620.0 + + + 0.654761904762 + + + 785.0 + + + 0.591082802548 + + + 0.768564167726 + + + 0.355248879453 0.549627810605 0.185103792792 0.373625077489 + -0.19513027156 0.0933520244921 0.12226010924 -0.113909818647 + -0.0958029887907 + + + 55.0 + + + 1.36363636364 0.547619047619 + + + 1.74545454545 2.90909090909 0.581818181818 0.0727272727273 + 0.047619047619 0.952380952381 0.952380952381 0.238095238095 + + + 84.0 + + + 7.0 35.0 0.325842696629 13.0 8.0 3.0 + + + 0.0 0.988095238095 + + + 0.169913419913 + + + 0.0 0.032967032967 0.571428571429 0.326007326007 0.0 0.551020408163 + 0.646258503401 0.115646258503 0.0 0.190476190476 0.0952380952381 + 0.0 0.166666666667 0.030612244898 0.0102040816327 0.0 + + + 0.0 0.0 0.0 0.0 0.283333333333 0.439393939394 0.25 0.0 0.0 0.0 0.0 + 0.116883116883 0.628571428571 0.857142857143 0.742857142857 + 0.285714285714 0.0 0.0 0.485714285714 0.688311688312 0.871428571429 + 0.545454545455 0.257142857143 0.194805194805 0.0 0.0 0.271428571429 + 0.727272727273 0.742857142857 0.454545454545 0.0142857142857 0.0 + 0.0 0.0 0.0 0.233766233766 0.357142857143 0.038961038961 0.0 0.0 + 0.0 0.0 0.414285714286 0.116883116883 0.0 0.0 0.0 0.0 0.0 + 0.012987012987 0.128571428571 0.0 0.0285714285714 0.0 0.0 0.0 + 0.685714285714 0.0 0.0 0.0 0.0142857142857 0.0 0.0 0.0 + + + 0.700278831417 0.0987670643472 0.13393463504 0.0545859910931 + 0.860061087963 0.16603320028 0.070106773764 0.154132028583 + 0.0683180016986 0.0773213298238 0.744042668306 0.294558094861 + 0.0444048218081 0.0725430215849 + + + + + + + + + 0 1 1 1 2 2 1 7 1 3 1 8 1 2 1 0 + + + + 32.0 + + + 0.5 + + + 24.0 + + + 1.33333333333 + + + 0.705882352941 + + + 0.444444444444 0.529761904762 0.0405092592593 0.182219328704 + 0.00752314814815 0.000630012793926 0.00101392684022 + 0.000246098747627 -0.0122495651631 + + + 4.0 + + + 0.5 0.125 + + + 1.0 0.0 0.0 1.0 0.5 0.0 0.0 0.0 + + + 8.0 + + + 2.0 6.0 0.153846153846 0.0 2.0 1.0 + + + 0.0 0.875 + + + 0.75 + + + 0.5 1.0 1.0 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.5 0.5 + + + 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 0.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 + + + 0.310481519214 0.206165994628 0.0862957208467 0.0313635515918 + 0.121768320006 0.145356285373 0.102770088962 0.170194808858 + 0.110374167295 0.0176057674181 0.111999891666 0.110219380978 + 0.0707205537196 0.0307281892189 + + + + + + + + + 0 3 76 3 76 7 19 14 39 40 40 39 40 39 40 39 40 38 41 39 40 39 40 39 + 40 39 40 39 40 39 40 39 40 39 41 38 41 38 41 38 41 38 41 38 41 39 40 + 38 41 36 43 1 8 21 58 22 48 1 1 1 5 23 2 1 45 4 1 34 40 3 6 30 42 1 9 + 27 40 4 1 34 40 39 41 38 41 38 41 38 41 38 41 38 41 38 41 7 2 29 41 + 38 41 38 41 38 41 38 41 38 42 37 42 37 23 14 5 38 9 27 5 3 3 16 12 40 + 5 2 14 1 18 39 5 2 33 39 5 3 32 39 5 3 31 39 6 3 31 39 7 2 31 39 7 2 + 31 39 7 2 31 39 7 2 31 39 6 3 31 39 7 1 31 41 38 42 37 42 37 41 38 41 + 39 39 40 40 39 40 39 40 39 40 39 40 39 4 1 35 39 40 39 40 39 40 39 40 + 39 40 39 40 39 40 39 40 39 40 39 40 39 40 39 7 2 31 39 40 40 39 40 39 + 40 39 40 39 40 39 40 39 40 28 7 4 40 11 68 6 73 3 37 0 + + + + 7347.0 + + + 0.849462365591 + + + 3454.0 + + + 0.13288940359 + + + 1.64591254753 + + + 0.5050554541 0.505762065406 0.135580653933 0.184441657446 + 0.114217329501 0.000110326455101 -0.00417237716792 + -0.00183335542116 -0.00509459069862 + + + 79.0 + + + 0.506329113924 0.311827956989 + + + 1.16455696203 0.354430379747 0.303797468354 0.101265822785 + 0.0430107526882 0.430107526882 0.645161290323 0.129032258065 + + + 93.0 + + + 4.0 29.0 0.243243243243 5.0 1.0 2.0 + + + 0.0 0.989247311828 + + + 0.470123860079 + + + 0.839816933638 0.757437070938 0.118993135011 0.0 0.897826086957 + 0.958695652174 0.113043478261 0.0291666666667 0.045652173913 + 0.0826086956522 0.980434782609 0.910416666667 0.0 0.0304347826087 + 0.936956521739 0.816666666667 + + + 0.787878787879 0.824074074074 0.454545454545 0.648148148148 + 0.296296296296 0.010101010101 0.0 0.0 0.727272727273 1.0 + 0.890909090909 0.983333333333 0.158333333333 0.0 0.0 0.0 + 0.754545454545 1.0 1.0 1.0 0.15 0.0 0.0 0.0 0.818181818182 1.0 + 0.827272727273 1.0 0.15 0.145454545455 0.1 0.0166666666667 + 0.0727272727273 0.108333333333 0.127272727273 0.2 0.941666666667 + 1.0 0.991666666667 0.891666666667 0.0 0.0 0.0 0.0 0.983333333333 + 1.0 1.0 0.758333333333 0.0 0.0 0.0 0.0416666666667 1.0 1.0 1.0 + 0.733333333333 0.0 0.0 0.0 0.075 0.841666666667 0.909090909091 0.9 + 0.633333333333 + + + 0.398163455773 0.203207043332 0.0266708552459 0.013985779513 + 0.0234068992413 0.397060650148 0.0858090245487 0.0217606363894 + 0.0139636504013 0.0169050047984 0.128085763327 0.266722652606 + 0.137801483474 0.0535242165149 + + + + + + + + + 50 2 78 5 76 5 77 3 77 6 75 8 72 10 71 9 72 9 74 8 2 2 21 2 45 13 21 + 3 44 14 19 9 39 6 2 7 18 11 37 16 17 13 3 5 26 18 16 25 4 3 15 19 15 + 32 15 20 14 31 17 19 14 32 15 21 13 32 16 21 12 32 15 23 11 13 1 18 + 15 24 10 13 2 17 15 25 9 13 2 2 1 14 15 26 8 3 1 28 15 27 7 3 1 28 15 + 28 6 32 15 28 6 32 15 4 1 24 5 32 15 2 3 19 3 3 4 32 15 2 3 19 5 1 3 + 33 15 3 2 18 10 33 15 4 2 17 10 33 15 10 1 12 10 33 15 10 1 8 2 2 11 + 32 15 6 6 7 2 3 10 31 17 1 1 3 6 7 2 4 9 30 18 1 2 2 5 8 2 5 8 30 21 + 3 4 9 1 7 6 29 22 3 4 9 1 7 6 32 20 2 4 9 1 9 4 32 26 8 2 3 1 5 4 29 + 1 2 27 8 1 3 2 4 4 29 2 1 27 8 1 3 4 2 4 32 27 7 2 3 4 2 4 29 2 1 21 + 1 6 6 2 3 10 29 1 2 20 2 6 6 2 3 5 1 4 19 2 8 1 2 17 8 2 7 2 4 3 2 4 + 4 2 26 17 2 3 12 2 5 2 2 4 32 17 2 4 11 1 10 4 32 17 2 5 10 2 9 4 32 + 17 2 6 9 1 10 4 32 17 2 6 9 1 10 4 32 17 2 7 19 5 31 17 2 8 18 5 31 + 17 2 9 17 5 31 17 2 10 15 6 4 5 22 17 2 11 14 6 3 16 12 17 2 11 14 6 + 3 19 9 17 2 12 13 6 3 22 6 17 2 13 12 6 2 24 5 17 2 14 11 6 2 25 4 17 + 2 16 2 1 6 6 2 26 3 18 1 20 5 7 1 26 3 18 1 21 3 34 5 16 2 18 7 32 5 + 16 7 11 10 33 4 16 6 13 9 34 3 17 5 15 8 33 3 17 6 15 6 34 2 18 9 11 + 7 35 2 17 10 10 7 35 2 17 10 13 1 1 1 36 2 17 14 49 1 17 15 48 1 18 + 14 67 15 66 16 25 1 39 17 22 3 39 19 62 21 60 22 18 1 40 23 17 2 39 + 24 57 26 55 27 54 27 54 28 53 28 53 28 53 28 53 19 1 8 53 10 1 7 3 5 + 55 18 3 4 56 19 1 6 55 27 54 29 10 1 42 28 11 1 40 29 53 18 1 9 10 1 + 43 17 2 8 10 2 45 2 3 9 2 8 11 1 51 7 2 9 64 6 3 8 64 1 3 1 4 8 64 1 + 3 1 4 8 64 1 3 1 4 8 64 6 3 8 9 1 43 7 3 7 1 10 10 1 42 17 2 9 10 1 + 42 17 1 10 53 28 53 28 53 3 2 23 54 2 3 22 54 2 5 20 54 2 6 19 54 2 8 + 17 54 2 9 16 54 2 10 15 54 2 12 13 54 2 13 12 54 2 14 11 54 2 16 9 54 + 2 21 4 11 1 43 1 19 6 10 2 21 1 20 3 17 7 10 2 22 1 19 3 18 7 9 1 43 + 2 19 7 9 1 44 1 21 5 53 3 21 3 10 2 43 2 22 2 9 3 42 4 32 3 22 1 20 2 + 33 2 22 2 20 2 33 3 21 2 20 2 33 3 21 2 20 2 33 1 23 2 21 1 32 3 21 3 + 21 1 32 4 20 3 21 1 32 4 20 4 20 1 34 1 21 4 20 2 55 4 21 1 31 1 23 4 + 21 1 32 1 22 4 21 1 31 4 21 3 21 1 31 4 21 3 21 1 32 3 21 3 54 3 21 2 + 54 4 20 4 53 4 20 4 53 4 20 5 52 4 20 5 52 4 20 5 52 1 2 1 20 5 52 4 + 21 1 1 2 52 4 21 4 52 4 21 3 53 4 21 4 52 4 21 4 52 3 22 4 52 3 23 3 + 53 1 24 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 78 3 + 78 3 79 1 46 0 + + + + 14256.0 + + + 0.460227272727 + + + 4032.0 + + + 0.322668650794 + + + 1.07382310984 + + + 0.551295882937 0.350564058957 0.149489147932 0.380144220326 + 0.0651585578693 -0.0185479903016 -0.0135869559478 -0.00344579004528 + 0.178662705464 + + + 81.0 + + + 2.17283950617 1.53409090909 + + + 1.67901234568 1.08641975309 2.56790123457 3.35802469136 + 1.77272727273 2.02272727273 1.31818181818 1.02272727273 + + + 176.0 + + + 14.0 94.0 0.24269005848 26.0 0.0 2.0 + + + 0.0 0.994318181818 + + + 0.282828282828 + + + 0.668181818182 0.294318181818 0.0238636363636 0.101136363636 0.4125 + 0.267045454545 0.00227272727273 0.161363636364 0.406818181818 + 0.296590909091 0.220454545455 0.0215909090909 0.414502164502 + 0.548701298701 0.661255411255 0.0 + + + 0.431818181818 0.909090909091 0.559090909091 0.00454545454545 + 0.0272727272727 0.0318181818182 0.213636363636 0.1 0.354545454545 + 0.977272727273 0.586363636364 0.0272727272727 0.0136363636364 + 0.0227272727273 0.0681818181818 0.0227272727273 0.309090909091 1.0 + 0.690909090909 0.00454545454545 0.0 0.0 0.0 0.0 0.0909090909091 + 0.25 0.286363636364 0.0863636363636 0.0 0.00909090909091 + 0.336363636364 0.309090909091 0.127272727273 0.127272727273 + 0.00454545454545 0.00454545454545 0.0 0.0 0.0 0.0 0.786363636364 + 0.586363636364 0.309090909091 0.868181818182 0.586363636364 + 0.295454545455 0.0863636363636 0.0 0.381818181818 0.922727272727 + 0.618181818182 0.622727272727 0.8 0.377272727273 0.0 0.0 + 0.0123966942149 0.384297520661 0.586776859504 0.380165289256 + 0.752066115702 0.702479338843 0.0 0.0 + + + 0.64782466396 0.0768071360845 0.113829922841 0.0405337003962 + 0.524682857139 0.222056840466 0.0225279555352 0.23581162467 + 0.0825567190024 0.0245443245381 0.130793405103 0.358752644561 + 0.0332828382686 0.0283163270718 + + + + + + + + + 2 1 20 3 19 3 19 3 19 3 19 3 18 4 18 4 18 4 18 4 18 4 19 3 19 4 18 4 + 17 5 17 5 18 4 18 4 18 4 18 4 18 4 18 4 18 4 18 4 18 4 18 4 19 3 18 4 + 18 4 18 4 19 2 20 3 19 3 19 3 18 4 18 4 18 4 18 4 18 4 18 4 18 5 17 5 + 18 4 17 5 17 5 18 4 18 4 18 1 1 1 66 1 21 1 21 1 21 1 21 1 21 1 20 2 + 19 3 19 3 19 3 19 4 18 4 18 1 1 2 20 2 20 2 18 1 1 2 18 4 18 4 21 1 + 21 1 21 1 18 2 1 1 18 2 1 1 18 4 18 4 18 4 18 4 18 4 18 4 18 4 18 4 + 18 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 18 4 18 4 17 5 17 5 18 4 21 1 + 19 3 19 3 19 3 19 3 19 3 19 3 19 3 18 4 18 4 18 5 18 4 18 4 18 4 18 4 + 18 4 18 4 17 5 17 5 18 4 18 4 19 3 18 4 18 4 18 4 18 4 18 4 18 4 18 4 + 18 4 18 4 18 4 18 4 18 4 18 4 19 3 19 3 19 3 19 4 19 3 19 1 1 1 19 1 + 1 1 18 4 18 4 18 4 18 5 17 5 17 5 17 5 17 5 17 4 18 3 19 3 19 5 18 4 + 18 4 17 5 17 5 17 5 18 5 17 5 17 4 18 5 18 4 18 4 18 4 19 3 19 1 1 1 + 19 3 18 4 17 5 18 5 17 5 17 5 18 4 18 4 17 5 17 5 18 4 17 5 18 4 17 5 + 17 5 18 4 18 4 18 4 18 4 18 5 17 5 17 4 19 3 19 3 21 1 21 1 20 2 21 1 + 65 1 20 3 19 3 21 1 21 1 20 2 19 3 20 2 20 2 19 3 19 4 19 3 19 3 19 3 + 20 2 20 2 19 3 20 2 19 3 19 4 18 4 18 4 18 4 17 5 18 4 18 4 18 5 16 6 + 16 6 17 5 17 5 17 5 17 5 17 5 18 4 17 5 17 6 16 6 17 5 17 5 17 5 17 5 + 17 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 18 5 17 5 17 5 17 5 17 5 17 5 + 18 4 17 5 17 5 17 6 16 6 16 6 16 6 16 6 17 5 17 5 17 5 17 5 17 5 18 4 + 18 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 17 5 18 4 18 4 19 3 + 18 4 18 4 19 3 18 4 19 3 19 3 19 3 20 2 20 2 20 3 20 1 21 1 21 1 21 1 + 21 1 1 0 + + + + 6402.0 + + + 0.0756013745704 + + + 1102.0 + + + 0.64609800363 + + + 1.13418008048 + + + 0.454368680321 0.518496151198 0.0271339520084 6.28064390646 + 0.397092533739 0.00110056535197 0.010826138639 0.00897171605016 + -1.84863001289 + + + 22.0 + + + 2.09090909091 0.0274914089347 + + + 2.54545454545 2.54545454545 2.54545454545 0.363636363636 + 0.0549828178694 0.0412371134021 0.0137457044674 0.0 + + + 291.0 + + + 4.0 21.0 0.216216216216 6.0 5.0 1.0 + + + 0.0 0.996563573883 + + + 0.172133708216 + + + 0.536111111111 0.12602739726 0.0 0.0 0.0856481481481 0.557077625571 + 0.271689497717 0.0 0.0 0.0 0.369863013699 0.320547945205 0.0 0.0 + 0.0 0.481735159817 + + + 0.513888888889 0.111111111111 0.0 0.0 0.0 0.0 0.0 0.0 0.87037037037 + 0.5 0.396396396396 0.0185185185185 0.0 0.0 0.0 0.0 0.0 + 0.342592592593 0.891891891892 0.814814814815 0.175925925926 0.0 0.0 + 0.0 0.0 0.0 0.045045045045 0.481481481481 0.851851851852 + 0.0720720720721 0.0 0.0 0.0 0.0 0.0 0.0 0.597222222222 + 0.567567567568 0.180555555556 0.0 0.0 0.0 0.0 0.0 0.0 0.45045045045 + 0.87962962963 0.0810810810811 0.0 0.0 0.0 0.0 0.0 0.0 + 0.685185185185 0.648648648649 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0277777777778 0.558558558559 + + + 0.380762472156 0.286899742669 0.0731170338325 0.0248507394161 + 0.266835268914 0.404151227279 0.25729723039 0.0697645274209 + 0.107243695242 0.0514799823822 0.373838272596 0.282056325783 + 0.411333038507 0.231246544249 + + + + + + + + + 70 4 22 1 77 6 1 23 2 2 71 34 71 34 70 35 71 34 73 32 75 29 76 29 69 + 36 69 36 69 37 68 37 68 37 68 37 68 37 68 37 68 37 68 37 68 37 68 37 + 68 37 68 37 68 37 69 36 69 36 69 36 69 36 69 36 69 36 69 36 69 36 68 + 37 67 38 66 9 2 30 65 8 2 30 65 40 65 6 2 32 65 40 66 38 36 7 23 39 + 33 72 33 38 3 31 33 24 3 8 10 27 33 36 24 12 33 37 30 5 33 36 32 4 33 + 37 33 2 33 37 33 2 33 37 33 1 34 37 33 1 34 37 33 2 33 37 34 1 33 37 + 68 37 68 37 68 38 67 38 67 38 67 38 67 38 68 37 68 4 1 27 73 32 2 1 + 70 4 1 1 1 30 68 4 1 32 68 37 68 37 68 37 69 36 69 36 69 37 68 37 68 + 37 68 37 68 37 68 37 34 1 33 37 34 1 33 37 34 2 32 37 34 2 32 37 34 2 + 32 37 34 2 32 37 34 3 31 2 6 29 34 5 3 6 2 9 9 2 26 9 34 31 2 3 31 4 + 34 36 33 2 35 35 33 2 35 5 1 29 33 2 35 4 4 10 1 16 33 2 35 4 3 8 5 + 15 34 1 35 5 1 10 3 1 1 15 33 1 35 5 2 11 1 17 33 1 35 4 3 29 33 1 36 + 1 7 1 2 26 31 1 35 4 5 2 1 25 32 2 35 37 66 38 68 37 69 36 69 36 69 + 36 69 36 69 36 69 36 70 4 2 30 69 36 69 36 69 5 1 30 70 4 1 30 70 34 + 71 35 70 35 70 35 70 35 70 35 70 35 70 35 70 35 71 35 70 35 70 35 70 + 35 70 35 71 34 71 34 71 16 1 17 80 5 4 16 95 10 100 5 101 4 101 5 101 + 4 101 4 102 3 102 3 64 0 + + + + 14280.0 + + + 0.772058823529 + + + 4717.0 + + + 0.144583421666 + + + 0.498408656906 + + + 0.504574289395 0.469392818725 0.169215164516 0.278033004677 + -0.183102946712 0.00274303667667 -0.00104672971562 + -0.00200238125695 0.0106776958547 + + + 105.0 + + + 0.619047619048 0.5 + + + 0.914285714286 0.495238095238 0.990476190476 0.0761904761905 + 0.0882352941176 0.617647058824 1.14705882353 0.147058823529 + + + 136.0 + + + 17.0 69.0 0.204255319149 3.0 4.0 2.0 + + + 0.0 0.992647058824 + + + 0.330322128852 + + + 0.0 0.0 0.470588235294 0.623303167421 0.0 0.606334841629 + 0.536199095023 0.430995475113 0.406108597285 0.628959276018 + 0.372171945701 0.0 0.893246187364 0.321350762527 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.10407239819 0.782805429864 0.719457013575 + 0.276018099548 0.0 0.0 0.0 0.0 0.0452488687783 0.950226244344 1.0 + 0.497737556561 0.0 0.0 0.334841628959 0.493212669683 0.361990950226 + 0.85520361991 0.981900452489 0.642533936652 0.0 0.0 0.601809954751 + 0.995475113122 0.927601809955 0.0 0.0 0.0995475113122 0.0 0.0 + 0.579185520362 1.0 0.954751131222 0.0 0.0 0.0 0.733031674208 + 0.891402714932 0.615384615385 0.321266968326 0.447963800905 + 0.0859728506787 0.0 0.0 0.941176470588 1.0 0.588235294118 0.0 0.0 + 0.0 0.0 0.0 0.785714285714 0.857142857143 0.680672268908 + 0.0126050420168 0.0 0.0 0.0 0.0 + + + 0.332173914805 0.265973498451 0.0210191771432 0.0140226906563 + 0.1036242539 0.352287850935 0.184523477344 0.0430836039719 + 0.0134021002879 0.0172396794394 0.339754225407 0.0184053906693 + 0.312090457331 0.111434256712 + + + + + + + + + 53 3 119 5 117 3 119 4 118 4 119 10 2 3 18 1 88 32 1 2 87 35 87 35 87 + 35 87 35 87 35 87 36 86 36 86 36 86 36 87 35 87 35 87 35 87 35 87 35 + 87 35 87 35 87 35 87 35 87 35 87 35 88 34 88 34 88 34 88 34 88 34 88 + 34 88 34 88 34 88 34 61 1 26 34 61 1 26 34 61 2 25 34 62 2 24 34 26 1 + 35 6 20 35 25 1 34 12 15 35 24 2 35 14 12 35 24 2 35 21 4 36 24 2 35 + 66 1 2 16 2 35 80 5 2 35 87 35 33 2 52 35 31 23 34 34 31 24 33 6 1 27 + 30 26 32 6 2 26 31 25 32 7 1 26 31 26 31 6 2 26 31 26 31 4 6 24 31 25 + 32 5 5 24 31 25 32 5 4 24 33 24 32 5 4 23 37 20 34 3 7 21 35 23 34 2 + 7 21 34 24 34 2 6 22 35 22 34 3 5 23 36 21 33 5 4 25 33 22 34 5 3 25 + 33 23 33 5 3 25 32 24 32 6 3 25 33 23 32 6 3 25 15 1 17 23 32 6 3 25 + 11 3 1 2 16 23 33 5 4 24 11 2 20 23 33 5 5 23 11 2 20 23 33 6 9 1 8 7 + 4 13 18 23 33 6 24 1 12 4 19 23 33 6 23 3 12 3 20 22 33 5 24 2 36 22 + 33 5 33 2 27 22 33 5 62 22 33 5 62 22 33 5 62 22 34 5 61 22 34 5 32 4 + 1 2 22 22 34 5 32 4 25 22 34 4 33 3 26 22 34 4 32 5 26 21 34 4 33 8 + 22 21 34 5 30 16 16 21 34 5 31 19 12 21 34 5 31 24 8 20 34 5 31 25 7 + 20 5 1 3 2 23 5 31 26 6 20 6 8 20 5 31 27 4 21 5 18 12 4 32 26 3 22 4 + 1 1 18 1 2 8 4 32 27 2 22 4 24 7 4 32 27 3 21 4 25 5 5 32 27 4 20 5 + 25 4 5 32 28 3 20 5 25 4 5 32 28 3 20 5 25 5 4 32 28 3 20 4 26 5 4 32 + 28 4 20 3 26 5 4 32 28 4 20 3 26 6 3 32 29 3 21 1 27 6 3 33 28 3 49 6 + 3 33 28 3 50 5 3 33 29 2 50 5 3 33 81 5 4 32 81 5 4 32 82 4 4 32 82 3 + 5 32 90 32 90 32 90 32 90 32 90 4 3 25 90 3 14 1 1 14 89 4 21 8 89 4 + 22 7 88 6 20 9 87 6 20 10 87 4 22 9 87 4 23 8 86 6 22 8 86 6 21 9 87 + 4 22 9 88 3 25 6 88 2 27 4 89 2 28 3 90 1 28 3 120 2 120 1 85 0 + + + + 15738.0 + + + 0.945736434109 + + + 6007.0 + + + 0.158148826369 + + + 0.81792667953 + + + 0.497854431538 0.496147723489 0.186250963197 0.131298554198 + -0.0555897143369 0.000753388062064 -0.0103947236357 0.0308937655036 + -0.008307505097 + + + 122.0 + + + 0.631147540984 1.31782945736 + + + 0.622950819672 1.11475409836 0.55737704918 0.196721311475 + 0.093023255814 1.45736434109 2.54263565891 1.17829457364 + + + 129.0 + + + 7.0 47.0 0.260416666667 10.0 9.0 5.0 + + + 0.0 0.992248062016 + + + 0.381687635024 + + + 0.0 0.075 0.746875 0.518181818182 0.188508064516 0.740927419355 + 0.646169354839 0.193548387097 0.785416666667 0.595833333333 + 0.265625 0.0333333333333 0.0 0.534274193548 0.751008064516 + 0.0537634408602 + + + 0.0 0.0 0.0 0.2375 0.604166666667 0.8125 0.766666666667 + 0.247058823529 0.0 0.0 0.0166666666667 0.0458333333333 + 0.570833333333 1.0 1.0 0.101960784314 0.0 0.0 0.454166666667 1.0 + 0.854166666667 0.3875 0.383333333333 0.41568627451 0.375 0.35546875 + 0.51171875 0.99609375 0.98828125 0.3515625 0.0 0.0 0.65 1.0 + 0.991666666667 0.0708333333333 0.1625 0.245833333333 + 0.0916666666667 0.0 0.558333333333 0.933333333333 0.966666666667 + 0.354166666667 0.333333333333 0.320833333333 0.0458333333333 0.0 + 0.0 0.0 0.216666666667 1.0 1.0 0.520833333333 0.0 0.0 0.0 0.0 + 0.1484375 0.78125 0.8125 0.671875 0.21484375 0.0 + + + 0.433372822537 0.101846776673 0.074809589585 0.107551254871 + 0.0175568889549 0.20865437927 0.02687156356 0.118373793037 + 0.237858732412 0.0394026503868 0.132670832303 0.131769346621 + 0.0538829379301 0.0261622032559 + + + + + + + + + 37 4 37 4 37 4 37 3 37 3 38 3 37 3 38 3 38 3 38 2 38 3 38 3 38 4 36 6 + 35 5 36 3 37 3 38 3 38 2 39 2 38 3 38 3 37 3 38 3 38 2 38 3 38 2 38 3 + 38 3 38 3 39 1 110 1 40 1 36 5 36 5 35 6 35 7 34 7 6 2 26 7 5 3 25 9 + 4 2 26 9 3 3 26 9 3 3 25 15 25 16 25 15 26 15 25 16 25 16 25 15 25 10 + 2 3 25 9 4 4 24 9 4 3 25 18 22 18 22 18 23 8 2 8 24 6 3 8 23 18 22 10 + 1 7 24 5 5 7 23 6 3 8 23 7 2 9 23 18 24 2 5 9 32 3 2 3 25 4 4 3 2 3 + 25 4 6 1 3 2 24 5 4 8 24 7 2 3 1 3 25 16 25 15 26 15 25 16 26 15 26 + 14 27 2 5 7 27 2 5 6 36 2 201 1 1 2 35 7 34 7 34 7 34 7 34 6 36 3 1 1 + 30 0 + + + + 3731.0 + + + 0.450549450549 + + + 710.0 + + + 0.504225352113 + + + 0.666666666667 + + + 0.379401408451 0.592050078247 0.118926786268 0.575382919217 + -0.217862653006 0.038534893142 0.175435022175 -0.0876133904063 + -0.299975764304 + + + 41.0 + + + 0.975609756098 0.296703296703 + + + 1.56097560976 1.85365853659 0.292682926829 0.19512195122 0.0 + 0.21978021978 0.483516483516 0.351648351648 + + + 91.0 + + + 8.0 28.0 0.278145695364 6.0 8.0 2.0 + + + 0.0 0.989010989011 + + + 0.190297507371 + + + 0.0 0.0 0.395652173913 0.478260869565 0.0 0.330434782609 + 0.860869565217 0.321739130435 0.0 0.117391304348 0.208695652174 0.0 + 0.297520661157 0.0553359683794 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.316666666667 0.727272727273 0.0 0.0 0.0 0.0 + 0.0 0.527272727273 0.716666666667 0.709090909091 0.516666666667 0.0 + 0.0 0.0 0.6 1.0 0.716666666667 0.890909090909 0.2 0.0 0.0 + 0.0166666666667 0.763636363636 0.818181818182 0.916666666667 + 0.236363636364 0.0 0.0 0.0 0.0 0.2 0.690909090909 0.166666666667 + 0.0 0.0 0.0 0.0 0.15 0.127272727273 0.0 0.0 0.0 0.0 0.0181818181818 + 0.436363636364 0.233333333333 0.0 0.0 0.0 0.0 0.0 0.515151515152 + 0.19696969697 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.687836058649 0.121376789428 0.152873462651 0.0563045738125 + 0.83964705461 0.227623419145 0.089825244514 0.220791039514 + 0.0488269655531 0.0746335589389 0.833944183845 0.331676398774 + 0.12514601313 0.081345997942 + + + + + + + + + 35 2 145 2 144 3 112 1 31 3 112 3 29 3 112 10 2 3 3 1 12 4 111 24 2 1 + 4 5 111 36 111 37 110 37 111 36 110 37 110 37 110 37 110 37 110 37 22 + 1 87 37 21 3 86 36 23 3 85 36 111 36 112 35 24 6 81 36 21 10 80 37 17 + 15 78 38 15 21 72 38 17 20 73 37 17 18 75 36 18 18 4 1 70 36 18 17 1 + 6 68 38 16 17 2 7 68 37 17 26 67 37 17 27 66 37 18 15 2 10 65 37 16 1 + 1 29 64 36 16 33 62 36 17 33 61 36 17 34 60 36 16 37 58 36 16 38 57 + 36 16 40 55 36 16 41 54 36 16 42 53 36 16 43 52 37 15 44 51 37 15 20 + 1 23 51 37 16 1 1 17 3 21 52 36 20 39 52 36 22 37 52 36 24 27 1 6 53 + 3 7 26 25 24 5 4 53 2 21 13 24 26 7 1 12 2 39 2 28 6 25 25 7 1 12 3 + 38 2 29 5 27 24 6 1 13 4 67 5 26 25 19 5 67 5 25 26 18 6 2 1 64 2 28 + 30 14 6 1 3 63 2 28 32 12 10 63 1 28 33 12 10 92 22 3 8 12 10 92 22 6 + 4 12 11 93 21 7 3 12 13 91 5 2 15 6 3 11 14 102 12 5 3 11 14 103 9 2 + 1 4 3 11 14 92 8 3 14 2 3 11 14 64 2 26 25 2 2 12 13 6 1 58 2 23 32 + 11 15 3 4 55 4 27 4 1 23 10 16 4 6 52 4 27 4 3 21 10 17 4 6 52 3 28 1 + 5 20 11 18 3 9 49 1 1 1 29 25 11 19 2 10 48 1 33 23 11 19 2 11 47 1 + 34 22 11 33 46 1 36 20 10 36 82 19 10 18 5 1 1 11 84 17 10 18 3 11 2 + 3 85 14 11 38 85 13 10 40 86 11 10 38 93 6 10 37 3 1 90 6 10 38 2 2 + 88 7 10 38 1 4 87 7 10 38 1 2 1 1 89 2 13 20 1 23 103 20 2 22 103 7 1 + 12 2 23 102 5 3 12 2 23 101 6 3 12 2 23 101 5 11 5 2 22 102 4 18 23 + 103 2 19 23 103 2 4 2 13 23 103 5 1 2 14 21 106 1 3 4 12 21 111 2 13 + 20 112 2 14 19 112 1 16 1 2 15 133 9 2 3 132 10 2 3 132 15 132 14 133 + 3 2 9 133 3 1 10 133 3 1 10 133 13 134 2 2 9 142 5 146 1 138 5 142 5 + 143 4 143 4 144 4 143 4 143 5 141 7 140 7 140 7 139 8 140 7 140 7 141 + 5 144 3 7 0 + + + + 17934.0 + + + 1.20491803279 + + + 4585.0 + + + 0.217011995638 + + + 1.81103509285 + + + 0.47663912998 0.416554160621 0.41482543719 0.148759094589 + 0.210422966628 0.0122090876684 0.0258728963781 0.0302921035196 + 0.0184533532618 + + + 147.0 + + + 0.727891156463 1.37704918033 + + + 0.108843537415 0.925170068027 0.816326530612 0.897959183673 + 0.754098360656 1.86885245902 2.32786885246 0.459016393443 + + + 122.0 + + + 11.0 75.0 0.298507462687 18.0 8.0 3.0 + + + 0.0 0.991803278689 + + + 0.255659640906 + + + 0.799074074074 0.598566308244 0.00185185185185 0.0 0.188288288288 + 0.424585876199 0.0594594594595 0.0 0.0234234234234 0.530950305144 + 0.46036036036 0.0113339145597 0.0 0.0653879686138 0.676576576577 + 0.265911072363 + + + 0.625925925926 0.948148148148 0.9 0.204861111111 0.0 0.0 0.0 0.0 + 0.622222222222 1.0 1.0 0.333333333333 0.00740740740741 0.0 0.0 0.0 + 0.0771929824561 0.0912280701754 0.150877192982 0.0888157894737 + 0.0631578947368 0.0 0.0 0.0 0.0 0.596296296296 0.981481481481 + 0.527777777778 0.177777777778 0.0 0.0 0.0 0.0 0.0962962962963 + 0.866666666667 0.892361111111 0.896296296296 0.17037037037 0.0 0.0 + 0.0 0.0 0.140350877193 0.256578947368 0.421052631579 0.361403508772 + 0.0456140350877 0.0 0.0 0.0 0.0 0.260416666667 0.777777777778 + 0.788888888889 0.0740740740741 0.0 0.0 0.0 0.0 0.0 0.280701754386 + 0.870175438596 0.708771929825 0.273026315789 + + + 0.461355488466 0.218023798914 0.0733689143521 0.0385830361525 + 0.198520831336 0.425790851539 0.135908446805 0.07114834736 + 0.0421842183783 0.0494174568827 0.179432074404 0.263398123021 + 0.334787572609 0.0794962859564 + + + + + + + + + 6 2 33 7 31 9 29 12 27 15 24 11 28 11 28 13 27 14 25 16 23 17 22 18 + 22 18 21 10 1 6 1 1 20 17 1 1 20 19 20 21 17 23 17 23 16 24 15 25 14 + 26 13 27 12 28 11 29 10 30 9 8 3 14 1 4 9 7 4 12 4 4 8 6 5 11 6 3 8 7 + 5 6 1 2 9 1 8 7 5 5 3 1 9 2 7 7 5 5 3 2 9 1 7 7 5 5 2 3 17 7 5 5 3 2 + 17 4 7 6 3 2 17 5 6 6 3 2 17 4 8 5 3 3 16 4 8 3 2 1 2 3 16 3 10 2 5 3 + 16 3 17 3 16 3 17 3 16 3 17 3 16 3 15 1 1 3 16 3 15 1 1 4 15 3 15 11 + 10 3 10 3 1 13 1 1 7 3 8 21 7 3 8 22 6 3 10 20 6 3 11 19 6 3 11 19 6 + 3 12 18 6 3 13 17 6 4 13 16 6 4 14 14 7 4 14 14 7 4 15 1 2 10 7 4 16 + 13 7 3 18 11 6 4 19 10 7 3 20 9 6 5 21 7 6 5 22 3 1 2 6 7 20 6 5 8 20 + 5 6 8 21 5 6 7 22 3 7 8 21 4 6 9 20 4 6 9 20 3 6 9 21 3 7 11 28 15 24 + 16 24 16 23 17 22 18 21 19 20 20 19 21 18 21 18 22 17 24 15 24 15 26 + 13 27 12 28 11 28 11 30 9 26 1 3 10 6 1 17 4 2 9 19 2 3 5 1 9 24 15 + 24 15 24 15 24 15 24 15 25 14 5 2 18 14 5 6 16 13 4 6 17 12 3 7 18 10 + 3 9 17 10 3 9 8 2 6 11 3 10 5 1 1 2 3 16 1 10 3 6 3 14 3 9 6 3 8 1 1 + 8 5 4 2 1 19 8 6 4 21 8 4 6 21 8 6 5 21 7 6 6 20 7 6 8 18 7 6 9 17 7 + 6 10 16 8 5 10 16 8 6 10 15 8 6 11 14 8 6 13 12 8 6 14 12 7 6 15 11 7 + 3 19 10 8 2 20 9 8 5 17 9 7 7 17 9 6 7 17 10 6 6 19 7 7 6 20 6 8 5 21 + 6 7 5 22 4 8 6 21 3 8 7 33 5 34 5 34 6 34 5 34 5 34 5 34 5 34 5 34 5 + 34 5 35 4 35 4 35 5 34 5 34 5 34 5 35 4 35 4 36 2 26 0 + + + + 5889.0 + + + 0.258278145695 + + + 2446.0 + + + 0.325838103025 + + + 1.1319818657 + + + 0.430208288505 0.467323521395 0.0386207869819 0.611863722423 + 0.0347177116466 0.00187861461133 -0.0174965145423 0.00238963375685 + -0.0306449363758 + + + 39.0 + + + 2.94871794872 0.76821192053 + + + 2.05128205128 3.58974358974 3.07692307692 2.46153846154 + 0.741721854305 1.13907284768 0.688741721854 0.476821192053 + + + 151.0 + + + 13.0 45.0 0.298994974874 8.0 11.0 2.0 + + + 0.0 0.993377483444 + + + 0.415350653761 + + + 0.783783783784 0.511695906433 0.552631578947 0.228070175439 + 0.678378378378 0.184210526316 0.760526315789 0.307894736842 + 0.32972972973 0.442105263158 0.813157894737 0.155263157895 + 0.0540540540541 0.357894736842 0.197368421053 0.334210526316 + + + 0.694444444444 0.5 0.5 0.5 0.197368421053 0.0 0.0 0.0 + 0.966666666667 0.905263157895 0.242105263158 0.8 1.0 0.831578947368 + 0.684210526316 0.136842105263 0.733333333333 0.484210526316 + 0.0210526315789 0.263157894737 0.989473684211 0.294736842105 + 0.431578947368 0.8 0.488888888889 1.0 0.326315789474 0.126315789474 + 1.0 0.757894736842 0.0 0.0 0.155555555556 0.757894736842 + 0.778947368421 0.0315789473684 0.884210526316 0.926315789474 + 0.189473684211 0.0 0.0 0.378947368421 0.715789473684 0.242105263158 + 0.547368421053 0.894736842105 0.431578947368 0.0 0.0 0.210526315789 + 0.589473684211 0.663157894737 0.157894736842 0.526315789474 + 0.747368421053 0.0 0.0 0.0 0.0736842105263 0.105263157895 0.0 + 0.105263157895 0.589473684211 0.0 + + + 0.490413022585 0.206174919705 0.028194745042 0.0192787152869 + 0.259018601766 0.413167957664 0.12699663972 0.14259318544 + 0.0570758597838 0.0369878711566 0.178584951679 0.330376239616 + 0.291179130072 0.0747957272798 + + + + + + + + + 74 2 42 11 12 1 9 2 42 35 42 35 42 35 42 36 41 35 42 35 42 35 42 35 + 43 34 43 34 43 34 43 34 42 36 42 35 42 35 42 35 42 35 42 35 42 35 42 + 35 42 34 43 28 49 34 43 35 42 35 42 35 42 35 42 35 41 36 41 36 42 35 + 42 6 2 27 42 7 2 26 4 2 2 1 32 36 3 18 20 36 2 20 3 2 14 36 3 19 4 9 + 5 37 3 20 3 11 2 38 3 19 4 51 3 19 4 51 3 19 3 52 3 18 4 52 3 19 3 20 + 9 20 1 2 3 19 3 19 31 2 3 20 1 20 31 2 2 42 32 1 2 42 36 41 33 23 1 + 21 33 22 1 21 32 23 1 21 33 20 1 23 33 6 1 13 3 20 34 23 1 20 34 43 + 35 41 37 40 36 41 36 41 36 41 36 41 36 41 36 36 3 2 36 41 36 41 36 20 + 1 20 36 19 2 20 35 21 1 20 35 42 35 42 36 41 36 41 36 41 36 41 37 17 + 2 21 37 2 1 14 2 21 47 5 5 20 52 1 4 20 66 11 67 10 69 8 70 7 70 7 71 + 3 1 2 71 2 75 2 75 3 75 3 1 2 71 3 1 1 72 2 75 4 74 4 73 4 74 3 75 2 + 75 2 76 1 33 0 + + + + 7623.0 + + + 0.777777777778 + + + 3273.0 + + + 0.146043385273 + + + 0.710582494663 + + + 0.521688616592 0.433185556532 0.134261688666 0.15250206248 + -0.0906644486651 -0.00259471626768 0.00848286774683 + -0.00497863486146 -0.00125932553766 + + + 77.0 + + + 0.558441558442 0.444444444444 + + + 0.311688311688 0.571428571429 0.935064935065 0.311688311688 + 0.0808080808081 0.929292929293 0.444444444444 0.323232323232 + + + 99.0 + + + 10.0 50.0 0.176991150442 5.0 7.0 3.0 + + + 0.0 0.989898989899 + + + 0.429358520268 + + + 0.0 0.450526315789 0.875789473684 0.138947368421 0.0 0.385263157895 + 0.974736842105 0.24 0.767543859649 0.749473684211 0.322105263158 + 0.229473684211 0.8875 0.846 0.0 0.0 + + + 0.0 0.0 0.0769230769231 0.694444444444 0.787037037037 + 0.692307692308 0.194444444444 0.0 0.0 0.0 0.0769230769231 1.0 1.0 + 1.0 0.375 0.0 0.0 0.0 0.017094017094 0.694444444444 0.925925925926 + 0.965811965812 0.37962962963 0.0 0.0 0.0 0.0 0.883333333333 1.0 1.0 + 0.608333333333 0.0 0.625 0.608333333333 0.630769230769 + 0.791666666667 0.65 0.576923076923 0.591666666667 0.292307692308 + 0.87037037037 1.0 0.965811965812 0.611111111111 0.0 0.0 0.0 0.0 + 0.841666666667 1.0 1.0 0.666666666667 0.0 0.0 0.0 0.0 + 0.791666666667 0.916666666667 0.992307692308 0.7 0.0 0.0 0.0 0.0 + + + 0.387493970281 0.180308279008 0.0345545388879 0.0418947301891 + 0.0329690553755 0.353275836918 0.0443896678034 0.0522121856157 + 0.0537088095572 0.0423006639049 0.109683247411 0.222766749048 + 0.0558357858491 0.039274290437 + + + + + + + + + 3 2 30 5 28 6 26 7 27 6 26 9 24 11 22 12 21 13 20 14 19 15 18 16 17 + 17 15 18 15 19 15 19 13 21 12 22 11 23 10 24 9 25 8 25 8 26 7 27 6 4 + 1 12 4 2 1 3 6 4 1 12 16 4 3 10 16 17 16 18 2 3 10 25 8 26 7 27 6 28 + 5 28 5 28 5 28 7 26 7 9 1 16 5 11 1 12 2 2 5 19 2 2 10 27 6 18 3 6 7 + 26 7 26 7 26 7 26 7 26 7 26 7 4 2 20 7 4 3 19 7 3 5 18 7 3 6 17 7 3 + 10 13 7 3 9 14 7 4 9 13 8 3 10 13 7 4 9 13 7 4 10 12 7 3 11 13 5 6 8 + 14 4 9 7 13 5 8 9 10 6 11 7 9 7 10 9 7 6 12 10 2 1 1 7 8 4 1 9 1 11 7 + 1 5 20 14 19 16 17 17 16 18 16 20 12 21 12 22 11 26 7 27 6 27 7 29 3 + 31 2 31 3 30 3 30 3 30 3 30 3 30 3 4 3 2 3 7 1 10 3 9 2 8 1 5 2 2 4 + 23 10 27 6 28 4 30 3 31 3 30 3 30 5 28 8 25 9 1 1 1 2 14 2 3 3 7 5 13 + 2 3 3 26 1 3 3 29 3 31 2 31 2 31 2 31 3 30 3 30 4 29 4 29 3 30 3 8 4 + 18 4 6 5 18 2 1 1 6 6 17 3 7 7 16 3 8 6 5 1 9 3 9 6 5 1 10 3 7 8 15 2 + 9 8 14 3 7 12 10 5 6 14 9 4 6 14 8 5 5 16 7 5 6 16 6 5 6 16 6 5 6 21 + 1 5 6 27 6 27 7 26 6 27 6 27 6 27 6 27 6 27 6 27 6 27 6 27 6 27 7 27 + 6 27 5 28 5 29 4 29 4 29 3 24 0 + + + + 4719.0 + + + 0.230769230769 + + + 2806.0 + + + 0.218104062723 + + + 1.13345246855 + + + 0.447712491091 0.479274793451 0.0263028827674 0.440190386842 + 0.0253027587312 0.00104500159266 -0.014828856385 0.00260614823962 + -0.0138228559958 + + + 33.0 + + + 3.27272727273 0.433566433566 + + + 3.63636363636 3.75757575758 2.78787878788 2.42424242424 + 0.167832167832 0.727272727273 0.335664335664 0.503496503497 + + + 143.0 + + + 18.0 83.0 0.20399113082 4.0 7.0 2.0 + + + 0.0 0.993006993007 + + + 0.594617503708 + + + 0.9 0.732638888889 0.621527777778 0.506944444444 0.8 0.680555555556 + 0.944444444444 0.315972222222 0.460714285714 0.788194444444 + 0.986111111111 0.25 0.0888888888889 0.308641975309 0.805555555556 + 0.413580246914 + + + 0.720588235294 1.0 0.791666666667 0.625 0.347222222222 + 0.277777777778 0.152777777778 0.0 0.941176470588 0.930555555556 + 0.763888888889 0.75 0.986111111111 0.875 1.0 0.875 0.676470588235 + 1.0 0.875 0.472222222222 0.972222222222 0.944444444444 + 0.597222222222 0.527777777778 0.5 1.0 0.972222222222 0.402777777778 + 0.930555555556 0.930555555556 0.138888888889 0.0 0.235294117647 + 0.805555555556 0.958333333333 0.611111111111 1.0 1.0 0.444444444444 + 0.0 0.0147058823529 0.75 0.958333333333 0.625 0.944444444444 1.0 + 0.555555555556 0.0 0.0 0.388888888889 0.736111111111 0.611111111111 + 0.805555555556 1.0 0.819444444444 0.0 0.0 0.0 0.0 0.0333333333333 + 0.555555555556 0.9 0.833333333333 0.0 + + + 0.512315791742 0.197812714339 0.023769012353 0.0224760496094 + 0.295264643844 0.417445736572 0.117257312112 0.0896085636875 + 0.0463694702539 0.0412609048745 0.161573354312 0.392092677117 + 0.269654346264 0.0691654407035 + + + + + + + + + 1 1 6 1 5 4 3 5 2 5 2 5 4 1 1 1 5 2 4 3 2 5 2 5 3 4 3 4 3 6 1 5 2 5 2 + 5 4 1 5 1 5 4 3 5 2 5 5 2 4 2 2 0 + + + + 168.0 + + + 0.291666666667 + + + 87.0 + + + 0.931034482759 + + + 1.14925373134 + + + 0.434865900383 0.507246376812 0.02413960149 0.454397322412 + 0.0344387193376 7.65958266974e-05 -0.00467906744685 + -0.000579714195032 0.00696264860193 + + + 7.0 + + + 1.42857142857 0.0416666666667 + + + 0.571428571429 1.14285714286 1.71428571429 0.571428571429 0.0 + 0.166666666667 0.0 0.0 + + + 24.0 + + + 1.0 11.0 0.25 0.0 4.0 2.0 + + + 0.0 0.958333333333 + + + 0.517857142857 + + + 0.666666666667 0.333333333333 0.0 0.0 0.833333333333 0.666666666667 + 0.833333333333 0.583333333333 0.583333333333 0.916666666667 + 0.916666666667 0.75 0.0 0.0 0.416666666667 0.25 + + + 0.333333333333 1.0 0.0 0.666666666667 0.0 0.0 0.0 0.0 + 0.333333333333 1.0 0.0 0.666666666667 0.0 0.0 0.0 0.0 1.0 1.0 0.0 + 1.0 1.0 0.666666666667 0.666666666667 0.333333333333 0.333333333333 + 1.0 0.666666666667 1.0 1.0 0.666666666667 1.0 0.333333333333 + 0.333333333333 1.0 0.666666666667 1.0 1.0 1.0 0.666666666667 + 0.666666666667 0.0 1.0 1.0 1.0 1.0 0.666666666667 0.666666666667 + 1.0 0.0 0.0 0.0 0.0 0.666666666667 0.666666666667 0.333333333333 + 0.666666666667 0.0 0.0 0.0 0.0 0.333333333333 0.0 0.0 0.0 + + + 0.392957330739 0.255854383807 0.0144930608663 0.0101791333981 + 0.29332542798 0.317453057578 0.211353029909 0.0407378337155 + 0.0311080466076 0.0174413816193 0.390413801545 0.145439223031 + 0.287367556468 0.170134588855 + + + + + + + + + 2 4 8 5 6 6 7 5 6 6 7 5 6 6 6 6 6 6 6 6 6 6 6 6 6 7 6 5 7 5 7 5 7 5 7 + 5 7 5 6 7 5 7 5 7 6 6 5 6 6 6 6 6 6 6 6 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 + 5 7 5 7 4 8 6 5 7 5 7 1 1 1 1 1 11 1 31 1 3 1 7 1 3 1 7 1 1 3 7 5 7 1 + 1 3 7 1 1 3 8 4 8 5 6 6 6 6 7 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 8 5 7 5 + 7 5 7 5 7 5 7 5 7 5 7 5 7 5 6 6 6 7 6 6 5 7 5 8 3 9 4 8 4 8 4 7 6 6 6 + 6 7 5 7 5 6 6 6 6 6 6 6 7 5 7 5 8 4 8 4 8 4 8 4 8 4 8 3 9 4 8 5 7 5 7 + 4 8 3 9 3 9 4 8 4 8 5 7 5 7 4 8 5 7 5 7 5 7 4 8 4 8 4 9 3 9 3 9 3 9 3 + 9 3 9 3 9 5 7 5 7 4 8 3 9 5 7 4 1 1 6 4 8 4 8 6 7 5 7 5 7 4 8 3 9 3 9 + 4 7 5 7 5 8 4 8 4 8 4 8 4 9 3 9 2 10 2 10 2 2 0 + + + + 1728.0 + + + 0.0833333333333 + + + 717.0 + + + 0.529986052999 + + + 1.09708534284 + + + 0.483200202865 0.46009499566 0.0070391786163 2.25604798097 + 0.0833817683908 -9.32618890588e-06 0.0478558843625 0.0016106698256 + 0.529538314393 + + + 12.0 + + + 2.66666666667 0.0555555555556 + + + 2.66666666667 1.66666666667 3.33333333333 3.0 0.0 0.194444444444 + 0.0 0.0277777777778 + + + 144.0 + + + 3.0 14.0 0.260869565217 3.0 16.0 1.0 + + + 0.0 0.993055555556 + + + 0.414930555556 + + + 0.564814814815 0.314814814815 0.00925925925926 0.0 1.0 + 0.814814814815 0.611111111111 0.0462962962963 0.453703703704 + 0.611111111111 0.898148148148 0.833333333333 0.0 0.0 + 0.0648148148148 0.416666666667 + + + 0.0 0.0 0.0555555555556 0.0 0.0 0.0 0.0 0.0 0.75 0.944444444444 + 0.416666666667 0.5 0.0277777777778 0.0 0.0 0.0 1.0 1.0 0.5 1.0 + 0.666666666667 0.0 0.0 0.0 1.0 1.0 0.694444444444 1.0 1.0 0.5 + 0.138888888889 0.0 0.944444444444 1.0 0.888888888889 1.0 1.0 1.0 + 1.0 0.222222222222 0.0277777777778 0.361111111111 0.138888888889 + 0.75 0.777777777778 0.916666666667 1.0 0.888888888889 0.0 0.0 0.0 + 0.0 0.111111111111 0.277777777778 0.444444444444 1.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.111111111111 0.416666666667 + + + 0.446437613379 0.25335803918 0.0822005918928 0.0279497319821 + 0.326542545428 0.416537758753 0.211534875254 0.0188263739791 + 0.0886468267021 0.0515367679631 0.413412489543 0.320379847309 + 0.394738866355 0.179893823116 + + + + + + + + + 4 1 35 2 34 2 31 6 30 7 29 8 29 7 29 7 28 1 3 4 28 1 3 5 27 9 27 9 26 + 10 27 9 27 10 26 10 26 10 26 10 26 10 26 12 24 14 22 14 21 15 22 3 2 + 8 23 2 3 9 24 1 2 9 22 3 2 9 22 2 3 2 1 1 2 3 21 4 2 2 1 1 3 2 22 2 + 10 1 23 1 12 1 34 4 25 3 4 4 5 1 14 1 4 4 2 5 5 1 14 2 4 3 2 5 5 2 13 + 2 9 5 5 2 13 2 11 3 5 3 12 2 12 2 4 4 12 3 12 1 5 2 14 2 9 1 1 3 4 2 + 14 2 9 5 2 4 13 3 10 1 1 2 3 4 12 3 9 5 3 5 11 4 8 5 4 6 9 4 8 5 4 3 + 12 4 9 4 4 2 13 4 9 5 2 4 13 3 3 11 2 7 10 3 4 10 2 8 8 4 5 9 2 8 8 5 + 5 17 9 5 8 15 8 4 13 11 8 4 10 2 1 12 7 4 8 18 7 3 9 17 7 3 9 14 9 4 + 11 3 1 7 1 1 8 4 12 2 3 4 12 3 17 5 10 5 11 2 3 6 10 7 9 3 1 7 9 7 11 + 8 10 7 11 9 8 8 11 10 8 9 9 7 11 8 11 3 14 7 29 13 23 13 7 1 15 16 5 + 4 11 17 5 4 10 18 5 3 10 17 1 1 1 1 15 20 1 1 14 21 15 22 14 26 10 27 + 10 25 3 1 7 25 3 1 7 30 6 30 6 20 1 10 5 19 3 9 5 19 3 8 6 6 2 11 3 8 + 14 10 5 8 6 4 4 3 1 2 1 2 5 8 6 3 6 1 3 4 5 7 7 4 4 1 4 4 6 1 3 2 7 5 + 2 3 5 2 5 4 2 1 6 4 4 3 6 2 4 7 7 3 4 2 3 2 2 2 3 8 7 4 3 11 2 9 7 6 + 1 11 2 10 7 10 1 6 3 9 9 5 4 3 1 2 4 8 11 3 5 6 3 8 13 1 5 5 4 8 13 2 + 4 5 3 10 20 3 4 9 22 1 5 8 22 1 5 4 2 1 28 9 9 5 8 14 7 7 5 4 3 10 6 + 8 6 4 1 11 6 8 6 4 2 10 6 10 5 2 4 9 6 30 6 29 7 29 7 30 6 7 6 17 7 6 + 8 15 6 7 8 15 3 10 8 15 4 9 7 17 5 7 7 16 6 7 8 3 2 10 4 10 11 11 3 + 11 11 11 5 9 12 10 8 3 17 8 8 3 18 7 8 3 20 4 10 2 20 4 10 2 20 4 10 + 3 19 1 1 1 10 7 17 1 11 7 29 6 30 6 30 6 30 6 30 6 30 6 30 6 31 5 31 + 5 31 5 31 5 31 6 30 6 30 6 30 6 30 6 30 6 30 6 30 6 31 5 31 5 31 5 31 + 5 31 5 31 5 31 5 31 5 31 5 31 5 31 5 32 4 32 5 31 5 31 5 31 5 31 5 32 + 4 32 4 32 4 33 2 35 1 22 0 + + + + 6228.0 + + + 0.208092485549 + + + 2213.0 + + + 0.465883416177 + + + 1.11905831996 + + + 0.441792008263 0.478070912893 0.0392055763868 0.677607458312 + 0.0423734307654 0.00240937960122 -0.0552893952999 + -0.000719096464485 -0.0134960400769 + + + 36.0 + + + 5.27777777778 0.93063583815 + + + 5.44444444444 6.55555555556 6.44444444444 2.66666666667 + 0.924855491329 1.13294797688 1.59537572254 0.0693641618497 + + + 173.0 + + + 18.0 95.0 0.233193277311 18.0 13.0 3.0 + + + 0.0 0.994219653179 + + + 0.35533076429 + + + 0.568475452196 0.62015503876 0.346253229974 0.0782828282828 + 0.302325581395 0.602067183463 0.428940568475 0.492424242424 + 0.077519379845 0.692506459948 0.519379844961 0.0 0.0 0.191214470284 + 0.777777777778 0.00757575757576 + + + 0.583333333333 0.534090909091 0.654761904762 0.431818181818 + 0.0227272727273 0.0714285714286 0.0 0.0 0.857142857143 + 0.309090909091 0.352380952381 1.0 0.454545454545 0.72380952381 + 0.281818181818 0.0 0.27380952381 0.363636363636 0.154761904762 + 0.852272727273 0.477272727273 0.738095238095 0.977272727273 + 0.784090909091 0.0190476190476 0.545454545455 0.580952380952 + 0.763636363636 0.363636363636 0.209523809524 0.0909090909091 + 0.272727272727 0.0 0.0568181818182 0.571428571429 0.659090909091 + 0.693181818182 0.464285714286 0.0 0.0 0.0 0.227272727273 + 0.92380952381 0.590909090909 0.327272727273 0.619047619048 0.0 0.0 + 0.0 0.0 0.357142857143 0.340909090909 0.954545454545 0.880952380952 + 0.0113636363636 0.0 0.0 0.0 0.0 0.127272727273 0.572727272727 + 0.761904761905 0.0181818181818 0.0 + + + 0.586682566401 0.165421087293 0.0291790930771 0.0299583636362 + 0.547775109073 0.318105723946 0.113156700157 0.105972600961 + 0.0530924096803 0.0497125699311 0.491920223372 0.32896990882 + 0.210390674399 0.084773731935 + + + + + + + + + 42 2 44 2 43 3 43 3 42 4 34 12 8 16 2 20 7 17 2 19 7 18 3 19 5 19 3 + 19 4 20 3 19 4 20 3 19 4 21 1 20 4 21 1 20 4 21 1 20 4 42 5 41 5 41 5 + 41 5 41 5 41 4 42 4 42 4 43 1 46 1 45 2 43 3 42 4 43 4 42 4 41 5 41 5 + 41 5 41 5 41 5 41 5 41 5 41 5 42 5 41 5 41 5 41 5 41 5 41 5 41 5 41 6 + 40 6 40 6 40 6 29 5 6 6 2 35 3 6 2 35 2 7 2 35 2 7 2 36 1 2 0 + + + + 2484.0 + + + 0.851851851852 + + + 1837.0 + + + 0.129014697877 + + + 1.00317863954 + + + 0.521369382447 0.518164357392 0.080809888423 0.0899008719927 + -0.000653232717602 -0.000380100828377 0.00184474929647 + -0.000589059705254 -0.000224490434464 + + + 46.0 + + + 0.108695652174 0.259259259259 + + + 0.0869565217391 0.0 0.0869565217391 0.260869565217 0.518518518519 + 0.148148148148 0.0 0.296296296296 + + + 54.0 + + + 0.0 12.0 0.201612903226 1.0 1.0 2.0 + + + 0.0 0.981481481481 + + + 0.739533011272 + + + 0.370629370629 0.805194805195 0.734265734266 0.480519480519 0.5 1.0 + 1.0 0.714285714286 0.475524475524 0.987012987013 1.0 0.714285714286 + 0.596153846154 0.869047619048 0.858974358974 0.672619047619 + + + 0.0 0.342857142857 0.485714285714 0.657142857143 0.466666666667 + 0.371428571429 0.171428571429 0.0 0.0 0.97619047619 1.0 1.0 1.0 1.0 + 1.0 0.619047619048 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.428571428571 0.0 + 0.857142857143 1.0 1.0 1.0 1.0 1.0 0.428571428571 0.0 + 0.685714285714 0.942857142857 1.0 1.0 1.0 1.0 0.428571428571 + 0.0555555555556 1.0 1.0 1.0 1.0 1.0 1.0 0.428571428571 + 0.166666666667 1.0 1.0 1.0 1.0 1.0 1.0 0.309523809524 0.5 + 0.642857142857 0.666666666667 0.809523809524 0.722222222222 + 0.714285714286 0.833333333333 0.547619047619 + + + 0.438073179374 0.0139036527293 0.0127737577757 0.0155335833988 + 0.0104856038998 0.0149752517008 0.0760677520464 0.00746829152634 + 0.0152201381063 0.00407431029361 0.192861116196 0.0125788989685 + 0.143608312484 0.0260432429462 + + + + + + + + + 9 2 11 5 9 6 8 5 10 3 12 2 12 2 12 2 12 2 12 1 12 2 12 3 12 2 12 2 11 + 3 11 2 12 2 12 2 12 2 12 3 10 4 11 2 12 2 11 3 11 3 11 1 1 1 13 1 11 + 1 1 1 11 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 1 13 1 13 1 13 + 1 13 1 13 1 12 2 12 2 12 1 13 1 13 2 12 2 12 2 12 2 12 2 12 1 13 1 13 + 1 12 1 13 1 13 2 12 2 12 2 12 2 54 2 11 3 11 3 11 2 12 2 13 1 12 2 12 + 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 11 3 11 3 11 3 11 2 12 + 2 12 2 12 2 12 2 12 2 12 1 13 2 12 1 13 1 12 2 12 2 12 2 12 1 13 1 13 + 1 13 1 13 1 12 2 12 2 12 2 12 2 12 2 12 2 12 3 11 2 12 2 12 2 12 2 12 + 2 12 1 12 2 12 2 12 2 12 2 12 2 12 3 10 4 11 2 53 4 10 3 11 3 11 3 11 + 3 11 3 11 3 11 3 11 3 11 2 12 2 12 2 12 2 12 2 12 2 6 1 5 2 6 1 5 3 4 + 2 5 3 5 1 5 3 11 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 12 2 + 12 2 12 2 12 3 26 2 11 5 10 4 9 6 8 6 9 5 9 5 9 4 9 0 + + + + 2352.0 + + + 0.0833333333333 + + + 364.0 + + + 1.18956043956 + + + 0.79679144385 + + + 0.371513102282 0.527587681779 0.0338081116444 7.74422489304 + -0.462643077096 0.00159373503804 0.405351443582 -0.0253541985043 + -3.10394900215 + + + 14.0 + + + 2.21428571429 0.0357142857143 + + + 2.57142857143 2.28571428571 3.14285714286 0.571428571429 + 0.047619047619 0.0 0.0 0.0952380952381 + + + 168.0 + + + 1.0 5.0 0.179012345679 6.0 6.0 1.0 + + + 0.0 0.994047619048 + + + 0.154761904762 + + + 0.0 0.0 0.238095238095 0.777777777778 0.0 0.279761904762 + 0.255952380952 0.113095238095 0.388888888889 0.214285714286 0.0 + 0.0396825396825 0.27380952381 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.047619047619 1.0 0.714285714286 0.0 0.0 0.0 + 0.0 0.0714285714286 0.619047619048 0.785714285714 0.690476190476 + 0.0 0.0 0.0 0.0714285714286 0.571428571429 0.285714285714 + 0.0238095238095 0.333333333333 0.0 0.0 0.142857142857 + 0.904761904762 0.166666666667 0.0 0.0 0.0952380952381 0.0 0.0 + 0.761904761905 0.142857142857 0.0 0.0 0.047619047619 0.0 + 0.428571428571 0.738095238095 0.190476190476 0.0 0.0 0.0 + 0.0952380952381 0.0 0.833333333333 0.166666666667 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0952380952381 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.274450878909 0.339701546842 0.118177742932 0.0407246637652 + 0.227795870833 0.341201744507 0.338125439903 0.0483399081976 + 0.139327423187 0.078378803367 0.332860906815 0.228519242069 + 0.383772038324 0.328770513934 + + + + + + + + + 1 1 37 2 26 2 8 7 21 2 8 12 11 7 8 30 8 30 8 30 8 30 8 30 8 30 8 18 1 + 11 8 18 1 11 8 18 1 11 8 30 9 29 9 29 9 29 8 31 6 32 6 32 6 32 6 7 2 + 22 7 7 1 4 1 6 2 11 6 18 3 7 1 2 9 14 5 11 8 14 5 11 8 15 3 11 9 29 9 + 9 2 19 8 3 8 6 2 11 8 3 8 5 4 3 1 2 12 4 3 1 3 5 4 3 1 1 13 17 2 7 1 + 3 8 27 11 28 10 30 7 31 8 30 8 30 8 30 8 30 8 30 8 10 1 19 8 30 8 31 + 7 31 7 31 7 4 5 22 7 4 6 6 9 6 7 4 22 5 6 4 23 5 7 3 23 4 8 2 24 5 7 + 2 25 4 34 4 34 4 34 4 34 4 34 4 34 4 34 4 34 4 34 4 34 4 34 4 7 4 23 + 4 6 12 16 5 5 33 5 33 5 32 6 32 6 32 6 32 7 31 7 31 7 32 6 32 6 32 6 + 32 5 34 4 34 4 34 4 34 4 34 3 35 5 33 5 33 5 33 5 33 5 7 2 24 5 4 5 + 24 5 4 6 1 2 4 2 5 3 6 5 4 1 1 3 2 1 4 5 2 4 6 5 17 2 14 5 33 5 33 5 + 34 4 13 3 17 6 32 6 32 6 32 6 17 2 14 5 7 6 3 4 1 4 8 5 12 1 20 5 12 + 1 20 5 7 1 4 1 20 5 12 2 2 1 16 5 12 2 19 5 3 4 5 2 19 5 3 12 4 1 13 + 5 2 23 9 4 2 25 1 2 4 5 1 29 3 5 1 29 3 5 2 28 3 5 1 30 2 5 1 30 2 5 + 1 30 2 5 1 30 2 5 1 31 1 5 1 31 1 5 1 31 1 37 1 75 2 36 2 37 1 37 1 + 37 1 37 1 37 1 + + + + 4978.0 + + + 0.290076335878 + + + 2790.0 + + + 0.221505376344 + + + 1.09113551193 + + + 0.471839581517 0.445329473394 0.0340235343262 0.410777219798 + 0.0190693800555 2.85700752262e-05 0.00157441168204 0.00277794800624 + -0.013031390409 + + + 38.0 + + + 2.84210526316 0.603053435115 + + + 2.42105263158 3.26315789474 3.47368421053 1.78947368421 + 0.763358778626 0.335877862595 0.427480916031 0.854961832061 + + + 131.0 + + + 16.0 82.0 0.173333333333 6.0 10.0 1.0 + + + 0.0 0.992366412214 + + + 0.560466050623 + + + 0.774305555556 0.434343434343 0.787878787879 0.272727272727 + 0.809375 0.493939393939 0.90303030303 0.284848484848 0.809027777778 + 0.481481481481 0.895622895623 0.323232323232 0.290625 + 0.406060606061 0.627272727273 0.415151515152 + + + 0.671875 0.703125 0.514705882353 0.171875 0.640625 0.573529411765 + 0.21875 0.0 0.8625 0.825 0.929411764706 0.05 0.9625 0.905882352941 + 0.725 0.105882352941 0.8 0.825 0.929411764706 0.0 0.925 + 0.870588235294 0.6125 0.0 0.75 0.8625 0.988235294118 0.0 0.875 + 0.941176470588 0.5625 0.0 0.703125 0.734375 0.911764705882 0.0 + 0.875 0.882352941176 0.625 0.0 0.8 0.9625 0.952941176471 0.0 0.875 + 0.941176470588 0.7 0.0 0.5375 0.625 0.788235294118 0.8375 0.975 + 0.976470588235 0.825 0.0 0.0 0.0 0.0 0.0 0.1375 0.411764705882 + 0.5875 0.282352941176 + + + 0.538644842472 0.177201119927 0.0135981568888 0.00955416111915 + 0.210650488107 0.468208095657 0.0739206174871 0.0639245012435 + 0.0322934657411 0.0111800605931 0.0590630848644 0.482395346156 + 0.246771655775 0.0246695719753 + + + + + + + + + 3 1 2 11 1 5 1 4 3 3 2 0 + + + + 36.0 + + + 1.0 + + + 24.0 + + + 1.16666666667 + + + 1.0 + + + 0.416666666667 0.516666666667 0.0830439814815 0.0865162037037 + -0.017650462963 0.00284490152257 0.0021361371294 -0.00684154518404 + 0.0042624303089 + + + 6.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 6.0 + + + 1.0 3.0 0.333333333333 0.0 1.0 1.0 + + + 0.0 0.833333333333 + + + 0.666666666667 + + + 0.0 1.0 1.0 0.5 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.75 0.5 0.0 + + + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 + + + 0.263173453962 0.0723562490069 0.0668913932621 0.0995449578422 + 0.0882926955326 0.031941323392 0.0578295007877 0.117978467774 + 0.0332087118193 0.0367741325368 0.119882595745 0.105095802897 + 0.0906876801266 0.0929774592983 + + + + + + + + + 0 2 5 2 5 4 4 6 1 6 1 6 + + + + 42.0 + + + 1.16666666667 + + + 26.0 + + + 1.15384615385 + + + 1.08695652174 + + + 0.455128205128 0.630769230769 0.14070323168 0.0878470641784 + 0.0607646791079 0.0151819885435 -0.0152266212552 -0.00429504017818 + -0.0137812080537 + + + 7.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 6.0 + + + 1.0 3.0 0.0 0.0 2.0 1.0 + + + 0.0 0.833333333333 + + + 0.619047619048 + + + 1.0 1.0 0.0 0.0 0.5 0.75 1.0 1.0 0.0 0.25 1.0 1.0 0.0 0.0 1.0 1.0 + + + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 + + + 0.315682906137 0.185335266868 0.122368332252 0.13735054874 + 0.121804741956 0.13495519462 0.114728945737 0.113749278378 + 0.0905278536737 0.131226587503 0.00580340187598 0.0312594443441 + 0.116088483726 0.0743109414501 + + + + + + + + + 33 1 73 1 72 2 72 2 73 1 72 2 72 2 72 2 57 8 6 3 46 28 42 2 1 5 1 23 + 41 33 41 33 41 33 41 32 42 32 42 33 41 3 3 27 41 3 3 27 41 33 41 33 + 41 33 41 33 41 33 41 33 34 2 5 34 33 1 5 36 32 1 5 36 31 3 4 36 30 4 + 4 36 30 5 4 35 31 3 6 33 32 2 7 32 33 2 7 32 33 2 7 32 33 2 7 32 33 2 + 7 32 32 3 7 32 32 3 7 32 32 3 7 32 32 3 8 31 22 1 8 5 7 32 9 26 7 67 + 7 66 8 66 8 67 7 67 7 67 7 67 7 67 7 18 3 46 7 4 11 2 10 40 7 3 12 1 + 12 39 7 2 27 38 7 2 27 38 8 2 26 38 8 2 26 39 7 2 26 38 8 2 26 38 8 2 + 26 38 8 2 26 39 35 37 37 37 37 39 36 4 1 33 36 38 36 38 36 38 36 38 + 36 38 36 38 36 38 36 38 36 38 36 38 36 39 35 39 35 39 35 39 35 39 35 + 39 35 39 35 19 1 19 35 13 14 12 35 6 29 4 35 4 31 5 34 5 29 7 35 1 32 + 5 69 6 34 2 33 4 34 4 33 3 72 1 73 1 73 1 2 0 + + + + 6956.0 + + + 0.787234042553 + + + 3108.0 + + + 0.150579150579 + + + 1.3592920354 + + + 0.499034749035 0.510147244018 0.130746946119 0.14170898143 + 0.0880465064746 4.41112880083e-05 -0.00220448206768 + -0.00288991326139 -0.00190122934662 + + + 74.0 + + + 0.337837837838 0.489361702128 + + + 0.27027027027 0.378378378378 0.108108108108 0.486486486486 + 0.212765957447 0.808510638298 0.595744680851 0.340425531915 + + + 94.0 + + + 6.0 17.0 0.220472440945 5.0 2.0 3.0 + + + 0.0 0.989361702128 + + + 0.446808510638 + + + 0.54347826087 0.900462962963 0.200483091787 0.0 0.560640732265 + 0.90350877193 0.384439359268 0.164473684211 0.0 0.233796296296 + 0.997584541063 0.56712962963 0.0 0.296052631579 0.805491990847 + 0.581140350877 + + + 0.0909090909091 0.833333333333 0.888888888889 0.712962962963 + 0.414141414141 0.0555555555556 0.0 0.0 0.181818181818 1.0 1.0 1.0 + 0.363636363636 0.0 0.0 0.0 0.252525252525 1.0 1.0 1.0 + 0.363636363636 0.0 0.0 0.0 0.272727272727 0.683333333333 0.8 + 0.833333333333 0.709090909091 0.45 0.4 0.225 0.0 0.0 0.0 + 0.435185185185 1.0 0.990740740741 1.0 0.194444444444 0.0 0.0 0.0 + 0.5 1.0 1.0 1.0 0.0740740740741 0.0 0.0 0.0 0.509259259259 1.0 1.0 + 1.0 0.12037037037 0.0 0.0 0.225 0.441666666667 0.609090909091 0.65 + 0.758333333333 0.441666666667 + + + 0.470174379566 0.156956131284 0.018050874945 0.01086916429 + 0.0914009507314 0.335615863838 0.0648251696263 0.075231782405 + 0.0555703607123 0.0112555437876 0.10827582119 0.26907316408 + 0.115169961247 0.0436098561132 + + + + + + + + + 133 2 139 2 139 3 126 1 11 3 124 5 1 4 4 3 99 3 1 5 4 4 1 2 3 14 2 3 + 99 10 1 9 3 19 10 2 87 20 3 19 10 2 87 21 2 19 7 5 87 21 2 19 7 8 85 + 20 2 19 7 9 84 20 2 19 7 10 84 2 3 14 2 19 7 10 84 2 3 15 1 19 7 14 + 80 2 3 35 7 16 77 4 2 35 7 16 77 5 1 35 7 16 77 41 7 17 76 41 7 18 75 + 41 7 18 75 41 7 18 75 41 7 20 74 40 7 17 3 2 72 41 6 16 4 5 69 19 2 + 19 12 13 2 8 66 41 12 12 4 8 64 41 7 2 6 11 6 6 62 41 6 4 2 15 73 41 + 6 10 1 8 1 2 72 41 6 18 76 41 6 18 76 41 6 18 76 41 6 18 77 40 7 18 + 76 18 1 21 6 19 76 17 3 20 6 20 75 16 4 20 8 19 53 3 18 16 4 20 6 29 + 45 4 17 16 4 9 3 1 1 6 6 30 45 3 2 4 11 19 1 20 7 29 46 10 9 41 6 29 + 44 2 4 7 2 47 5 3 1 15 3 10 50 5 1 26 1 21 5 20 1 13 48 4 4 46 6 19 1 + 16 46 2 4 12 2 33 6 19 1 17 51 12 2 22 7 4 5 30 1 11 11 4 29 16 4 1 5 + 1 6 4 10 3 5 30 6 1 2 10 1 6 32 13 33 2 5 30 10 2 3 1 5 6 5 2 23 14 + 33 2 5 3 7 23 8 5 7 13 19 16 33 2 5 2 7 24 12 2 7 6 25 16 33 2 5 3 6 + 20 20 10 24 18 33 2 5 3 7 18 21 13 1 2 19 18 32 3 4 3 8 7 3 5 26 18 + 14 19 2 1 27 4 4 3 11 5 35 21 7 24 27 5 3 3 11 13 30 18 7 24 28 3 4 2 + 13 1 1 12 34 1 10 1 1 1 1 26 30 3 4 3 6 11 2 8 45 30 29 4 1 8 8 6 58 + 28 28 4 2 6 12 2 60 27 28 5 1 6 77 25 28 4 2 5 78 22 30 4 1 6 78 4 2 + 16 30 3 2 6 78 4 1 17 30 3 1 7 78 3 1 15 33 3 1 6 80 18 33 3 3 3 80 + 19 33 3 3 3 79 21 32 3 4 2 80 20 32 3 4 2 80 20 32 3 3 3 81 19 32 3 3 + 3 81 19 32 3 3 3 81 19 32 3 3 3 81 19 32 3 4 2 81 19 32 4 3 2 82 18 + 32 4 3 1 84 17 32 4 3 2 84 17 32 3 3 2 84 1 1 15 32 3 3 2 84 17 33 2 + 2 3 84 17 33 2 3 2 87 3 2 9 33 2 3 2 95 6 34 1 3 2 97 4 34 1 3 2 98 3 + 34 1 3 2 99 2 34 1 3 2 139 2 139 2 139 2 139 2 139 2 139 3 138 3 138 + 3 139 2 139 2 139 2 139 2 139 2 139 2 139 2 139 2 139 2 139 3 139 2 + 139 2 139 2 139 2 139 2 139 2 139 2 139 2 139 2 140 2 139 2 139 3 138 + 3 138 3 136 6 136 5 137 4 137 5 136 5 137 4 137 5 136 3 139 1 140 1 + 140 1 140 1 132 0 + + + + 18471.0 + + + 1.07633587786 + + + 3904.0 + + + 0.308145491803 + + + 0.75691318328 + + + 0.556978190867 0.313849700504 0.560309225012 0.13196831271 + -0.0630195096313 -0.215166104103 -0.0225576975748 0.00422910204667 + 0.0402710419682 + + + 141.0 + + + 1.10638297872 1.70229007634 + + + 2.29787234043 0.45390070922 1.04964539007 0.595744680851 + 1.74045801527 3.63358778626 1.34351145038 0.0 + + + 131.0 + + + 20.0 99.0 0.20987654321 18.0 1.0 10.0 + + + 0.0 0.992366412214 + + + 0.211358345515 + + + 0.333928571429 0.577489177489 0.0683982683983 0.0753246753247 0.0 + 0.124675324675 0.0 0.0 0.219642857143 0.494372294372 0.270995670996 + 0.0 0.730034722222 0.436026936027 0.0538720538721 0.0 + + + 0.275735294118 0.805147058824 0.854671280277 0.382352941176 + 0.154411764706 0.128027681661 0.121323529412 0.186851211073 + 0.00347222222222 0.274305555556 0.640522875817 0.416666666667 0.0 + 0.0 0.0 0.0 0.0 0.0 0.114186851211 0.0330882352941 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0588235294118 0.291666666667 0.0 0.0 0.0 0.0 0.0 0.0 + 0.137254901961 0.295138888889 0.0902777777778 0.0 0.0 0.0 + 0.356617647059 0.547794117647 0.636678200692 0.955882352941 + 0.974264705882 0.076124567474 0.0 0.0 0.625 0.993055555556 + 0.777777777778 0.0902777777778 0.0138888888889 0.016339869281 0.0 + 0.0 0.552083333333 0.75 0.653594771242 0.1875 0.170138888889 + 0.0196078431373 0.0 0.0 + + + 0.561259047893 0.126953213958 0.150092813243 0.0310401383935 + 0.283911592323 0.36097413874 0.00368390027231 0.406395831274 + 0.181152013241 0.0276113509079 0.0665358554459 0.406927712942 + 0.116157454543 0.0313899959283 + + + + + + + + + 73 3 76 1 77 2 76 2 75 3 75 3 75 3 75 3 41 1 33 2 42 3 12 1 3 2 1 3 1 + 3 4 3 42 36 42 36 42 36 42 36 42 36 42 36 42 36 42 36 42 36 42 36 42 + 36 42 36 42 36 42 36 42 36 42 36 42 36 42 35 43 35 43 35 43 30 48 31 + 47 34 44 35 43 35 43 35 43 35 43 35 7 1 35 35 7 2 34 35 7 1 35 7 1 27 + 7 2 34 7 1 27 7 2 34 35 7 3 33 35 7 8 28 35 7 16 19 36 7 71 7 70 8 70 + 8 70 8 67 11 61 17 49 28 39 39 38 40 38 40 38 40 38 40 38 40 39 37 42 + 36 42 37 41 37 40 39 39 39 38 40 38 40 38 40 7 1 30 40 39 36 1 2 39 + 34 3 3 38 34 3 3 38 34 2 4 38 40 38 40 38 40 38 40 38 40 38 40 38 41 + 37 41 37 41 6 1 30 41 5 3 29 41 4 4 29 42 2 4 30 42 2 5 8 1 20 41 3 5 + 8 1 20 41 2 13 1 1 20 41 1 30 6 40 2 30 5 41 3 30 4 43 1 31 3 38 0 + + + + 7254.0 + + + 0.838709677419 + + + 3167.0 + + + 0.138932743922 + + + 0.694013303769 + + + 0.493444982551 0.531654562678 0.133887117689 0.156294411343 + -0.0989004281806 8.44299877316e-05 0.00698352226352 + -0.00492166861062 -0.00326157749111 + + + 78.0 + + + 0.230769230769 0.376344086022 + + + 0.307692307692 0.0 0.205128205128 0.410256410256 0.258064516129 + 0.430107526882 0.0430107526882 0.731182795699 + + + 93.0 + + + 3.0 13.0 0.195744680851 4.0 2.0 2.0 + + + 0.0 0.989247311828 + + + 0.43658671078 + + + 0.0 0.0800915331808 0.890160183066 0.620614035088 0.0 + 0.00217391304348 1.0 0.854166666667 0.576659038902 0.995423340961 + 0.350114416476 0.0986842105263 0.552173913043 0.786956521739 + 0.171739130435 0.01875 + + + 0.0 0.0 0.0 0.212962962963 0.712962962963 0.838383838384 + 0.675925925926 0.324074074074 0.0 0.0 0.0 0.1 1.0 0.990909090909 + 1.0 0.458333333333 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.641666666667 0.0 + 0.0 0.0 0.00833333333333 1.0 1.0 1.0 0.775 0.131313131313 1.0 1.0 + 0.981481481481 0.638888888889 0.20202020202 0.222222222222 + 0.194444444444 0.1 1.0 1.0 1.0 0.533333333333 0.0 0.0 0.0 + 0.163636363636 1.0 1.0 1.0 0.466666666667 0.0 0.0 0.0 + 0.290909090909 0.7 0.545454545455 0.6 0.191666666667 0.0 0.075 0.0 + + + 0.497540502178 0.156885626609 0.0309671032209 0.0227457902812 + 0.112722417145 0.378047708175 0.0541089067785 0.0369836430305 + 0.0345109829213 0.021083251981 0.155730678012 0.357040895969 + 0.106802639756 0.0329849736819 + + + + + + + + + 5 2 27 9 22 8 23 8 26 4 27 3 27 4 52 1 29 6 3 1 21 5 1 5 20 4 1 3 1 1 + 19 11 18 13 17 13 18 12 18 12 17 13 18 12 18 13 18 11 19 5 25 5 25 5 + 25 5 25 5 25 4 26 11 19 11 19 11 18 13 17 13 17 13 19 12 18 8 1 3 19 + 7 235 1 28 3 27 3 27 3 27 3 28 1 29 2 27 4 27 1 29 3 27 3 27 4 26 4 + 26 5 1 2 22 10 20 10 20 11 16 15 15 1 1 13 15 15 14 16 14 16 13 17 13 + 2 4 11 13 2 4 11 13 2 4 12 18 11 19 8 1 2 19 7 20 1 2 7 17 18 12 18 + 12 18 12 18 12 17 13 17 11 20 10 3 2 1 1 14 17 13 18 6 3 3 7 1 1 1 8 + 7 2 3 7 4 1 2 3 8 2 2 7 9 1 8 9 21 12 19 12 18 12 18 12 19 12 18 12 + 18 12 18 11 9 2 7 12 10 1 7 12 9 2 7 12 9 3 5 13 8 4 2 16 7 5 2 17 8 + 3 2 17 8 3 3 16 8 3 3 16 1 2 4 4 3 16 2 1 4 4 3 16 2 2 3 4 3 15 3 2 3 + 4 3 15 8 4 3 15 8 4 3 15 8 4 3 16 4 1 2 4 3 16 7 4 3 16 2 2 3 4 3 16 + 7 4 3 16 2 1 4 5 2 17 1 1 4 5 2 17 1 1 4 4 4 18 4 4 5 15 1 1 6 2 7 12 + 9 2 8 11 19 11 21 1 1 7 2 1 20 10 20 10 20 10 20 10 20 10 7 1 12 8 8 + 3 11 8 8 3 11 8 8 3 10 9 8 3 11 8 9 2 10 9 9 2 6 2 2 9 1 1 7 2 5 3 3 + 8 1 2 19 8 1 1 21 10 20 10 19 12 19 10 20 12 1 5 12 18 12 19 11 18 12 + 18 12 18 7 1 4 18 7 1 2 21 6 2 1 21 11 18 12 13 2 3 12 10 20 11 5 2 + 13 10 1 1 2 1 1 1 13 12 2 5 11 19 11 19 1 1 9 26 4 + + + + 4770.0 + + + 0.188679245283 + + + 1815.0 + + + 0.39173553719 + + + 1.05606689735 + + + 0.535233209841 0.579694528716 0.0197184133926 1.00257647126 + 0.0434283105879 0.00028151596345 0.00473554237843 0.00623991274242 + -0.422140409968 + + + 30.0 + + + 4.16666666667 0.528301886792 + + + 1.33333333333 7.2 4.13333333333 2.8 0.125786163522 0.176100628931 + 1.08176100629 0.679245283019 + + + 159.0 + + + 7.0 54.0 0.25748502994 12.0 11.0 2.0 + + + 0.0 0.993710691824 + + + 0.380503144654 + + + 0.029304029304 0.0 0.325 0.0607142857143 0.625 0.390625 0.653125 + 0.534375 0.373626373626 0.585714285714 0.685714285714 + 0.771428571429 0.0 0.184375 0.084375 0.746875 + + + 0.0 0.0 0.0 0.0 0.05 0.0 0.0 0.0 0.105263157895 0.0 0.0 0.0 0.6125 + 0.4875 0.2125 0.0 0.618421052632 0.425 0.0 0.425 0.8125 0.825 0.825 + 0.0875 0.697368421053 0.7625 0.425 0.7125 0.675 0.3 0.9375 0.2875 + 0.473684210526 0.55 0.266666666667 1.0 0.966666666667 + 0.633333333333 0.733333333333 0.333333333333 0.197368421053 0.3375 + 0.125 0.975 0.9 0.3 1.0 0.9 0.0 0.0 0.025 0.7125 0.275 0.0125 + 0.8875 0.9 0.0 0.0 0.0 0.0 0.05 0.0 0.425 0.775 + + + 0.546229209099 0.197232719263 0.152157629817 0.0537859474851 + 0.476931712126 0.374858506998 0.147578696144 0.132222396702 + 0.0824625392821 0.0803971401726 0.440673829802 0.394200178996 + 0.285426345822 0.120117797721 + + + + + + + + + 4 1 40 1 40 1 32 1 7 1 32 1 7 1 32 1 7 1 31 2 7 1 31 2 7 2 12 20 7 2 + 4 29 6 35 6 34 7 35 5 36 5 35 6 18 1 16 6 18 1 1 1 15 6 17 1 17 6 1 5 + 29 6 1 3 31 5 36 5 28 14 27 5 3 5 37 3 121 1 40 2 39 2 38 3 38 3 38 4 + 36 5 36 5 36 5 36 5 36 6 35 6 35 6 35 6 35 6 35 6 35 7 34 7 34 7 34 7 + 34 6 35 7 35 6 34 7 17 15 2 7 5 28 1 7 3 30 1 7 2 39 1 41 1 40 1 40 1 + 40 1 40 1 34 0 + + + + 2419.0 + + + 0.694915254237 + + + 1518.0 + + + 0.171277997365 + + + 0.993333333333 + + + 0.516650197628 0.484871200763 0.072652832678 0.101299647743 + -0.00250567084766 0.000166652808577 -0.000421503877829 + -0.000228903959071 -0.000228447978028 + + + 41.0 + + + 0.536585365854 0.28813559322 + + + 0.878048780488 0.0 0.19512195122 1.07317073171 0.474576271186 + 0.474576271186 0.0 0.203389830508 + + + 59.0 + + + 1.0 21.0 0.24043715847 2.0 4.0 3.0 + + + 0.0 0.983050847458 + + + 0.627532038032 + + + 0.307142857143 0.693333333333 0.646666666667 0.313333333333 + 0.442857142857 1.0 1.0 0.4 0.5 0.973333333333 1.0 0.346666666667 + 0.435064935065 0.806060606061 0.830303030303 0.30303030303 + + + 0.2 0.257142857143 0.3 0.714285714286 0.457142857143 0.15 + 0.0285714285714 0.0 0.0 0.771428571429 0.8 1.0 1.0 1.0 1.0 0.275 + 0.0 0.857142857143 1.0 1.0 1.0 1.0 0.857142857143 0.0 0.0 + 0.914285714286 1.0 1.0 1.0 1.0 0.857142857143 0.0 0.0 1.0 0.9 1.0 + 1.0 1.0 0.771428571429 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.714285714286 + 0.0 0.0 1.0 0.8 1.0 1.0 1.0 0.714285714286 0.0 0.166666666667 + 0.595238095238 0.541666666667 0.952380952381 0.714285714286 + 0.666666666667 0.571428571429 0.0208333333333 + + + 0.508639510677 0.0373059922052 0.00311372009651 0.00297901621151 + 0.123671252974 0.0674212716118 0.0466666709405 0.0121768778649 + 0.0107960674616 0.0077752021406 0.199779483823 0.0236185757016 + 0.106083197693 0.034520841455 + + + + + + + + + 38 2 29 5 5 3 13 21 4 4 3 39 2 40 2 40 2 40 2 40 2 40 2 40 2 40 2 40 + 2 40 2 40 2 40 2 40 3 39 3 39 3 39 3 39 3 39 3 39 3 39 3 2 6 26 16 24 + 10 3 2 30 7 4 1 34 4 2 5 31 4 3 2 33 3 39 3 39 4 38 4 38 4 38 4 38 4 + 38 4 38 4 38 5 37 5 37 5 37 5 37 5 37 5 37 5 37 6 36 6 3 25 8 6 1 29 + 6 36 6 36 6 37 5 37 5 37 5 37 5 36 8 33 9 33 8 35 6 36 7 36 6 36 2 5 + 0 + + + + 2562.0 + + + 0.688524590164 + + + 1754.0 + + + 0.148802736602 + + + 1.05539677826 + + + 0.516158188948 0.413169897377 0.0738311426179 0.114099452541 + 0.0153211602848 -0.00173566360451 0.00758007404666 0.00147784589394 + 0.00783838965345 + + + 42.0 + + + 0.547619047619 0.147540983607 + + + 1.2380952381 0.0 0.0 0.952380952381 0.131147540984 0.327868852459 + 0.0 0.131147540984 + + + 61.0 + + + 3.0 11.0 0.181818181818 3.0 10.0 2.0 + + + 0.0 0.983606557377 + + + 0.684621389539 + + + 0.793333333333 0.733333333333 0.76 0.0625 0.860606060606 1.0 1.0 + 0.0625 0.893333333333 1.0 1.0 0.0625 0.721212121212 0.721212121212 + 0.818181818182 0.573863636364 + + + 0.542857142857 1.0 0.828571428571 0.55 0.625 0.4 0.075 0.0 + 0.571428571429 1.0 1.0 0.6 1.0 1.0 0.175 0.0 0.685714285714 1.0 1.0 + 1.0 1.0 1.0 0.125 0.0 0.714285714286 1.0 1.0 1.0 1.0 1.0 0.125 0.0 + 0.714285714286 1.0 1.0 1.0 1.0 1.0 0.125 0.0 0.828571428571 1.0 1.0 + 1.0 1.0 1.0 0.125 0.0 0.628571428571 1.0 1.0 0.9 1.0 1.0 0.45 0.375 + 0.595238095238 0.666666666667 0.666666666667 0.416666666667 + 0.666666666667 0.666666666667 0.666666666667 0.75 + + + 0.550289008307 0.0544757788161 0.0502850814535 0.0376631405638 + 0.257265015145 0.0782518101298 0.05417774787 0.0175695086994 + 0.0235740929293 0.0387047723784 0.116383473985 0.0668477941201 + 0.125814170193 0.0436920014837 + + + + + + + + + 2 1 69 3 68 2 69 3 68 4 67 5 65 6 65 4 68 3 30 1 37 3 29 1 38 3 29 2 + 37 3 12 15 1 4 36 3 9 23 36 35 36 35 37 33 38 34 37 34 36 35 36 35 36 + 35 36 35 36 35 36 35 36 35 37 34 36 35 36 35 35 36 35 36 35 36 36 35 + 36 35 36 35 36 3 5 10 3 14 36 1 1 1 2 1 2 10 3 14 36 35 36 35 36 35 + 36 35 36 35 36 35 31 1 4 35 31 1 4 35 31 1 4 35 31 1 4 34 32 1 4 35 + 31 1 4 35 31 1 4 35 30 3 3 35 11 13 6 3 3 35 5 28 3 68 3 68 3 19 3 1 + 8 37 3 14 18 36 3 8 24 36 4 4 27 36 4 4 27 36 4 4 27 36 4 4 28 35 4 4 + 27 37 3 5 25 38 2 6 25 39 1 6 25 38 2 6 25 38 2 7 24 38 2 6 25 38 2 6 + 25 37 3 7 25 36 4 5 26 36 4 5 26 36 4 5 26 36 4 5 26 4 1 2 1 28 4 5 + 26 3 3 30 5 4 27 2 3 30 5 4 26 36 5 4 27 35 5 4 27 35 5 4 27 35 4 5 + 27 2 1 32 4 5 27 2 1 32 5 4 27 35 5 4 27 35 5 4 27 35 5 4 27 35 5 4 + 27 35 6 3 27 35 6 3 27 36 6 1 28 35 6 3 27 35 6 3 27 35 6 3 27 16 10 + 7 1 1 6 3 27 8 22 3 9 2 27 4 38 2 26 4 39 2 26 3 32 2 6 2 26 2 34 1 6 + 2 69 2 69 2 69 2 69 2 69 2 70 1 70 1 70 1 64 0 + + + + 7526.0 + + + 0.669811320755 + + + 3227.0 + + + 0.17260613573 + + + 1.28612836439 + + + 0.465832927531 0.500264140363 0.128043326852 0.168886288956 + 0.0808469498389 0.00334990667099 -0.00806664601791 0.00753579899308 + -0.00644951706865 + + + 71.0 + + + 0.521126760563 0.745283018868 + + + 1.07042253521 0.394366197183 0.394366197183 0.169014084507 + 0.22641509434 0.641509433962 1.16981132075 0.943396226415 + + + 106.0 + + + 9.0 40.0 0.14899713467 3.0 3.0 3.0 + + + 0.0 0.990566037736 + + + 0.428780228541 + + + 0.570135746606 0.925925925926 0.343891402715 0.156862745098 + 0.583333333333 0.987654320988 0.126068376068 0.0432098765432 + 0.0299145299145 0.16049382716 0.982905982906 0.497942386831 0.0 + 0.139917695473 0.905982905983 0.425925925926 + + + 0.413461538462 0.836538461538 0.826923076923 0.875 0.682692307692 + 0.615384615385 0.442307692308 0.232142857143 0.042735042735 1.0 + 0.982905982906 1.0 0.145299145299 0.0 0.0 0.0 0.153846153846 1.0 + 0.948717948718 1.0 0.034188034188 0.0 0.0 0.0 0.179487179487 1.0 + 1.0 1.0 0.264957264957 0.205128205128 0.111111111111 + 0.0634920634921 0.017094017094 0.102564102564 0.111111111111 + 0.253968253968 1.0 0.931623931624 0.982905982906 0.103174603175 0.0 + 0.0 0.0 0.261904761905 1.0 1.0 0.974358974359 0.0 0.0 0.0 0.0 + 0.269841269841 1.0 1.0 0.940170940171 0.0 0.0 0.0 0.0 + 0.269841269841 0.837606837607 0.786324786325 0.777777777778 + 0.047619047619 + + + 0.469556810936 0.136306444347 0.014639508821 0.0403690144013 + 0.0704913804293 0.324735665953 0.0620629211452 0.0313366410285 + 0.0924744276822 0.015573784821 0.179657079227 0.317449645771 + 0.130929848708 0.0383916601146 + + + + + + + + + 95 2 3 3 106 27 87 3 2 30 87 35 87 35 87 35 87 34 88 35 87 35 87 35 + 87 35 87 35 87 35 87 35 87 35 87 35 87 35 87 35 88 34 88 34 88 34 88 + 4 1 22 18 2 75 3 3 28 10 5 73 1 1 1 7 25 9 6 74 1 6 26 9 7 71 34 10 8 + 70 35 9 10 68 35 9 11 68 34 9 15 64 34 9 15 74 24 9 15 64 4 5 13 1 11 + 9 16 63 4 2 1 2 22 2 1 9 16 63 34 9 17 62 34 9 17 62 34 9 18 61 34 9 + 16 2 1 61 7 1 25 9 17 63 33 8 17 7 1 56 33 8 20 2 6 53 33 8 32 49 22 + 1 10 9 31 49 14 11 9 8 19 2 6 53 6 19 2 4 3 8 19 2 6 54 1 23 2 5 2 8 + 19 7 2 77 2 6 1 7 21 7 1 77 1 7 1 7 20 8 4 90 20 9 5 88 20 11 3 88 20 + 27 6 69 21 6 3 18 6 8 4 55 22 4 2 1 1 9 5 3 12 6 4 54 21 6 4 8 11 2 + 20 50 22 5 4 9 12 3 4 3 2 1 1 2 3 51 31 10 6 75 32 12 2 77 8 1 1 1 1 + 2 7 2 8 2 3 86 13 1 6 3 8 2 5 44 1 39 16 1 3 2 19 40 5 36 16 1 5 2 23 + 33 6 2 1 33 16 10 21 27 12 2 4 31 5 1 1 1 8 8 26 23 19 30 16 9 5 2 9 + 1 9 22 27 7 1 13 17 1 1 9 4 1 13 2 5 21 28 6 1 13 4 7 8 16 12 28 21 1 + 5 6 1 13 3 8 8 18 16 22 21 2 11 13 3 6 10 26 10 21 34 12 3 7 6 2 2 26 + 10 15 1 4 37 10 2 9 5 30 15 3 51 7 2 11 4 29 69 7 3 13 1 31 67 7 3 48 + 1 3 60 7 3 58 2 2 51 6 3 65 21 2 24 8 2 64 20 6 22 8 2 66 18 8 20 8 1 + 68 17 2 27 7 1 70 44 7 2 70 43 7 1 71 41 9 1 78 33 10 1 79 31 11 2 80 + 31 9 2 87 24 9 2 88 24 8 2 91 21 8 2 92 19 103 9 2 9 9 1 93 8 3 7 10 + 1 93 4 7 2 4 1 10 1 93 14 2 2 10 1 92 9 2 4 2 2 10 1 92 9 3 8 9 1 92 + 20 9 1 92 20 9 1 92 20 9 1 93 19 9 1 95 5 4 8 9 2 93 6 4 8 10 1 91 20 + 10 1 91 20 10 1 91 20 10 1 91 20 10 1 91 21 9 1 93 19 9 1 98 14 9 1 + 99 13 9 1 104 8 9 2 104 8 8 2 107 5 8 2 109 3 7 3 110 2 7 3 109 4 6 3 + 108 6 6 2 109 3 8 2 109 2 120 3 2 0 + + + + 14396.0 + + + 1.03389830508 + + + 4059.0 + + + 0.289726533629 + + + 0.95178335535 + + + 0.606262178324 0.44157859605 0.36299447557 0.195934592192 + 0.00659706759327 -0.165555313573 0.057727061031 0.0117436124647 + 0.00570945820247 + + + 122.0 + + + 1.77049180328 1.64406779661 + + + 1.47540983607 1.37704918033 1.6393442623 2.55737704918 + 0.474576271186 2.27118644068 2.40677966102 1.28813559322 + + + 118.0 + + + 20.0 121.0 0.244309559939 22.0 2.0 6.0 + + + 0.0 0.991525423729 + + + 0.281953320367 + + + 0.0563218390805 0.707777777778 0.247126436782 0.0444444444444 0.0 + 0.121505376344 0.225806451613 0.0 0.337931034483 0.164444444444 + 0.468965517241 0.0 0.718576195773 0.361290322581 0.650723025584 + 0.413978494624 + + + 0.0 0.217777777778 0.88 0.906666666667 0.519047619048 0.12 + 0.0666666666667 0.111111111111 0.0 0.0 0.404444444444 0.64 + 0.37619047619 0.0 0.0 0.0 0.0 0.0 0.0266666666667 0.231111111111 + 0.466666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.229166666667 0.46875 0.0 + 0.0 0.0 0.0 0.0 0.0 0.115555555556 0.27619047619 0.128888888889 0.0 + 0.0 0.695238095238 0.657777777778 0.533333333333 0.00888888888889 + 0.87619047619 0.608888888889 0.0 0.0 0.952380952381 1.0 0.88 0.0 + 0.7 0.853333333333 0.48 0.102222222222 0.459821428571 + 0.491666666667 0.5375 0.0375 0.316964285714 0.729166666667 + 0.608333333333 0.45 + + + 0.465364937777 0.0733915173513 0.12958588992 0.134460045321 + 0.0609442350577 0.124354670758 0.00741121107291 0.287929153408 + 0.402173163087 0.0372341349666 0.18713919636 0.106079767881 + 0.0440595390783 0.0275517682781 + + + + + + + + + 38 1 150 1 150 1 150 1 150 1 150 1 115 1 34 1 115 1 34 1 115 1 34 2 + 114 1 33 2 115 1 32 3 115 1 12 2 2 12 1 6 115 2 3 31 115 36 115 36 + 115 36 115 36 115 36 115 37 114 37 114 36 30 1 84 36 29 3 83 37 28 4 + 82 37 26 11 76 40 24 9 76 41 26 7 77 41 26 8 76 41 25 10 75 41 24 11 + 76 40 23 12 76 6 1 32 24 8 1 3 77 39 23 15 74 38 24 15 1 1 73 36 25 + 17 73 36 25 18 72 36 25 18 3 1 68 37 23 23 68 37 23 24 67 36 24 25 67 + 35 24 26 65 36 23 30 62 36 23 31 61 36 23 32 61 35 22 33 61 36 21 14 + 1 19 60 35 22 8 1 25 60 35 22 35 59 35 22 36 58 35 22 37 57 35 23 31 + 1 4 57 35 23 37 56 35 23 35 58 16 18 2 23 27 3 1 61 7 27 2 23 27 66 2 + 32 1 23 1 3 24 9 1 55 1 33 1 30 22 1 1 6 1 55 1 33 1 31 23 2 1 3 1 20 + 2 99 23 1 6 20 2 99 27 23 3 97 30 20 4 97 30 20 5 96 29 20 7 95 29 20 + 9 93 29 19 11 90 9 2 20 19 12 85 13 5 16 20 12 85 13 5 16 20 13 85 4 + 1 6 4 18 19 14 100 18 19 14 97 1 2 17 20 10 94 4 2 21 19 11 95 3 3 20 + 19 11 94 27 19 11 95 26 19 11 96 2 7 15 19 12 101 19 19 13 100 14 1 4 + 18 14 5 1 95 2 2 3 1 10 18 20 6 1 93 2 3 3 1 3 18 22 1 2 1 3 91 3 2 8 + 18 30 88 5 1 9 18 30 89 14 18 31 88 14 17 33 86 17 14 13 9 16 84 15 + 13 14 3 3 4 15 87 11 14 14 3 4 2 16 87 10 15 16 1 5 2 16 87 10 14 35 + 3 2 87 8 17 5 1 27 4 3 87 6 19 3 2 7 5 15 2 5 88 4 21 11 5 12 5 5 89 + 2 22 12 3 11 6 5 91 2 18 14 3 12 5 6 90 2 19 12 7 10 4 6 115 9 10 7 4 + 6 121 3 13 3 5 5 122 3 12 1 9 4 136 2 11 2 136 3 6 2 1 2 137 3 6 5 + 138 1 6 6 145 5 147 4 147 4 147 4 148 3 149 1 1352 1 149 3 148 3 148 + 4 146 5 146 6 145 5 146 5 146 5 146 2 1 1 147 1 14 0 + + + + 19026.0 + + + 1.19841269841 + + + 3876.0 + + + 0.245614035088 + + + 1.792147806 + + + 0.448085655315 0.415488132095 0.478661480626 0.154280245139 + 0.225420423903 0.0448334766953 0.033586153846 0.0474498766241 + 0.0212588273272 + + + 151.0 + + + 0.715231788079 1.24603174603 + + + 0.0529801324503 0.556291390728 1.13907284768 1.03311258278 + 0.698412698413 1.5873015873 2.28571428571 0.380952380952 + + + 126.0 + + + 16.0 69.0 0.25 15.0 3.0 4.0 + + + 0.0 0.992063492063 + + + 0.203721223589 + + + 0.596338273758 0.619087837838 0.0 0.0 0.129881154499 0.319901315789 + 0.0517826825127 0.0 0.00509337860781 0.460526315789 0.391341256367 + 0.0 0.0 0.0263157894737 0.567062818336 0.106085526316 + + + 0.185185185185 0.888888888889 0.822916666667 0.329861111111 0.0 0.0 + 0.0 0.0 0.259649122807 1.0 1.0 0.319078947368 0.0 0.0 0.0 0.0 + 0.0771929824561 0.164473684211 0.125 0.0559210526316 0.0 0.0 0.0 + 0.0 0.0 0.266447368421 0.648026315789 0.450657894737 0.214035087719 + 0.0 0.0 0.0 0.0 0.0197368421053 0.6875 0.960526315789 + 0.842105263158 0.434210526316 0.0 0.0 0.0 0.0 0.0131578947368 + 0.180921052632 0.171929824561 0.131578947368 0.0 0.0 0.0 0.0 0.0 + 0.105263157895 0.656140350877 0.855263157895 0.0493421052632 0.0 + 0.0 0.0 0.0 0.0 0.0140350877193 0.713815789474 0.240131578947 + 0.134868421053 + + + 0.511068420013 0.194745515624 0.0886094000731 0.0377857828414 + 0.260277248181 0.424925238789 0.111930315583 0.064194841847 + 0.0559119348987 0.0475449912337 0.108654700839 0.374030227246 + 0.289667959809 0.0633085111847 + + + + + + + + + 1 1 4 2 4 4 2 4 2 2 1 1 2 2 1 1 2 2 1 1 2 4 2 5 1 5 1 2 1 2 1 2 1 1 2 + 2 1 1 2 5 1 5 2 5 1 3 3 1 1 1 2 0 + + + + 108.0 + + + 0.333333333333 + + + 64.0 + + + 0.953125 + + + 0.984905660377 + + + 0.353125 0.534007352941 0.0291709899902 0.347316741943 + 0.0264091491699 0.00139881670475 -0.0024531930685 0.00213916599751 + -0.0250382870436 + + + 6.0 + + + 0.5 0.388888888889 + + + 0.0 0.0 0.0 0.666666666667 0.0 0.666666666667 0.666666666667 0.0 + + + 18.0 + + + 13.0 6.0 0.131578947368 0.0 5.0 2.0 + + + 0.0 0.944444444444 + + + 0.592592592593 + + + 0.75 1.0 1.0 0.4 0.75 0.7 0.625 0.9 0.5 1.0 1.0 1.0 0.0 0.1 0.25 + 0.4 + + + 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.0 0.666666666667 0.5 0.0 1.0 + 0.666666666667 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 0.0 0.0 0.0 0.333333333333 1.0 0.0 1.0 0.333333333333 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + + + 0.411405308253 0.232792189673 0.0575453542827 0.0273227714854 + 0.216303424269 0.334851623038 0.168063913045 0.0254077841747 + 0.0422072848845 0.0469281985155 0.20835778266 0.16522798819 + 0.246015065077 0.121704109558 + + + + + + + + + 1 1 39 1 39 4 20 1 15 27 13 33 7 34 6 34 6 35 5 35 5 36 4 36 4 35 5 + 36 4 36 4 36 4 36 4 36 4 36 4 36 4 36 5 35 5 35 5 36 3 39 1 38 2 38 2 + 38 2 38 3 37 3 36 4 35 5 35 5 36 4 28 1 7 4 28 3 4 5 35 6 35 5 34 6 + 34 6 34 6 34 6 34 6 33 7 16 3 14 7 2 4 9 4 13 8 2 9 2 11 8 8 2 23 6 9 + 2 24 2 12 2 24 2 12 2 24 2 12 2 24 2 13 1 24 2 39 1 39 1 39 1 39 1 11 + 1 27 1 11 1 27 2 10 1 28 1 10 1 28 1 10 1 28 1 10 1 28 1 10 1 39 1 39 + 1 39 1 39 2 28 1 9 2 28 1 8 3 27 2 9 2 28 1 9 2 28 1 9 2 27 2 8 17 13 + 3 7 33 7 33 7 33 7 33 7 33 7 34 6 34 6 34 6 34 6 35 5 35 5 35 4 38 3 + 37 3 36 4 36 4 36 4 37 3 36 5 35 5 34 6 35 5 7 2 26 5 6 3 26 5 6 3 26 + 5 6 3 26 5 35 6 34 6 34 6 34 6 34 6 34 6 34 6 34 6 35 5 35 5 35 5 35 + 5 35 5 35 5 35 5 4 1 30 5 3 19 3 1 9 6 2 25 7 6 2 28 4 6 2 29 4 5 2 + 29 4 5 2 30 3 5 2 30 1 7 2 30 2 7 1 31 2 5 2 31 2 5 2 31 2 6 1 31 2 6 + 1 31 2 6 1 31 2 6 1 31 2 6 2 31 1 6 2 31 1 6 2 31 1 6 2 31 1 6 2 38 2 + 38 2 38 2 38 2 39 1 39 1 33 0 + + + + 5640.0 + + + 0.283687943262 + + + 3119.0 + + + 0.184033344021 + + + 1.03877540413 + + + 0.48254289261 0.430222598818 0.0354893400167 0.458155486003 + 0.00457449012231 7.75265276776e-05 0.000792988817643 + 0.00116813363291 0.00619561108918 + + + 40.0 + + + 1.45 0.368794326241 + + + 1.5 1.1 1.0 2.2 0.0851063829787 0.595744680851 0.198581560284 + 0.595744680851 + + + 141.0 + + + 4.0 25.0 0.216560509554 5.0 4.0 2.0 + + + 0.0 0.992907801418 + + + 0.553014184397 + + + 0.811428571429 0.282857142857 0.791428571429 0.319444444444 + 0.914285714286 0.282857142857 0.925714285714 0.277777777778 + 0.911428571429 0.302857142857 0.914285714286 0.288888888889 + 0.628571428571 0.277142857143 0.588571428571 0.358333333333 + + + 0.729411764706 0.688888888889 0.4 0.211111111111 0.766666666667 + 0.588235294118 0.322222222222 0.0222222222222 0.823529411765 1.0 + 0.541176470588 0.0 0.888888888889 0.917647058824 0.633333333333 0.3 + 0.823529411765 1.0 0.6 0.0 0.888888888889 0.952941176471 + 0.555555555556 0.0 0.823529411765 1.0 0.564705882353 0.0 + 0.866666666667 1.0 0.555555555556 0.0 0.823529411765 1.0 + 0.541176470588 0.0 0.833333333333 1.0 0.555555555556 0.0 + 0.811764705882 1.0 0.705882352941 0.0 0.833333333333 1.0 0.6 0.0 + 0.752941176471 0.955555555556 0.752941176471 0.177777777778 + 0.844444444444 1.0 0.666666666667 0.0 0.2 0.588888888889 0.2 0.0 + 0.122222222222 0.4 0.566666666667 0.2 + + + 0.513309923689 0.189105025563 0.00908013916283 0.00144542129915 + 0.115864832633 0.511382394122 0.0742576521561 0.0359817526903 + 0.027287687017 0.00314544069929 0.247380243848 0.568947783634 + 0.247937597378 0.0208207342856 + + + + + + + + + 38 1 13 2 25 3 12 5 9 1 4 11 12 30 11 31 11 30 12 30 12 18 1 12 11 18 + 1 12 11 30 12 18 1 12 11 31 11 31 11 31 11 31 11 31 11 31 11 31 11 31 + 11 31 11 31 11 31 11 31 11 32 9 33 10 32 10 32 10 32 10 10 2 21 9 18 + 2 12 11 30 11 18 1 13 11 10 1 20 11 15 4 11 12 16 4 10 12 17 3 11 11 + 18 1 12 11 18 1 12 11 17 2 11 12 18 2 10 12 30 12 31 11 31 11 31 12 + 30 12 30 12 2 2 3 8 1 6 8 13 1 2 3 15 8 13 2 1 2 16 8 13 1 2 2 17 7 + 36 6 35 7 35 7 35 7 35 7 35 7 36 6 36 6 35 5 1 1 36 4 1 1 36 4 1 1 36 + 4 1 1 36 4 38 2 40 3 39 1 41 1 41 2 40 2 9 3 28 2 6 24 7 2 1 4 4 40 2 + 39 3 37 5 37 6 36 6 17 2 17 6 17 2 17 6 18 3 15 6 18 1 17 6 36 6 36 6 + 36 6 37 3 40 3 39 3 39 3 39 4 37 5 37 5 37 6 37 6 35 7 3 5 27 7 4 5 + 26 7 6 1 29 6 6 1 29 6 36 6 36 5 37 6 36 6 36 6 36 6 36 6 36 7 35 7 + 35 7 35 7 36 6 36 6 35 7 36 6 36 6 4 4 28 6 3 26 7 6 3 28 5 7 2 29 4 + 7 2 29 4 7 2 30 4 6 2 30 3 7 3 30 2 7 3 30 3 6 3 30 3 6 3 30 3 7 2 30 + 3 7 2 30 2 8 2 40 1 34 0 + + + + 5376.0 + + + 0.328125 + + + 3121.0 + + + 0.174943928228 + + + 0.93509937287 + + + 0.56100686928 0.483894976121 0.0352939806398 0.416408718345 + -0.0152106846611 -0.000800757124815 0.00161355489294 + 0.00379498353088 -0.0316040682884 + + + 42.0 + + + 1.85714285714 0.421875 + + + 0.857142857143 1.52380952381 2.28571428571 2.19047619048 0.28125 + 0.65625 0.3125 0.4375 + + + 128.0 + + + 13.0 60.0 0.192105263158 4.0 7.0 2.0 + + + 0.0 0.9921875 + + + 0.580543154762 + + + 0.0875 0.0 0.646875 0.4125 0.920454545455 0.474431818182 + 0.778409090909 0.551136363636 0.896875 0.3875 0.7875 0.5625 + 0.795454545455 0.698863636364 0.613636363636 0.596590909091 + + + 0.0 0.0 0.0 0.0 0.45 0.55 0.125 0.0 0.15 0.2 0.0 0.0 0.65 0.9375 + 1.0 0.525 0.9 1.0 0.8875 0.0375 0.625 0.925 0.9875 0.0875 0.8125 + 0.979166666667 0.927083333333 0.0416666666667 0.5625 1.0 1.0 0.125 + 0.825 1.0 0.8625 0.0 0.5875 1.0 1.0 0.125 0.8 0.9625 0.6875 0.0 + 0.5625 1.0 1.0 0.125 0.875 1.0 0.95 0.3125 0.675 1.0 1.0 0.15 + 0.59375 0.760416666667 0.78125 0.729166666667 0.322916666667 + 0.53125 0.697916666667 0.53125 + + + 0.375126384505 0.245376464044 0.0585522233863 0.0304169204909 + 0.0117218390095 0.457748620972 0.134772550299 0.1125598347 + 0.0324737912918 0.0371810269553 0.0985078901285 0.280603150071 + 0.297262711373 0.0547188917637 + + + + + + + + + 14 1 30 3 1 1 25 6 24 8 23 2 3 3 23 2 2 5 21 3 1 6 20 4 1 6 20 12 18 + 13 18 14 17 15 15 17 2 4 7 18 1 4 8 23 8 23 8 22 9 22 9 21 9 22 9 1 2 + 19 10 20 9 22 9 22 9 15 1 5 9 22 7 24 7 26 5 25 6 24 7 24 6 24 7 23 7 + 23 8 23 8 22 12 17 16 11 21 8 22 7 23 8 22 7 8 1 14 10 4 3 15 10 3 2 + 16 16 16 15 16 14 17 3 9 2 18 1 8 4 29 1 118 3 27 6 24 6 25 6 25 5 26 + 5 27 3 28 2 29 2 29 2 19 0 + + + + 1953.0 + + + 0.492063492063 + + + 824.0 + + + 0.31432038835 + + + 0.893506493506 + + + 0.466666666667 0.423915596618 0.049984093694 0.20858633485 + -0.0371338604015 0.00175133470917 -0.00552030057546 + -0.000621619981085 0.0381067758424 + + + 31.0 + + + 1.03225806452 0.222222222222 + + + 0.645161290323 1.41935483871 1.29032258065 0.258064516129 + 0.444444444444 0.126984126984 0.190476190476 0.126984126984 + + + 63.0 + + + 4.0 23.0 0.341085271318 3.0 5.0 3.0 + + + 0.0 0.984126984127 + + + 0.42191500256 + + + 0.0 0.321428571429 0.607142857143 0.0357142857143 0.533333333333 + 0.984375 0.8671875 0.3125 0.716666666667 0.9921875 0.484375 + 0.0546875 0.166666666667 0.546875 0.0234375 0.0 + + + 0.0 0.0 0.0 0.208333333333 0.541666666667 0.0416666666667 0.0 0.0 + 0.0 0.0 0.125 0.84375 0.84375 0.84375 0.125 0.0 0.0 0.59375 0.9375 + 1.0 1.0 0.96875 0.03125 0.375 0.5 0.96875 1.0 1.0 0.96875 0.53125 + 0.25 0.59375 0.714285714286 1.0 1.0 1.0 0.78125 0.53125 0.21875 0.0 + 0.214285714286 0.875 1.0 0.96875 0.625 0.0 0.0 0.0 0.0 0.3125 1.0 + 0.84375 0.09375 0.0 0.0 0.0 0.0 0.3125 0.3125 0.03125 0.0 0.0 0.0 + 0.0 + + + 0.646116308716 0.10457953092 0.0711620831419 0.0276826474806 + 0.560749242001 0.234833075185 0.0579110091978 0.0796829958398 + 0.0214365351039 0.0345920588517 0.286290669604 0.281279607577 + 0.098587973342 0.0474509752377 + + + + + + + + + 4 2 29 6 28 5 28 6 27 6 28 6 29 4 29 4 29 5 24 10 22 11 22 11 22 11 + 22 11 22 12 1 1 19 11 1 5 16 18 15 18 15 15 18 17 16 17 17 16 17 2 2 + 12 18 1 2 12 18 1 2 12 4 1 1 3 7 3 2 13 3 5 7 3 2 13 3 1 2 2 8 2 2 3 + 3 7 3 1 3 1 7 9 1 6 3 3 4 1 6 3 1 4 3 5 3 3 4 1 6 8 3 7 1 4 10 8 3 7 + 1 4 10 9 2 7 1 4 10 9 2 6 2 4 9 10 2 12 10 10 1 11 11 10 1 6 3 2 11 5 + 1 2 3 6 3 1 12 8 3 6 16 3 1 1 6 6 17 1 10 5 17 2 10 1 1 2 3 2 12 2 12 + 2 3 2 11 3 10 1 1 2 3 2 10 4 10 4 1 6 9 3 10 1 1 2 1 7 8 3 10 4 1 8 7 + 3 10 9 1 2 8 3 10 12 8 3 7 16 7 3 8 14 8 3 10 12 8 3 9 13 8 3 10 12 8 + 4 10 12 7 4 11 11 7 4 12 10 7 4 13 9 6 5 14 7 8 4 15 6 8 4 1 1 17 2 8 + 4 1 1 3 1 13 3 7 7 1 3 13 2 7 12 3 2 4 1 1 4 6 14 1 1 1 10 6 14 4 9 6 + 11 11 4 7 11 11 5 6 11 4 1 1 1 5 3 7 10 5 3 4 1 1 2 7 6 1 2 8 1 1 2 + 12 11 2 1 3 1 1 3 11 24 9 11 1 6 2 4 2 1 6 11 1 6 4 3 1 1 7 17 1 1 2 + 5 7 19 1 6 7 26 7 27 6 27 6 27 6 27 6 27 6 27 6 28 5 10 3 1 1 13 5 6 + 9 13 5 7 2 1 5 13 5 7 1 3 2 15 5 12 1 15 6 27 5 12 1 15 6 10 3 6 1 7 + 6 6 1 1 1 1 4 5 1 7 6 6 8 5 1 7 6 5 10 3 3 6 7 3 11 2 4 6 8 2 18 5 7 + 5 15 6 6 6 16 5 7 3 19 4 7 2 22 2 7 1 23 2 7 1 23 2 31 3 30 3 28 5 30 + 3 29 4 26 7 19 15 19 14 19 14 18 14 19 6 1 7 20 3 1 9 21 2 2 9 19 5 1 + 9 18 2 6 7 20 1 7 5 20 2 7 4 29 3 1 0 + + + + 4026.0 + + + 0.270491803279 + + + 1771.0 + + + 0.420666290232 + + + 1.23200839071 + + + 0.444187605872 0.508075467472 0.0419927850439 0.535140888615 + 0.0660264826079 0.0010906739571 0.00817035678003 0.00760588489183 + -0.0334756245521 + + + 33.0 + + + 4.0 1.16393442623 + + + 2.90909090909 4.24242424242 6.30303030303 2.54545454545 + 0.754098360656 1.5737704918 1.37704918033 0.885245901639 + + + 122.0 + + + 21.0 92.0 0.251269035533 14.0 11.0 3.0 + + + 0.0 0.991803278689 + + + 0.439890710383 + + + 0.6625 0.548387096774 0.791666666667 0.189516129032 0.620833333333 + 0.350806451613 0.725 0.0725806451613 0.175 0.729838709677 + 0.704166666667 0.33064516129 0.0407407407407 0.139784946237 + 0.440740740741 0.602150537634 + + + 0.366666666667 0.633333333333 0.716666666667 0.765625 + 0.733333333333 0.483333333333 0.116666666667 0.0 0.866666666667 + 0.783333333333 0.6 0.125 0.95 1.0 0.666666666667 0.0 0.583333333333 + 0.883333333333 0.266666666667 0.015625 0.883333333333 + 0.883333333333 0.216666666667 0.0 0.0333333333333 0.983333333333 + 0.783333333333 0.359375 0.366666666667 0.766666666667 + 0.0833333333333 0.0 0.0 0.516666666667 0.633333333333 0.75 + 0.433333333333 0.95 0.3 0.3125 0.0 0.183333333333 0.6 0.921875 0.45 + 0.983333333333 0.233333333333 0.46875 0.0 0.183333333333 + 0.0166666666667 0.59375 0.65 1.0 0.6 0.640625 0.0 0.0 0.0 0.0 0.0 + 0.266666666667 0.426666666667 0.7375 + + + 0.462208942637 0.217926048798 0.0313683954765 0.0232015569478 + 0.309875178354 0.342379762798 0.166145596167 0.137927129894 + 0.0630584528559 0.0307111800811 0.194605171443 0.296367450359 + 0.239534538915 0.139443784378 + + + + + + + + + 43 5 167 12 160 21 151 26 5 1 140 19 1 12 139 33 139 33 140 32 140 32 + 139 33 140 32 140 32 140 32 140 32 140 32 140 32 140 32 140 32 140 32 + 139 33 138 35 138 36 136 36 136 34 138 34 138 34 19 8 112 33 19 8 112 + 34 16 9 113 33 16 4 1 6 112 17 2 14 17 1 4 4 113 17 2 14 16 15 109 32 + 16 16 108 32 16 16 108 32 16 15 109 31 17 15 2 6 101 32 16 16 1 7 100 + 32 16 25 99 32 16 27 97 32 16 28 96 32 15 30 95 32 15 31 94 32 15 32 + 94 31 15 33 93 31 15 34 95 28 15 35 101 21 15 36 106 15 15 36 112 9 + 15 36 113 5 1 2 15 36 113 1 22 29 2 5 114 1 21 28 5 3 114 1 21 29 5 2 + 114 1 22 28 5 2 15 2 97 1 25 24 7 1 14 4 96 1 27 21 22 6 95 1 28 22 + 20 7 94 1 31 19 19 9 93 1 31 19 19 10 92 1 32 18 4 1 15 11 90 1 32 18 + 3 3 13 12 90 1 32 18 3 2 14 13 89 2 30 17 5 2 14 13 89 2 29 18 6 1 14 + 12 90 2 30 17 5 2 14 13 89 2 30 17 5 1 14 14 89 2 29 19 3 2 14 16 87 + 2 26 23 2 2 13 17 87 2 24 29 13 16 53 3 32 2 26 27 13 15 6 1 46 21 14 + 3 27 15 1 10 13 15 6 3 44 27 8 3 27 15 2 9 12 16 3 1 2 4 43 18 1 9 7 + 3 29 24 12 28 41 30 1 3 1 3 31 22 12 29 41 37 31 22 12 28 42 37 32 20 + 13 3 3 23 41 37 33 2 1 17 12 4 1 26 39 37 37 16 11 11 1 21 38 4 2 10 + 1 20 37 15 12 33 38 16 2 19 37 15 12 33 38 37 38 14 12 34 37 37 39 13 + 12 35 36 37 41 11 12 35 36 37 42 10 12 15 2 18 36 38 41 9 12 16 1 19 + 36 38 42 9 11 16 2 17 35 41 42 7 11 18 1 18 34 41 43 6 12 38 33 39 45 + 5 12 6 2 29 34 40 60 6 3 28 2 2 31 40 60 6 3 28 2 2 32 39 59 6 9 23 + 37 37 61 1 1 3 12 1 1 18 37 37 63 6 1 1 11 3 2 10 38 37 61 13 11 11 + 39 37 61 15 6 1 2 10 40 37 61 15 5 14 40 37 61 1 2 10 8 13 40 37 69 2 + 1 5 5 9 2 2 6 7 27 37 73 5 7 1 1 3 11 11 23 7 2 28 87 3 11 15 18 3 2 + 1 7 1 1 2 1 20 79 3 5 3 3 1 7 23 9 18 1 19 81 2 6 1 3 2 7 23 2 5 1 19 + 1 19 89 1 3 2 7 23 1 6 1 39 88 1 2 4 7 39 1 31 87 6 8 71 87 6 8 5 1 + 17 2 46 87 6 9 3 3 14 4 20 1 25 87 6 16 13 3 47 87 6 16 13 4 13 3 3 1 + 4 2 20 87 6 16 13 4 11 5 8 2 20 85 7 10 1 6 13 4 5 13 7 1 20 84 8 10 + 33 11 26 85 7 10 35 19 16 85 6 11 36 23 11 85 6 11 35 27 8 85 6 11 36 + 28 6 86 5 11 36 30 4 86 4 13 35 31 3 89 1 13 35 32 2 103 35 137 35 + 147 11 1 2 160 12 1 10 150 23 147 25 137 3 1 1 1 29 137 35 137 35 137 + 34 138 35 137 7 2 26 137 35 137 35 138 34 138 34 138 35 137 34 138 5 + 3 26 138 4 2 29 137 4 6 23 1 1 138 15 3 9 1 6 143 10 4 15 148 24 154 + 19 160 12 160 13 160 12 161 11 164 9 163 9 167 4 169 2 170 2 131 0 + + + + 26488.0 + + + 1.11688311688 + + + 7015.0 + + + 0.199857448325 + + + 0.915889379807 + + + 0.435102724738 0.491385872477 0.288874581529 0.193722392792 + -0.0643843850885 0.0790735889495 -0.0519666752241 0.0509825897734 + -0.00989187615671 + + + 172.0 + + + 1.25 1.68181818182 + + + 1.95348837209 1.16279069767 0.744186046512 1.13953488372 + 0.545454545455 2.41558441558 3.14285714286 0.545454545455 + + + 154.0 + + + 29.0 123.0 0.263157894737 15.0 0.0 6.0 + + + 0.0 0.993506493506 + + + 0.264836907279 + + + 0.00673194614443 0.0471079308289 0.438800489596 0.599880739416 + 0.711750305998 0.292188431723 0.638922888617 0.0137149672033 + 0.1211750306 0.601073345259 0.0697674418605 0.0 0.0 0.240310077519 + 0.454712362301 0.00954084675015 + + + 0.0 0.0 0.0 0.0 0.0100250626566 0.68671679198 0.719298245614 + 0.311904761905 0.00717703349282 0.0191387559809 0.0 0.179545454545 + 0.409090909091 0.641148325359 0.760765550239 0.613636363636 + 0.934837092732 0.972431077694 0.365914786967 0.354761904762 + 0.992481203008 0.872180451128 0.0 0.0 0.409090909091 0.552631578947 + 0.315789473684 0.143181818182 0.361244019139 0.356459330144 + 0.055023923445 0.0 0.0 0.401002506266 0.689223057644 0.3 0.0 0.0 + 0.0 0.0 0.0 0.0909090909091 0.72966507177 0.686363636364 + 0.272727272727 0.0 0.0 0.0 0.0 0.0 0.0701754385965 0.583333333333 + 0.651629072682 0.0576441102757 0.0 0.0 0.0 0.0 0.0 0.295454545455 + 0.811004784689 0.289473684211 0.0382775119617 0.0 + + + 0.284077593551 0.1112837292 0.116758904248 0.226027001211 + 0.0339434389732 0.170939239194 0.0101623770888 0.0765352286112 + 0.283570621791 0.0913518427369 0.0408032136735 0.116183316973 + 0.142924661912 0.129884042281 + + + + + + + + + 1 2 2 3 2 4 1 4 1 14 2 3 2 3 2 2 2 0 + + + + 50.0 + + + 0.5 + + + 35.0 + + + 0.971428571429 + + + 0.948275862069 + + + 0.421428571429 0.492063492063 0.0371778425656 0.178425655977 + 0.0120116618076 0.00124557644299 -0.00384948226977 -0.0010695196533 + 0.00430849149433 + + + 5.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 10.0 + + + 1.0 5.0 0.0769230769231 0.0 2.0 1.0 + + + 0.0 0.9 + + + 0.7 + + + 0.5 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.666666666667 + 0.75 0.333333333333 + + + 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.5 1.0 0.0 0.0 0.0 + + + 0.293756392509 0.219686561422 0.032298368983 0.0384413920044 + 0.191728232903 0.0566858240361 0.194961014043 0.0415171272613 + 0.0272573591278 0.0492671181633 0.147685712715 0.0718120556555 + 0.0861052750348 0.158677663638 + + + + + + + + + 72 1 112 2 111 2 111 1 111 3 110 3 110 4 108 5 109 4 109 4 108 5 108 + 5 107 6 108 3 111 1 112 1 112 1 79 2 7 2 1 13 2 1 4 3 75 7 1 25 2 3 + 73 36 1 2 74 39 74 39 74 39 74 39 74 40 73 40 73 39 74 40 73 40 74 38 + 75 38 75 38 75 38 75 38 75 38 75 38 75 38 75 39 74 39 74 39 74 38 75 + 38 75 38 75 39 74 39 75 38 75 37 76 38 75 38 75 38 75 38 75 38 74 38 + 43 1 3 2 27 38 41 12 22 38 27 1 8 2 3 19 15 38 5 13 1 19 3 28 3 1 2 + 56 1 19 3 90 1 19 3 110 3 38 1 17 1 1 2 2 3 45 3 37 31 42 3 18 1 18 + 31 42 3 18 1 18 31 42 3 18 1 18 32 41 3 18 1 19 32 40 3 18 1 19 32 41 + 2 37 33 40 3 38 1 1 30 40 2 41 28 43 2 39 30 83 30 42 1 40 30 42 1 40 + 30 42 3 39 28 43 3 40 28 42 3 39 29 41 4 38 30 41 4 5 2 31 30 41 4 38 + 31 4 1 35 4 7 2 29 31 40 4 8 2 28 31 41 3 9 1 29 30 41 3 39 29 42 4 7 + 3 28 31 40 4 38 30 41 4 38 29 42 4 38 30 41 4 38 30 41 4 38 29 42 4 + 38 29 42 4 38 30 41 4 7 4 27 30 41 4 7 3 29 29 41 4 6 3 30 28 41 5 7 + 1 31 29 41 5 3 1 1 2 31 29 41 4 3 2 1 2 8 1 23 27 42 5 3 3 32 28 42 5 + 2 10 3 4 19 29 41 6 1 22 14 29 6 9 1 13 2 2 8 32 11 29 6 28 6 38 6 29 + 6 28 6 38 6 29 5 30 4 40 5 29 5 31 2 42 4 30 4 32 1 43 2 31 3 77 2 32 + 2 38 0 + + + + 12091.0 + + + 1.05607476636 + + + 5202.0 + + + 0.135524798155 + + + 1.01144765085 + + + 0.503187304333 0.607984592283 0.184338059272 0.100828398755 + 0.00955053282548 0.00210042909254 0.000850604400184 0.025936303364 + -0.0137084365514 + + + 113.0 + + + 0.495575221239 0.96261682243 + + + 0.637168141593 0.424778761062 0.814159292035 0.106194690265 + 0.261682242991 0.0 1.60747663551 1.8691588785 + + + 107.0 + + + 8.0 47.0 0.172932330827 6.0 1.0 7.0 + + + 0.0 0.990654205607 + + + 0.430237366636 + + + 0.0 0.0 0.886243386243 0.574074074074 0.262362637363 0.780423280423 + 0.531746031746 0.402116402116 0.260989010989 0.588624338624 + 0.583333333333 0.383597883598 0.0 0.0 0.873563218391 0.716475095785 + + + 0.0 0.0 0.0 0.0 0.868131868132 0.892857142857 0.730769230769 + 0.214285714286 0.0 0.0 0.0 0.0 0.774725274725 1.0 1.0 + 0.392857142857 0.0 0.395604395604 0.586734693878 0.532967032967 + 0.730769230769 0.872448979592 0.928571428571 0.683673469388 0.0 + 0.653846153846 1.0 1.0 0.538461538462 0.0 0.0 0.00510204081633 + 0.00549450549451 0.642857142857 1.0 1.0 0.521978021978 + 0.0102040816327 0.0 0.0 0.241758241758 0.153846153846 + 0.168367346939 0.186813186813 0.840659340659 0.974489795918 + 0.945054945055 0.602040816327 0.0 0.0 0.0 0.0 0.82967032967 1.0 1.0 + 0.433673469388 0.0 0.0 0.0 0.0 0.753846153846 0.904761904762 + 0.933333333333 0.533333333333 + + + 0.32343684914 0.0948527567223 0.0599898460859 0.145486168737 + 0.140956836931 0.126552614578 0.031685275992 0.123859661575 + 0.27978667145 0.0414224090749 0.194643171335 0.0404729379933 + 0.0967900740113 0.0300521353375 + + + + + + + + + 1 1 4 1 3 3 2 3 3 1 4 1 3 4 1 5 1 3 2 2 2 0 + + + + 50.0 + + + 0.5 + + + 24.0 + + + 1.58333333333 + + + 1.00877192982 + + + 0.364583333333 0.583333333333 0.0450665509259 0.282118055556 + 0.0386284722222 0.00531450245501 -0.00754538760225 0.00597281660491 + -0.0582072757888 + + + 5.0 + + + 0.4 0.0 + + + 0.8 0.0 0.8 0.0 0.0 0.0 0.0 0.0 + + + 10.0 + + + 2.0 6.0 0.0714285714286 0.0 4.0 1.0 + + + 0.0 0.9 + + + 0.48 + + + 0.0 0.666666666667 0.5 0.333333333333 1.0 1.0 1.0 1.0 0.0 + 0.666666666667 0.5 1.0 0.0 0.0 0.25 0.5 + + + 0.0 0.0 1.0 0.5 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.5 0.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 0.5 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.5 0.0 0.0 0.0 + 0.0 0.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 + + + 0.425575080871 0.201690983417 0.155708691397 0.0805066487111 + 0.14869148378 0.313527619015 0.133614389407 0.0924478793565 + 0.00838831373254 0.0923680034138 0.173342264239 0.32859014715 + 0.0989722467098 0.127566360619 + + + + + + + + + 73 1 2 3 1 18 108 28 107 28 102 4 1 28 102 33 101 34 100 35 98 37 98 + 37 98 37 97 38 98 37 98 37 98 37 97 38 97 38 97 38 98 37 98 37 98 37 + 98 2 2 33 98 37 98 38 97 37 98 37 99 36 65 1 32 37 65 2 31 37 66 1 31 + 38 98 37 98 37 98 7 1 28 98 37 98 37 32 1 33 2 30 38 31 1 33 2 29 39 + 31 1 33 7 6 1 9 2 1 43 31 2 33 19 2 49 30 2 33 70 9 1 20 2 33 70 4 24 + 1 3 33 102 33 36 1 5 1 12 3 1 2 41 34 34 31 36 34 35 31 35 34 17 1 17 + 32 34 34 17 1 17 32 34 34 35 32 34 34 35 32 34 34 35 32 34 34 35 32 + 34 35 34 32 35 33 35 33 36 31 35 32 37 30 37 30 38 30 38 29 38 29 39 + 29 37 30 39 29 38 30 37 30 37 31 37 31 35 33 37 31 34 33 37 30 35 33 + 37 30 35 34 36 30 35 34 36 30 35 34 36 30 36 33 5 6 25 30 36 32 6 4 4 + 1 22 31 34 33 6 10 21 31 34 6 4 24 4 5 27 31 34 4 12 3 20 3 28 31 34 + 2 13 3 20 4 29 30 34 2 28 2 6 5 28 30 35 1 21 1 14 2 31 30 35 1 68 30 + 36 1 69 30 35 1 69 30 35 1 69 30 35 1 34 6 29 30 35 2 5 1 30 27 6 29 + 36 1 4 2 29 30 4 29 41 1 30 31 3 29 36 1 35 31 3 29 9 11 16 1 35 31 3 + 29 4 28 4 1 35 31 3 30 2 30 3 1 35 31 3 63 2 1 36 31 1 65 1 1 36 100 + 35 100 35 100 35 100 35 100 4 3 28 100 5 2 28 101 34 101 34 101 34 + 101 35 100 34 101 34 101 35 100 35 100 35 100 35 100 36 100 35 100 35 + 100 35 100 35 100 35 100 35 100 9 1 5 1 19 100 4 16 1 8 6 100 3 27 5 + 101 3 26 5 101 2 27 6 101 1 27 5 100 3 29 3 131 4 132 3 131 3 97 0 + + + + 16200.0 + + + 1.125 + + + 5975.0 + + + 0.137071129707 + + + 0.744661702408 + + + 0.49593080622 0.480111107204 0.235293906029 0.127775408847 + -0.0790903510377 0.00645038493488 -0.0173146736585 0.0389905029481 + -0.00397665836167 + + + 135.0 + + + 0.533333333333 0.941666666667 + + + 0.622222222222 0.977777777778 0.385185185185 0.0592592592593 + 0.233333333333 1.33333333333 1.83333333333 0.366666666667 + + + 120.0 + + + 11.0 59.0 0.211946050096 7.0 5.0 4.0 + + + 0.0 0.991666666667 + + + 0.368827160494 + + + 0.0040404040404 0.0656565656566 0.687878787879 0.642424242424 + 0.119607843137 0.796078431373 0.6 0.142156862745 0.925490196078 + 0.442156862745 0.0990196078431 0.0 0.0 0.66568627451 0.708823529412 + 0.0 + + + 0.0 0.0 0.0 0.0 0.3875 0.925 0.8 0.3625 0.0 0.0156862745098 + 0.109803921569 0.145098039216 0.435294117647 1.0 1.0 0.4 0.0 0.0 + 0.545098039216 0.996078431373 0.843137254902 0.341176470588 + 0.270588235294 0.298039215686 0.192156862745 0.286274509804 + 0.674509803922 0.96862745098 1.0 0.21568627451 0.0 0.0 + 0.929411764706 1.0 0.792156862745 0.0156862745098 0.0745098039216 + 0.109803921569 0.0 0.0 0.878431372549 0.894117647059 0.772549019608 + 0.188235294118 0.145098039216 0.0666666666667 0.0 0.0 0.0 0.0 + 0.392156862745 1.0 1.0 0.439215686275 0.0 0.0 0.0 0.0 + 0.360784313725 0.909803921569 0.905882352941 0.490196078431 0.0 0.0 + + + 0.40353720361 0.145234974158 0.0992970137343 0.121258881224 + 0.00395413912165 0.257186785567 0.0238424306846 0.17982633285 + 0.233365500587 0.0843295461275 0.0771871811625 0.0979297168657 + 0.0185432847243 0.0331826061931 + + + + + + + + + 30 1 95 1 94 2 31 1 62 2 30 2 62 2 30 2 62 3 29 2 62 3 4 14 11 2 62 + 29 2 3 62 34 62 34 62 34 63 33 63 33 63 33 63 17 1 1 1 13 63 19 2 12 + 63 33 63 34 62 34 62 34 62 34 62 34 62 34 62 33 63 34 62 34 62 33 63 + 33 63 33 63 34 62 34 62 35 60 36 61 36 61 34 27 1 33 35 27 2 32 35 24 + 5 32 35 26 2 34 33 28 1 34 33 28 1 34 33 28 1 34 33 27 2 35 32 27 3 + 34 33 14 2 10 3 34 57 2 3 34 62 34 62 34 62 34 7 7 1 2 3 5 37 34 3 25 + 34 34 3 26 33 34 3 26 33 35 2 26 33 35 2 26 33 35 2 26 33 35 2 27 32 + 35 2 26 33 35 2 26 33 35 2 26 33 36 1 26 33 36 1 26 33 36 1 27 32 36 + 1 27 32 36 1 27 32 36 1 27 32 36 1 27 30 38 2 26 32 36 2 26 32 36 2 + 26 32 37 1 26 32 37 1 26 32 37 1 26 32 37 1 26 32 37 1 26 32 64 32 64 + 33 63 33 63 33 63 32 64 33 63 33 63 33 63 32 64 32 64 33 2 1 60 33 2 + 1 60 12 2 1 7 11 2 2 59 5 2 1 19 6 2 2 59 2 27 4 2 2 33 1 26 1 27 4 2 + 2 33 1 54 5 1 3 32 1 53 1 1 3 2 3 32 1 54 4 1 4 31 4 53 3 1 5 30 3 53 + 10 31 2 53 10 30 3 52 12 29 4 52 4 1 7 28 3 54 3 1 5 87 3 2 4 87 3 2 + 4 87 2 3 4 87 2 3 4 87 2 3 4 92 4 92 5 91 31 65 33 63 34 62 35 1 1 59 + 37 59 37 59 37 59 38 58 38 58 38 58 38 58 38 58 38 58 38 58 38 59 37 + 59 37 59 37 59 37 59 37 59 35 61 37 59 38 58 6 2 30 58 6 1 31 59 37 + 59 37 59 37 59 37 59 37 59 37 59 37 59 37 59 37 59 37 59 37 59 37 59 + 37 60 37 59 37 58 38 59 37 59 15 11 11 59 2 27 8 59 1 29 7 59 1 30 6 + 59 1 31 5 59 1 30 7 58 2 30 6 57 3 31 4 92 5 91 4 92 5 94 1 55 0 + + + + 15456.0 + + + 0.596273291925 + + + 4685.0 + + + 0.17075773746 + + + 0.703194217766 + + + 0.489337752064 0.479865261473 0.147467916008 0.413648956746 + -0.123579871466 0.00628402475549 -0.0713249584039 0.0306950867622 + 0.0385498788675 + + + 96.0 + + + 0.572916666667 0.60248447205 + + + 0.291666666667 1.16666666667 0.291666666667 0.541666666667 + 0.39751552795 0.844720496894 0.919254658385 0.248447204969 + + + 161.0 + + + 15.0 28.0 0.230576441103 9.0 3.0 2.0 + + + 0.0 0.993788819876 + + + 0.303118530021 + + + 0.0 0.0 0.396875 0.653455284553 0.646875 0.186458333333 + 0.205208333333 0.534552845528 0.55 0.521875 0.0822916666667 0.0 + 0.0125 0.836458333333 0.223958333333 0.0 + + + 0.0 0.0 0.0 0.0 0.220833333333 0.716666666667 0.795833333333 + 0.384920634921 0.0 0.0 0.0 0.0 0.0 0.65 1.0 0.456349206349 0.4 + 0.491666666667 0.258333333333 0.0708333333333 0.0208333333333 + 0.620833333333 1.0 0.480158730159 0.695833333333 1.0 0.416666666667 + 0.0 0.075 0.104166666667 0.2875 0.380952380952 0.6375 1.0 0.425 0.0 + 0.0 0.0 0.0 0.0 0.2125 0.35 0.825 0.8375 0.329166666667 0.0 0.0 0.0 + 0.0 0.0 0.808333333333 1.0 0.3125 0.0 0.0 0.0 0.0 0.05 + 0.695833333333 0.841666666667 0.545833333333 0.0375 0.0 0.0 + + + 0.35230163754 0.195053930777 0.153021140078 0.121702409672 + 0.155646391685 0.348808867435 0.0867975435595 0.313945907821 + 0.266248136506 0.0926340053038 0.307383410033 0.199520296658 + 0.179818970469 0.0271114943961 + + + + + + + + + 36 1 63 2 62 2 62 3 61 4 60 5 58 7 56 9 55 9 56 8 55 10 55 9 55 10 53 + 11 2 1 51 10 1 2 51 14 15 1 22 1 11 15 15 1 21 1 11 16 13 4 19 1 11 + 14 1 1 13 12 10 2 11 16 13 15 7 2 11 17 12 25 10 18 11 25 10 20 9 25 + 10 20 9 25 10 21 8 25 10 22 7 25 10 23 6 25 10 23 6 9 3 13 10 24 5 9 + 4 12 10 25 4 10 3 12 10 25 4 25 10 26 3 11 2 12 10 19 1 6 3 25 10 16 + 13 25 10 17 1 7 4 25 10 25 4 25 10 25 4 25 10 25 4 25 10 10 2 13 4 25 + 10 10 2 13 5 9 3 12 10 10 2 13 4 4 16 4 11 10 2 13 4 1 20 1 13 10 3 + 12 5 2 13 1 2 5 11 10 3 13 4 2 11 1 1 2 1 6 10 10 1 15 17 4 1 6 10 23 + 1 1 20 2 1 6 10 10 1 12 1 2 3 3 13 1 2 6 10 3 4 1 4 6 1 6 4 4 15 6 10 + 4 1 1 1 1 4 11 1 1 5 2 3 5 8 6 10 6 1 1 5 4 2 4 1 1 5 2 2 6 5 2 1 6 + 10 8 5 4 3 3 12 4 6 2 1 6 10 6 1 2 4 5 2 2 13 3 7 2 1 6 10 10 2 6 1 7 + 3 2 4 3 7 2 1 5 11 10 2 6 1 7 3 4 1 2 12 5 11 5 2 3 2 14 3 7 7 1 1 2 + 1 5 11 4 4 3 2 13 4 10 2 11 11 4 5 3 1 13 4 10 5 8 11 4 6 8 1 7 4 23 + 11 4 6 16 4 23 11 4 7 15 4 23 12 3 8 14 4 23 12 3 9 13 5 22 12 3 9 12 + 12 16 12 3 10 11 18 10 12 3 11 10 24 4 12 3 12 9 25 3 12 3 13 8 26 2 + 12 3 13 8 26 2 12 3 14 1 3 3 26 1 13 3 19 3 25 1 13 4 18 3 23 3 13 5 + 15 5 24 1 13 8 8 10 38 6 16 4 39 6 2 1 55 6 1 2 13 2 40 10 13 2 24 3 + 12 11 39 1 13 15 49 15 49 17 47 18 46 20 44 20 44 22 42 23 41 24 40 + 26 39 25 39 26 38 26 38 26 38 26 38 26 38 26 38 26 38 26 38 25 39 25 + 39 26 38 26 38 26 38 26 38 26 11 1 28 24 11 2 29 12 1 9 43 1 5 5 2 8 + 38 1 13 1 4 7 38 3 17 6 45 1 12 6 43 1 1 1 12 6 10 1 29 7 5 2 4 6 10 + 2 28 2 1 3 5 3 4 6 10 1 32 1 1 1 4 5 2 7 39 9 2 6 1 7 39 15 3 7 39 25 + 39 3 2 20 39 2 4 10 2 7 39 2 6 8 1 8 10 2 27 2 7 16 10 2 27 2 8 15 10 + 2 28 1 9 14 9 2 1 1 26 2 10 13 9 1 29 2 12 11 39 2 13 10 40 1 14 10 + 39 1 15 9 39 1 17 7 39 1 18 6 20 1 38 4 21 1 39 3 20 2 40 2 20 2 40 2 + 19 4 38 4 19 2 41 2 20 1 41 1 20 2 41 1 21 1 62 3 61 3 60 3 61 3 61 3 + 61 3 61 3 61 3 61 3 61 2 62 2 62 2 62 2 62 2 62 2 62 2 62 2 62 1 45 0 + + + + + 10048.0 + + + 0.407643312102 + + + 3226.0 + + + 0.354618722877 + + + 1.07496835443 + + + 0.595981066533 0.39649005675 0.0975297415061 0.372349136842 + 0.0714559286608 -0.0186675684544 0.0132962911877 -0.00642476765425 + 0.111991120691 + + + 64.0 + + + 2.84375 1.38853503185 + + + 3.0 1.5625 2.9375 3.875 0.968152866242 3.1847133758 0.662420382166 + 0.738853503185 + + + 157.0 + + + 31.0 71.0 0.245421245421 25.0 0.0 3.0 + + + 0.0 0.993630573248 + + + 0.321058917197 + + + 0.495192307692 0.3125 0.0112179487179 0.015625 0.270833333333 + 0.331730769231 0.00160256410256 0.09375 0.661858974359 + 0.448717948718 0.581730769231 0.053125 0.309294871795 + 0.576923076923 0.727564102564 0.2671875 + + + 0.0394736842105 1.0 0.493421052632 0.2125 0.0 0.0 0.0 0.0 0.0 + 0.89375 0.236842105263 0.3125 0.0 0.0460526315789 0.0625 0.0 + 0.0197368421053 0.925 0.789473684211 0.475 0.00625 0.0 0.08125 + 0.29375 0.0 0.1125 0.0723684210526 0.0 0.0 0.0 0.0 0.0 + 0.559210526316 0.625 0.585526315789 0.45 0.4375 0.203947368421 + 0.13125 0.0 0.460526315789 0.9875 0.578947368421 0.19375 1.0 + 0.671052631579 0.08125 0.0 0.0526315789474 0.86875 0.927631578947 + 0.45 0.90625 0.651315789474 0.375 0.0 0.0 0.2875 0.5 0.44375 + 0.51875 0.835526315789 0.6875 0.00625 + + + 0.647983228186 0.1011737911 0.0807664979962 0.0366085576471 + 0.493277967579 0.291991280849 0.0232708909236 0.184700162841 + 0.106662336682 0.0105752762445 0.128934750933 0.388299687307 + 0.0904750192991 0.0076768777738 + + + + + + + + + 35 3 103 9 4 3 15 1 73 35 71 39 67 35 2 2 68 39 67 38 68 38 68 39 67 + 39 67 38 68 39 67 39 67 39 67 39 67 39 67 38 68 38 69 37 68 38 68 39 + 67 38 68 38 69 37 69 38 68 38 68 38 68 37 69 37 69 37 69 37 69 37 69 + 37 69 8 1 28 69 37 69 37 69 37 69 36 70 47 1 13 1 3 1 3 7 5 24 70 4 + 19 12 71 4 102 4 102 3 21 1 81 3 37 22 44 3 37 28 38 3 37 30 36 3 37 + 30 36 3 38 29 36 4 37 29 36 4 37 29 36 4 37 29 36 3 38 28 37 2 39 27 + 38 2 41 24 40 1 40 25 81 25 40 1 40 25 40 2 39 26 39 3 37 27 39 4 37 + 27 37 5 37 27 37 5 3 2 31 28 37 5 3 6 27 28 37 5 3 2 2 1 28 28 37 5 4 + 1 1 1 30 27 37 5 37 27 37 5 7 1 28 28 37 5 32 3 2 27 37 5 37 27 37 5 + 37 27 37 5 37 27 37 5 37 26 38 5 37 26 38 5 37 26 38 6 36 26 38 6 7 1 + 28 27 37 6 7 1 28 27 37 6 6 3 27 27 38 5 6 3 27 27 38 5 36 27 8 2 7 2 + 3 5 11 5 3 1 32 26 5 30 3 6 1 10 2 1 1 2 19 26 4 59 17 27 2 69 9 100 + 5 65 0 + + + + 9116.0 + + + 1.23255813953 + + + 4755.0 + + + 0.11840168244 + + + 1.0002585984 + + + 0.513498572931 0.558931156059 0.170098906065 0.100522593498 + -0.00178539850053 -6.9843242287e-05 -0.00152433633938 + 0.0251325702939 -0.0120511912562 + + + 106.0 + + + 0.38679245283 0.813953488372 + + + 0.490566037736 0.528301886792 0.490566037736 0.0 0.139534883721 + 0.279069767442 1.06976744186 1.76744186047 + + + 86.0 + + + 9.0 42.0 0.173295454545 1.0 2.0 3.0 + + + 0.0 0.988372093023 + + + 0.521610355419 + + + 0.0 0.122377622378 0.895604395604 0.671328671329 0.63315696649 + 0.670033670034 0.548500881834 0.520202020202 0.703296703297 + 0.825174825175 0.474358974359 0.34965034965 0.0 0.213804713805 + 0.973544973545 0.742424242424 + + + 0.0 0.0 0.0 0.244755244755 0.823076923077 0.769230769231 + 0.65034965035 0.34965034965 0.0 0.0 0.0 0.244755244755 + 0.992307692308 1.0 1.0 0.685314685315 0.323076923077 0.300699300699 + 0.244755244755 0.391608391608 1.0 1.0 0.979020979021 0.881118881119 + 0.857142857143 1.0 1.0 0.993506493506 0.135714285714 0.123376623377 + 0.12987012987 0.149350649351 0.8 1.0 1.0 1.0 0.138461538462 0.0 0.0 + 0.0 0.415384615385 0.58041958042 0.559440559441 0.741258741259 + 0.838461538462 0.923076923077 0.867132867133 0.531468531469 0.0 0.0 + 0.0 0.447552447552 1.0 1.0 1.0 0.517482517483 0.0 0.0 0.0 + 0.409090909091 0.928571428571 0.967532467532 0.928571428571 + 0.525974025974 + + + 0.297595046902 0.0846109984004 0.072197202638 0.159909317955 + 0.158829715312 0.0879796460894 0.0179453674489 0.120010016119 + 0.286421373189 0.0376979035949 0.15284105606 0.0240762732411 + 0.0817176678484 0.0328439966083 + + + + + + + + + 62 2 205 5 203 6 199 9 199 10 198 1 2 7 202 7 201 7 1 1 196 1 2 9 1 1 + 193 2 2 8 2 1 193 13 1 2 192 17 191 11 1 5 191 10 2 5 191 10 2 5 191 + 17 192 17 191 17 4 1 186 18 3 3 184 18 3 3 184 18 4 1 185 17 5 1 185 + 19 3 4 182 19 3 4 182 20 2 5 181 20 2 5 181 21 1 6 3 6 171 28 5 6 169 + 40 167 43 165 44 165 20 3 21 164 20 5 23 160 20 3 25 97 3 60 21 1 26 + 97 3 60 21 1 11 6 5 102 1 62 21 1 9 1 1 5 11 95 3 61 20 4 8 3 15 93 5 + 60 21 3 26 94 3 61 21 4 27 92 2 63 20 6 26 91 2 63 19 8 25 91 2 63 20 + 8 23 91 3 63 20 10 22 54 10 5 2 2 15 1 4 63 20 8 29 49 39 63 20 10 29 + 47 39 63 20 12 28 46 39 63 19 11 31 45 39 64 17 12 32 43 40 64 18 9 + 35 42 40 64 18 8 38 41 39 64 18 8 39 40 39 64 3 4 11 11 6 5 26 39 38 + 65 3 5 9 12 5 6 27 38 38 65 3 5 2 1 6 14 3 6 28 37 38 65 3 9 5 14 6 3 + 2 2 23 38 38 65 3 10 3 21 1 8 19 40 39 65 2 34 4 6 19 39 39 65 3 34 4 + 6 13 1 5 38 39 65 3 35 5 6 18 37 39 65 2 37 6 6 17 36 39 65 2 38 6 5 + 18 35 39 65 2 40 5 1 1 3 19 34 38 65 2 41 7 3 19 33 38 38 1 26 2 43 6 + 2 17 37 2 1 2 2 25 42 3 70 17 1 6 2 1 34 2 1 28 42 9 66 5 1 22 30 36 + 37 13 18 1 47 6 3 5 1 7 1 3 30 38 34 18 13 4 46 5 3 12 3 1 31 38 35 + 17 9 2 1 5 47 5 3 8 5 3 5 2 23 38 35 17 10 1 2 3 49 4 2 1 6 5 1 5 4 1 + 24 39 33 15 9 5 3 1 51 8 5 11 3 2 24 38 34 13 9 6 2 3 51 7 2 14 3 2 + 24 6 1 31 32 1 1 13 6 9 2 3 52 27 24 38 32 3 1 12 5 9 3 2 54 5 2 18 3 + 2 19 38 32 3 1 5 2 3 8 8 61 4 2 3 2 19 17 38 32 3 1 6 1 4 6 10 1 2 1 + 1 1 1 42 3 7 10 3 18 17 37 33 3 1 12 6 14 1 1 41 5 1 36 17 37 33 20 2 + 19 32 46 5 5 9 38 32 21 1 21 31 44 5 7 7 39 32 21 2 20 32 16 3 13 1 + 11 4 9 4 40 32 20 4 19 34 25 7 11 4 3 1 3 2 43 32 21 2 20 36 24 7 10 + 4 52 32 21 2 20 38 13 2 9 5 9 5 51 33 22 1 20 39 1 5 5 8 5 5 7 6 2 2 + 47 33 22 1 21 46 6 4 7 4 8 10 46 33 22 1 21 48 5 3 9 2 8 11 46 32 22 + 2 19 50 2 2 22 11 12 5 5 1 5 4 1 6 6 33 21 3 19 60 18 9 11 68 20 2 21 + 42 2 7 1 8 22 4 11 33 1 34 43 42 15 4 36 32 3 33 20 2 22 43 52 34 1 + 33 21 2 22 43 29 2 22 33 1 34 20 3 21 49 24 2 21 33 1 34 19 4 21 48 + 15 3 8 2 21 31 3 32 21 3 21 49 4 4 6 5 8 1 20 31 3 32 22 2 21 50 1 9 + 2 8 7 6 14 31 4 32 20 3 5 4 12 71 26 31 3 33 19 5 2 6 3 1 8 72 25 32 + 2 33 19 5 4 4 12 73 23 32 2 34 16 8 20 74 22 32 1 4 1 30 17 7 12 2 6 + 76 20 33 1 2 3 29 17 1 1 5 12 1 7 76 21 35 16 16 19 5 20 76 20 36 23 + 3 26 4 20 77 19 36 23 1 28 4 20 77 20 35 52 4 21 76 20 35 44 2 3 1 1 + 6 19 77 20 35 38 1 4 14 19 77 20 35 37 3 3 15 18 78 19 35 37 22 17 77 + 2 1 17 35 37 23 16 82 15 35 37 23 16 83 14 35 37 26 13 88 9 35 36 33 + 7 90 7 35 36 35 5 90 7 35 37 35 5 85 3 1 7 35 37 36 4 85 11 35 37 36 + 4 85 4 1 2 1 3 35 37 37 1 87 4 1 1 3 2 35 37 124 8 2 2 35 37 123 13 + 35 37 123 6 1 6 35 37 124 5 1 6 35 37 129 7 36 36 129 7 36 2 1 1 1 26 + 135 6 36 37 129 6 36 4 5 28 129 7 36 3 4 29 131 5 35 37 132 4 35 37 + 132 4 35 37 133 3 35 37 134 1 37 36 134 1 37 36 130 5 37 36 130 5 37 + 36 130 5 37 36 131 4 38 35 131 4 38 35 134 1 38 36 132 2 38 36 172 36 + 172 36 172 36 173 35 173 2 6 1 1 25 200 8 205 3 206 3 205 3 205 3 205 + 3 205 3 205 4 204 3 206 2 168 0 + + + + 32864.0 + + + 1.3164556962 + + + 8505.0 + + + 0.223162845385 + + + 0.749904202325 + + + 0.479980801291 0.510142778508 0.458571459036 0.128177979628 + -0.0866801226146 0.0541145640132 -0.0423807460727 0.0493736639939 + 0.000596161586633 + + + 208.0 + + + 1.50480769231 2.53164556962 + + + 0.730769230769 1.75 2.38461538462 1.15384615385 1.01265822785 + 4.10126582278 3.92405063291 0.987341772152 + + + 158.0 + + + 31.0 197.0 0.239089184061 23.0 4.0 14.0 + + + 0.0 0.993670886076 + + + 0.258793816943 + + + 0.0 0.0932692307692 0.539940828402 0.529326923077 0.441321499014 + 0.319230769231 0.34516765286 0.00240384615385 0.0128205128205 + 0.408173076923 0.283530571992 0.0 0.00887573964497 0.658173076923 + 0.431459566075 0.0668269230769 + + + 0.0 0.0 0.0 0.0 0.0 0.730769230769 0.944230769231 0.426923076923 + 0.0 0.0 0.0 0.373076923077 0.791497975709 0.623076923077 + 0.434615384615 0.311538461538 0.453441295547 0.721153846154 + 0.517307692308 0.236538461538 0.797570850202 0.588461538462 + 0.00961538461538 0.0 0.0080971659919 0.561538461538 0.511538461538 + 0.0115384615385 0.0 0.0 0.0 0.0 0.0 0.05 0.665384615385 + 0.601923076923 0.362348178138 0.0 0.0 0.0 0.0 0.0 0.0 + 0.365384615385 0.696356275304 0.1 0.0 0.0 0.0 0.0 0.455769230769 + 0.519230769231 0.708502024291 0.555769230769 0.246153846154 + 0.0211538461538 0.0 0.0346153846154 0.742307692308 0.915384615385 + 0.465587044534 0.0115384615385 0.0 0.0 + + + 0.267472007898 0.218576840286 0.0942067424054 0.142976372471 + 0.0392662422535 0.223017534851 0.16452514409 0.166937107332 + 0.218873446329 0.125390312478 0.00846731276364 0.132958733817 + 0.229599875546 0.0805108593114 + + + + + + + + + 0 1 9 4 6 8 3 3 3 1 3 3 3 3 1 3 5 1 1 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 + 2 7 0 + + + + 150.0 + + + 0.666666666667 + + + 61.0 + + + 1.01639344262 + + + 0.95 + + + 0.318761384335 0.47775175644 0.0706667077861 0.265273304814 + -0.0194818068473 0.0237284118095 -0.0128322242886 -0.019296191298 + 0.024540640645 + + + 10.0 + + + 0.1 0.2 + + + 0.0 0.0 0.0 0.0 0.0 0.8 0.0 0.0 + + + 15.0 + + + 3.0 3.0 0.0833333333333 0.0 7.0 1.0 + + + 0.0 0.933333333333 + + + 0.406666666667 + + + 0.833333333333 0.5 0.5 0.5 0.555555555556 0.75 1.0 0.833333333333 + 0.333333333333 0.0 0.0 0.0 0.111111111111 0.416666666667 0.0 0.0 + + + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.75 0.5 0.75 1.0 1.0 1.0 0.5 0.0 + 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 + 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.25 0.0 0.0 0.0 0.0 + + + 0.281248627532 0.199000871144 0.0496979109907 0.141484427798 + 0.101178965618 0.250585979238 0.0969137325277 0.176209253216 + 0.0714341547729 0.153310280671 0.195967262068 0.185697734476 + 0.12976625154 0.0553371996957 + + + + + + + + + 65 3 40 3 5 2 7 17 39 35 37 37 36 38 36 38 36 39 35 39 35 39 35 39 35 + 39 35 39 36 38 36 38 36 38 36 38 36 38 36 38 36 39 35 17 1 21 36 16 1 + 21 36 16 2 18 38 16 2 8 1 2 45 4 6 15 3 1 45 36 38 39 36 37 37 37 37 + 37 37 38 36 38 36 38 36 38 36 38 36 38 36 38 37 37 37 37 37 37 36 38 + 8 2 1 7 13 44 6 68 5 69 5 69 5 69 5 35 18 1 10 5 5 34 31 4 5 34 31 4 + 5 34 31 4 5 34 31 5 4 34 31 5 4 35 30 5 4 36 30 4 2 1 1 36 30 4 2 37 + 30 6 2 37 33 1 2 38 36 37 36 38 39 35 38 36 39 35 39 5 7 7 1 15 34 2 + 3 5 7 6 4 13 34 2 4 4 8 6 2 14 41 1 10 6 3 13 41 2 9 22 41 2 5 27 39 + 35 39 35 40 34 40 34 40 34 40 34 41 6 2 9 1 1 2 10 1 1 41 16 4 5 49 6 + 2 8 4 4 49 7 3 8 4 3 49 32 43 34 40 34 41 33 41 33 41 33 41 2 2 6 3 + 11 3 6 41 2 5 3 19 4 42 1 28 3 42 1 29 2 73 1 34 0 + + + + 6586.0 + + + 0.831460674157 + + + 3095.0 + + + 0.169951534733 + + + 0.702799479167 + + + 0.507632726227 0.467355705684 0.112027568311 0.174442789634 + -0.0861683242785 0.000197428863963 -0.004744245342 0.00440407877638 + 0.00583623748479 + + + 74.0 + + + 0.972972972973 0.584269662921 + + + 1.02702702703 1.13513513514 0.756756756757 0.810810810811 + 0.224719101124 0.269662921348 1.03370786517 0.808988764045 + + + 89.0 + + + 3.0 37.0 0.211764705882 1.0 5.0 2.0 + + + 0.0 0.988764044944 + + + 0.469936228363 + + + 0.0 0.133838383838 0.775252525253 0.528985507246 0.303827751196 + 0.33014354067 0.976076555024 0.736842105263 0.914141414141 + 0.982323232323 0.0959595959596 0.1038647343 0.703349282297 + 0.77990430622 0.165071770335 0.0 + + + 0.0 0.0 0.0 0.20202020202 0.69696969697 0.666666666667 + 0.393939393939 0.240740740741 0.0 0.0 0.0 0.333333333333 1.0 + 0.737373737374 0.858585858586 0.638888888889 0.0 0.0 0.0 + 0.272727272727 1.0 0.89898989899 0.888888888889 0.611111111111 + 0.563636363636 0.590909090909 0.427272727273 0.581818181818 1.0 1.0 + 0.881818181818 0.591666666667 0.838383838384 1.0 0.949494949495 1.0 + 0.161616161616 0.131313131313 0.161616161616 0.25 0.858585858586 + 0.959595959596 0.979797979798 1.0 0.0909090909091 0.0 0.0 0.0 + 0.909090909091 1.0 0.89898989899 1.0 0.10101010101 0.0 0.0 0.0 + 0.436363636364 0.518181818182 0.518181818182 0.736363636364 + 0.490909090909 0.0454545454545 0.0 0.0 + + + 0.391967137425 0.180098821114 0.04466999828 0.0215369428667 + 0.0101564231386 0.325607078054 0.0747299742579 0.0490169953959 + 0.0452152955061 0.00985050197938 0.0746773115113 0.207570066397 + 0.106615384059 0.0444338779098 + + + + + + + + + 7 1 19 3 18 3 18 3 16 5 15 6 14 7 14 6 36 2 1 2 16 5 16 5 16 5 16 4 + 17 4 17 4 18 4 17 4 17 4 17 4 17 4 16 5 16 5 16 5 16 5 17 3 18 3 18 4 + 17 4 17 4 15 2 20 1 3 1 19 3 6 1 8 6 5 2 8 5 6 3 6 6 16 5 16 5 16 5 + 15 6 10 3 2 6 8 6 1 6 9 3 2 7 8 5 2 5 8 6 4 3 16 5 16 5 16 4 17 3 62 + 2 17 4 16 0 + + + + 1113.0 + + + 0.396226415094 + + + 247.0 + + + 0.866396761134 + + + 1.1396011396 + + + 0.277125506073 0.527639364684 0.0765674514207 0.83349632559 + 0.0359030455651 0.0393894705708 -0.00118809114336 0.0510830654414 + -0.19914620284 + + + 21.0 + + + 1.28571428571 0.188679245283 + + + 3.04761904762 1.33333333333 0.190476190476 0.571428571429 + 0.0754716981132 0.0 0.301886792453 0.377358490566 + + + 53.0 + + + 1.0 3.0 0.166666666667 10.0 1.0 1.0 + + + 0.0 0.981132075472 + + + 0.221922731357 + + + 0.307692307692 0.507692307692 0.461538461538 0.628571428571 + 0.507692307692 0.338461538462 0.369230769231 0.171428571429 0.0 0.0 + 0.0769230769231 0.0142857142857 0.0 0.0 0.0128205128205 + 0.261904761905 + + + 0.0 0.0 0.0 0.0 0.0714285714286 0.0833333333333 0.5 0.285714285714 + 0.166666666667 0.809523809524 0.833333333333 0.857142857143 + 0.47619047619 1.0 0.952380952381 0.619047619048 0.583333333333 + 0.857142857143 0.75 0.928571428571 0.714285714286 1.0 + 0.785714285714 0.0714285714286 0.611111111111 0.142857142857 0.0 + 0.0 0.047619047619 0.0555555555556 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0714285714286 0.333333333333 + 0.0714285714286 0.0 0.0 0.0 0.0 0.0 0.0 0.0555555555556 + 0.571428571429 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.47619047619 0.0 + + + 0.397458286106 0.232874141688 0.106095411254 0.0821044878751 + 0.167461002911 0.374704420979 0.154464064917 0.102665249852 + 0.0808310693991 0.101844140519 0.161338497789 0.292739281812 + 0.20955335336 0.145704187863 + + + + + + + + + 201 1 38 4 38 3 38 2 39 2 39 2 24 17 13 28 4 37 4 38 3 37 4 37 4 37 3 + 38 3 38 3 38 3 38 3 38 3 38 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 + 34 7 4 1 2 1 18 1 2 12 3 2 32 4 37 4 3 6 29 4 5 1 31 3 38 3 38 3 38 4 + 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 5 36 5 36 5 36 5 36 5 36 5 + 13 18 6 4 3 29 5 4 1 32 4 38 3 39 2 39 2 39 2 38 3 38 3 38 4 37 4 37 + 3 38 3 39 2 39 2 39 2 38 3 38 3 39 2 39 1 40 1 40 1 39 2 39 2 39 1 3 + 0 + + + + 3239.0 + + + 0.518987341772 + + + 1679.0 + + + 0.165574746873 + + + 1.0389261745 + + + 0.507534246575 0.423496892228 0.073710707595 0.118437865335 + 0.0111252105441 -0.000642098837563 0.0100033847291 0.00291412226906 + 0.0100714599303 + + + 41.0 + + + 0.609756097561 0.113924050633 + + + 0.975609756098 0.0 0.0975609756098 1.36585365854 0.0 0.303797468354 + 0.151898734177 0.0 + + + 79.0 + + + 3.0 25.0 0.201149425287 2.0 11.0 2.0 + + + 0.0506329113924 0.987341772152 + + + 0.518369867243 + + + 0.342105263158 0.86 0.635 0.0 0.421052631579 1.0 0.78 0.0 + 0.468421052632 0.995 0.75 0.0 0.416267942584 0.695454545455 + 0.704545454545 0.209090909091 + + + 0.0 0.6 0.88 0.74 0.62 0.3 0.0 0.0 0.0 0.7 1.0 0.82 1.0 0.62 0.0 + 0.0 0.0 0.8 1.0 1.0 1.0 0.6 0.0 0.0 0.0 0.8 1.0 1.0 1.0 0.52 0.0 + 0.0 0.0 0.88 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.9 1.0 0.98 1.0 0.5 0.0 + 0.0 0.0 0.9 1.0 0.9 1.0 0.52 0.0 0.0 0.222222222222 0.5 0.5 + 0.466666666667 0.666666666667 0.65 0.466666666667 0.3 + + + 0.692417583023 0.0341247599141 0.0369944921347 0.0236345053586 + 0.600186156919 0.0763174193435 0.0236025233035 0.0526163061933 + 0.0352371947714 0.0193758468748 0.200748587907 0.106255368279 + 0.0767980070489 0.0211589138421 + + + + + + + + + 0 5 + + + + 5.0 + + + 5.0 + + + 5.0 + + + 2.8 + + + 1.5 + + + 0.5 0.5 0.4 0.0 0.0 0.0 0.0 0.0 0.0 + + + 5.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 1.0 + + + 0.0 0.0 0.0 3.0 3.0 3.0 + + + 0.0 -1.0 + + + 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.172170044898 0.46805688587 9.52540801722e-18 1.0215523374e-16 + 0.492762373022 0.259776695308 0.650015281164 5.44715773854e-17 + 7.55474054836e-17 2.29492935975e-16 1.07708460587 1.14337025936 + 0.566293723761 0.852733448652 + + + + + + + + + 70 1 72 1 72 1 71 1 72 2 71 3 70 3 70 3 33 1 3 1 32 3 33 8 29 3 33 14 + 23 3 33 23 4 3 6 3 34 34 1 4 34 39 34 39 34 39 34 17 1 21 34 39 35 3 + 1 34 35 3 2 4 1 27 37 1 3 4 2 27 35 2 3 33 35 3 2 32 36 3 4 31 35 38 + 35 38 35 38 35 38 35 38 35 38 35 38 35 39 34 38 35 38 35 38 35 38 35 + 37 36 38 35 40 33 7 1 31 34 39 34 39 34 39 35 38 35 38 35 38 36 37 36 + 36 37 36 37 6 4 27 36 37 2 2 5 3 23 38 2 14 19 37 3 30 2 6 2 30 3 37 + 7 1 1 24 3 37 15 18 3 37 25 8 3 37 28 5 3 37 29 4 3 37 28 5 5 2 1 1 2 + 29 28 5 4 3 2 5 1 25 28 5 4 36 28 5 4 36 28 5 4 36 28 5 4 36 28 5 4 + 37 28 4 4 37 28 4 4 37 29 3 4 37 29 3 4 37 29 3 4 37 28 3 5 37 28 3 + 10 30 30 3 13 8 1 11 37 3 12 22 38 1 5 1 1 1 4 30 29 1 6 7 1 29 29 1 + 6 37 29 1 6 37 36 37 36 37 36 37 36 38 35 38 35 38 35 38 35 38 35 38 + 37 35 36 38 34 39 38 35 35 38 34 39 34 8 5 4 1 21 34 6 15 18 33 7 24 + 9 33 7 24 9 33 8 22 1 3 7 33 6 29 4 34 5 31 3 34 3 1 2 30 3 34 3 70 3 + 70 2 71 2 71 2 70 0 + + + + 7884.0 + + + 0.675925925926 + + + 3433.0 + + + 0.166035537431 + + + 0.744655227057 + + + 0.512234197495 0.503183777029 0.11646646759 0.187655161639 + -0.0955881566192 -0.00094023085933 -0.00287827500617 + 0.00427322064145 0.00133645754225 + + + 73.0 + + + 0.904109589041 0.62962962963 + + + 1.31506849315 0.712328767123 1.04109589041 0.547945205479 + 0.592592592593 0.259259259259 1.25925925926 0.407407407407 + + + 108.0 + + + 12.0 57.0 0.22454308094 4.0 4.0 2.0 + + + 0.0 0.990740740741 + + + 0.435438863521 + + + 0.0 0.0740740740741 0.833333333333 0.594650205761 0.125514403292 + 0.162551440329 0.975308641975 0.609053497942 0.588477366255 + 0.985596707819 0.144032921811 0.172839506173 0.551656920078 + 0.92007797271 0.231968810916 0.0 + + + 0.0 0.0 0.0 0.150793650794 0.777777777778 0.587301587302 + 0.74358974359 0.571428571429 0.0 0.0 0.0 0.134920634921 + 0.991452991453 0.984126984127 1.0 0.103174603175 0.0 0.0 0.0 + 0.0714285714286 1.0 0.992063492063 1.0 0.174603174603 + 0.145299145299 0.349206349206 0.333333333333 0.246031746032 1.0 + 0.912698412698 1.0 0.31746031746 0.273504273504 0.873015873016 + 0.991452991453 0.952380952381 0.230769230769 0.269841269841 + 0.418803418803 0.277777777778 0.162393162393 0.992063492063 1.0 1.0 + 0.0769230769231 0.0 0.0 0.0 0.111111111111 1.0 1.0 1.0 + 0.153846153846 0.0 0.0 0.0 0.261538461538 0.785714285714 + 0.823076923077 0.871428571429 0.553846153846 0.207142857143 0.0 0.0 + + + 0.479721438922 0.159381503092 0.0191821202096 0.0130244719104 + 0.0906064517946 0.356788024988 0.0635308332082 0.0236782642006 + 0.0249861405327 0.00870565051343 0.178983486454 0.32966560763 + 0.122860555224 0.0418759981788 + + + + + + + + + 19 1 58 3 7 1 4 2 58 5 4 2 4 1 10 4 45 12 3 1 10 4 46 11 7 3 4 3 47 + 11 7 4 2 5 47 1 4 3 8 12 47 1 5 1 9 11 48 1 12 14 48 2 3 2 6 13 49 3 + 3 1 8 11 44 31 44 39 36 39 36 39 36 39 36 39 36 40 35 40 35 40 36 39 + 36 39 36 3 2 34 36 4 1 34 36 3 2 34 44 31 43 32 36 39 36 39 36 38 37 + 39 36 39 36 39 36 39 29 1 6 39 28 3 5 39 27 4 5 39 18 13 5 39 13 18 6 + 47 2 20 6 48 1 20 6 69 6 69 7 68 7 45 1 22 7 2 10 8 5 20 1 22 7 1 25 + 42 35 40 5 6 24 40 6 5 23 44 3 4 25 42 5 2 26 42 4 5 24 42 4 6 23 42 + 5 4 23 43 4 6 22 43 5 4 25 41 6 2 27 39 7 2 27 39 8 2 26 39 8 2 26 39 + 7 3 26 39 8 2 26 39 8 1 27 4 1 34 8 1 27 4 1 34 8 1 27 39 8 1 27 39 8 + 1 27 39 8 2 26 39 8 2 26 39 8 2 26 40 8 1 26 40 8 1 26 40 8 2 25 40 8 + 2 25 40 8 2 26 1 1 37 9 1 25 40 9 1 25 40 9 1 25 40 9 2 25 16 3 20 9 + 1 26 6 1 10 1 22 35 16 3 7 8 6 35 16 20 4 35 8 28 4 35 7 29 4 34 6 31 + 4 35 4 32 4 35 4 32 4 35 3 34 3 35 2 35 3 36 1 35 3 72 3 72 4 71 4 71 + 4 71 4 71 4 71 4 71 4 71 4 72 3 72 3 72 3 72 3 72 2 73 1 2 0 + + + + 7875.0 + + + 0.714285714286 + + + 3317.0 + + + 0.186614410612 + + + 1.31707317073 + + + 0.509382460543 0.437710164421 0.127138325002 0.145998570447 + 0.0864230051127 -0.00212044750974 -0.00104259552606 + 0.000264860756944 0.00365635259362 + + + 75.0 + + + 0.773333333333 0.809523809524 + + + 2.02666666667 0.64 0.32 0.106666666667 0.87619047619 0.647619047619 + 1.10476190476 0.609523809524 + + + 105.0 + + + 5.0 37.0 0.225225225225 12.0 5.0 3.0 + + + 0.0 0.990476190476 + + + 0.421206349206 + + + 0.66452991453 0.681623931624 0.117521367521 0.00617283950617 + 0.744939271255 0.811740890688 0.224696356275 0.0662768031189 + 0.0748987854251 0.605263157895 0.995951417004 0.146198830409 0.0 + 0.516194331984 0.868421052632 0.249512670565 + + + 0.42735042735 0.837606837607 0.820512820513 0.495726495726 + 0.307692307692 0.162393162393 0.025641025641 0.0 0.393162393162 1.0 + 1.0 0.410256410256 0.0 0.0 0.0 0.0 0.569230769231 1.0 1.0 + 0.423076923077 0.0 0.0 0.0 0.0 0.401709401709 1.0 1.0 + 0.846153846154 0.521367521368 0.42735042735 0.290598290598 0.0 + 0.017094017094 0.299145299145 0.376068376068 1.0 0.982905982906 1.0 + 0.410256410256 0.0 0.0 0.0 0.0846153846154 0.976923076923 1.0 1.0 + 0.207692307692 0.0 0.0 0.0 0.213675213675 1.0 1.0 1.0 + 0.188034188034 0.0 0.0 0.0 0.2 0.669230769231 0.730769230769 + 0.769230769231 0.453846153846 0.335714285714 + + + 0.585909403958 0.117454414362 0.0114494949955 0.00229832793143 + 0.327176395169 0.300047827318 0.0472797183482 0.072004001701 + 0.0504924138231 0.0121423688859 0.0328967505152 0.357374515351 + 0.0965888146541 0.0309378488374 + + + + + + + + + 37 1 72 2 61 1 9 3 55 13 2 5 39 35 37 36 38 36 38 36 38 36 37 37 37 + 37 37 37 37 37 37 37 38 36 38 36 38 37 36 39 34 40 34 40 34 40 34 39 + 35 6 2 31 36 37 37 37 37 37 37 37 37 37 37 37 37 37 38 36 38 36 37 37 + 38 36 38 36 25 1 5 2 5 37 6 5 1 20 5 69 5 69 5 24 5 9 4 27 5 69 5 69 + 5 21 1 47 5 67 7 23 2 41 8 22 3 42 7 18 2 21 2 25 6 7 1 1 21 39 5 2 + 29 38 5 3 29 37 6 2 29 37 6 1 31 36 6 1 31 36 6 1 31 36 38 36 38 36 + 38 36 39 29 44 31 43 34 40 36 39 35 40 2 1 31 38 36 38 36 38 36 38 36 + 37 37 38 37 37 37 36 38 37 37 37 7 2 28 37 37 36 38 36 37 38 37 36 38 + 36 15 2 21 37 7 10 20 37 5 20 12 37 5 19 13 37 4 20 13 37 3 24 2 1 7 + 69 4 71 3 72 2 146 3 71 3 71 4 69 6 68 6 68 5 68 6 67 7 65 3 3 2 72 1 + 72 3 2 0 + + + + 7252.0 + + + 0.755102040816 + + + 3221.0 + + + 0.145917416951 + + + 1.43616071429 + + + 0.505016309918 0.433261745568 0.127035327882 0.149929117652 + 0.0944405195026 -0.00161982461183 0.00550348763405 0.00228317681665 + 0.00750167844086 + + + 74.0 + + + 0.72972972973 0.326530612245 + + + 0.27027027027 0.810810810811 0.648648648649 1.13513513514 + 0.122448979592 0.571428571429 0.244897959184 0.326530612245 + + + 98.0 + + + 11.0 47.0 0.195439739414 7.0 5.0 4.0 + + + 0.0 0.989795918367 + + + 0.44415333701 + + + 0.770833333333 0.826666666667 0.0115740740741 0.0 0.877192982456 + 0.877894736842 0.103070175439 0.0505263157895 0.0856481481481 + 0.555555555556 0.993055555556 0.233333333333 0.0 0.461052631579 + 0.826754385965 0.433684210526 + + + 0.527777777778 0.888888888889 0.842592592593 0.700854700855 + 0.0462962962963 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.777777777778 + 0.0 0.0 0.0 0.0 0.75 1.0 1.0 0.692307692308 0.0 0.0 0.0 0.0 + 0.758333333333 1.0 1.0 0.830769230769 0.191666666667 0.2 0.2 0.0 + 0.12962962963 0.212962962963 0.12962962963 0.948717948718 1.0 + 0.972222222222 0.546296296296 0.0 0.0 0.0 0.0740740740741 1.0 1.0 + 1.0 0.425925925926 0.0 0.0 0.0 0.0925925925926 1.0 1.0 1.0 + 0.648148148148 0.0 0.0 0.0 0.075 0.638461538462 0.591666666667 0.75 + 0.708333333333 0.392307692308 + + + 0.55604426403 0.137009107593 0.0263321765535 0.0151261947231 + 0.254741262646 0.340351272053 0.0532859522336 0.0238077774025 + 0.0178921559386 0.023829887295 0.0893147206761 0.371394509171 + 0.106870210875 0.0361116757203 + + + + + + + + + 2 7 2 4 28 21 20 32 3 1 5 37 4 36 5 36 4 37 4 37 4 37 4 37 4 36 5 37 + 4 37 4 37 4 37 4 37 4 37 4 37 4 37 4 37 5 35 6 35 6 35 5 38 3 38 3 37 + 4 37 4 7 1 30 4 6 1 30 3 7 1 12 5 13 3 7 3 9 1 1 4 3 1 7 5 7 3 11 4 + 11 5 21 1 14 5 4 5 12 4 2 3 1 1 4 5 4 6 17 8 1 5 4 6 18 2 1 3 2 6 3 7 + 25 6 3 1 4 1 26 6 3 2 15 1 14 6 2 3 2 3 10 1 14 11 1 4 25 7 1 3 2 2 + 26 7 2 1 13 1 17 8 1 1 13 1 17 14 8 2 17 25 3 2 11 34 6 36 3 38 2 39 + 2 39 2 39 2 40 1 40 1 40 2 39 2 39 2 39 1 40 1 40 1 9 1 30 1 9 2 39 2 + 39 2 30 1 8 2 30 1 8 2 30 1 8 2 30 1 8 2 30 1 8 2 30 1 7 3 30 1 7 4 + 29 1 8 2 30 2 7 2 30 2 6 4 29 1 7 5 4 6 5 3 2 2 5 3 7 22 1 11 7 6 1 + 27 7 36 5 36 5 36 5 36 5 37 4 37 4 37 4 37 4 37 4 39 2 39 2 39 2 39 1 + 39 3 38 3 38 4 38 3 38 3 37 4 37 4 37 4 37 4 37 4 37 4 37 4 38 3 36 1 + 1 4 36 5 36 5 21 6 9 5 22 3 11 5 22 2 12 5 7 1 15 1 12 5 20 1 1 3 3 4 + 4 5 17 2 1 9 1 1 5 7 33 8 33 6 35 6 35 7 35 7 3 5 26 6 4 4 9 1 4 3 10 + 5 6 24 6 5 5 26 5 5 6 27 3 4 6 28 2 5 6 36 5 38 3 27 5 4 4 27 7 3 5 + 11 1 13 8 20 1 8 12 34 6 34 7 35 6 31 10 31 1 6 3 31 1 10 0 + + + + 5535.0 + + + 0.303703703704 + + + 3271.0 + + + 0.217364720269 + + + 1.02834661762 + + + 0.492578722103 0.465013666002 0.0365705794879 0.488927031995 + 0.00899839422809 -0.000150879293381 0.00271628329855 + 0.00204411574875 -0.019869804946 + + + 41.0 + + + 3.36585365854 0.614814814815 + + + 3.51219512195 1.75609756098 3.80487804878 4.39024390244 + 0.385185185185 0.888888888889 0.385185185185 0.77037037037 + + + 135.0 + + + 13.0 72.0 0.214123006834 14.0 8.0 2.0 + + + 0.0 0.992592592593 + + + 0.590966576332 + + + 0.845454545455 0.176470588235 0.738235294118 0.479411764706 + 0.975757575758 0.311764705882 0.779411764706 0.514705882353 0.9 + 0.341176470588 0.776470588235 0.45 0.67217630854 0.299465240642 + 0.617647058824 0.622994652406 + + + 0.725 0.752941176471 0.317647058824 0.152941176471 0.705882352941 + 0.717647058824 0.352941176471 0.223529411765 0.9875 0.917647058824 + 0.235294117647 0.0 0.529411764706 1.0 0.976470588235 0.364705882353 + 0.9875 0.976470588235 0.588235294118 0.0 0.588235294118 1.0 + 0.952941176471 0.0352941176471 0.9375 1.0 0.658823529412 0.0 + 0.529411764706 1.0 1.0 0.0705882352941 0.9125 0.858823529412 + 0.682352941176 0.0 0.552941176471 1.0 0.929411764706 + 0.0588235294118 0.875 0.952941176471 0.682352941176 0.0 + 0.552941176471 1.0 0.776470588235 0.0352941176471 0.8625 1.0 + 0.776470588235 0.235294117647 0.670588235294 1.0 0.917647058824 + 0.317647058824 0.416666666667 0.490196078431 0.254901960784 0.0 + 0.166666666667 0.705882352941 0.637254901961 0.617647058824 + + + 0.355550691938 0.25818141517 0.0317485096604 0.0160391580065 + 0.0750394076297 0.498747185533 0.138963519495 0.144384665277 + 0.0529329849317 0.0173021066407 0.181229388595 0.328457471391 + 0.31597443163 0.058535125671 + + + + + + + + + 211 1 4 2 23 7 4 4 3 4 10 2 1 23 2 41 2 41 2 41 2 41 2 41 2 41 2 41 2 + 41 2 41 2 41 2 41 3 40 3 40 3 40 3 40 3 40 3 40 3 40 4 39 4 39 4 34 9 + 4 1 28 10 4 1 34 4 39 4 3 3 33 4 39 4 39 4 39 4 39 4 39 5 38 5 38 5 + 38 5 38 5 38 5 38 5 38 5 38 5 38 5 38 5 38 6 37 6 21 10 6 6 7 26 4 6 + 3 40 2 42 1 41 2 41 2 42 1 42 1 33 2 6 2 33 3 6 1 33 4 39 3 40 3 127 + 1 42 1 42 1 42 2 41 2 41 2 40 3 40 3 40 3 41 2 41 2 41 2 42 1 1 0 + + + + 3311.0 + + + 0.558441558442 + + + 1774.0 + + + 0.161217587373 + + + 1.02247191011 + + + 0.502657432759 0.371046697917 0.076945679351 0.112269725815 + 0.00914165698246 -0.000167621407044 0.00702227892551 + 0.00191736280972 0.0139325445052 + + + 43.0 + + + 0.395348837209 0.155844155844 + + + 0.558139534884 0.0 0.0 1.02325581395 0.207792207792 0.155844155844 + 0.103896103896 0.155844155844 + + + 77.0 + + + 3.0 16.0 0.131386861314 5.0 3.0 2.0 + + + 0.0519480519481 0.987012987013 + + + 0.535789791604 + + + 0.657894736842 0.8 0.521052631579 0.02 0.655502392344 1.0 + 0.636363636364 0.0 0.712918660287 1.0 0.598086124402 0.0 + 0.588516746411 0.765550239234 0.521531100478 0.181818181818 + + + 0.355555555556 0.98 0.733333333333 0.58 0.4 0.155555555556 0.02 0.0 + 0.222222222222 1.0 1.0 0.9 1.0 0.488888888889 0.06 0.0 + 0.240740740741 1.0 1.0 1.0 1.0 0.240740740741 0.0 0.0 + 0.311111111111 1.0 1.0 1.0 1.0 0.222222222222 0.0 0.0 + 0.333333333333 1.0 1.0 1.0 1.0 0.2 0.0 0.0 0.444444444444 1.0 1.0 + 1.0 1.0 0.111111111111 0.0 0.0 0.355555555556 1.0 0.977777777778 + 0.96 1.0 0.155555555556 0.0 0.0 0.314814814815 0.666666666667 + 0.592592592593 0.6 0.666666666667 0.222222222222 0.3 0.366666666667 + + + 0.720472178802 0.0246428057786 0.0344705979451 0.0151411803779 + 0.68794777606 0.0478892860535 0.0204371590378 0.0409753511696 + 0.00662917844419 0.017634474795 0.306865188606 0.0745541913918 + 0.0671861755912 0.0191805011408 + + + + + + + + + 78 3 80 3 82 1 81 2 79 4 79 3 81 2 80 3 40 2 1 9 28 3 40 20 20 3 40 + 20 4 2 2 1 10 4 40 25 1 9 4 4 41 42 41 42 41 43 40 43 40 43 40 42 41 + 42 41 42 41 42 41 42 41 42 41 42 41 43 40 21 1 21 40 21 1 21 40 43 40 + 43 41 42 41 42 41 20 1 21 41 20 1 17 45 20 1 21 41 20 1 21 41 42 41 + 42 41 42 41 42 41 42 41 42 41 20 2 20 41 19 3 20 41 19 3 20 3 1 37 18 + 4 20 3 2 36 20 2 20 3 11 27 19 3 20 3 19 19 42 3 20 5 3 10 20 2 20 3 + 20 4 8 6 42 3 21 2 13 1 43 3 20 3 57 3 20 3 19 11 5 3 19 3 20 3 19 19 + 19 3 20 3 18 27 8 1 3 4 19 3 18 32 2 3 2 4 20 2 18 37 2 4 41 37 1 4 + 41 37 1 3 21 1 20 37 1 2 43 37 1 2 45 34 3 1 45 33 4 1 45 34 3 3 42 + 35 4 2 42 36 2 4 41 36 2 4 41 36 2 4 41 37 1 4 41 37 1 4 41 37 1 4 41 + 36 1 5 4 1 36 42 4 1 36 42 41 42 33 2 6 42 32 3 6 42 41 43 40 43 40 + 43 19 2 19 43 41 42 40 43 19 1 20 43 41 42 41 42 41 43 40 43 40 43 40 + 43 2 11 6 1 20 43 2 19 19 43 2 25 13 44 1 28 10 75 8 77 6 79 4 80 3 + 81 2 81 2 82 1 38 0 + + + + 8383.0 + + + 0.821782178218 + + + 3667.0 + + + 0.147804745023 + + + 0.723392461197 + + + 0.507702182285 0.500422688846 0.135584168439 0.150742409514 + -0.0893393925344 -0.000152317532474 0.00186515943477 + -0.00034986043198 0.000160756119205 + + + 83.0 + + + 0.469879518072 0.712871287129 + + + 0.0963855421687 0.481927710843 0.674698795181 0.626506024096 + 0.316831683168 0.831683168317 1.34653465347 0.356435643564 + + + 101.0 + + + 11.0 59.0 0.177057356608 5.0 3.0 3.0 + + + 0.0 0.990099009901 + + + 0.437432899916 + + + 0.0 0.142 0.906 0.478846153846 0.102857142857 0.127619047619 0.96 + 0.664835164835 0.638095238095 0.952380952381 0.20380952381 + 0.161172161172 0.540952380952 0.897142857143 0.230476190476 0.0 + + + 0.0 0.0 0.0 0.3 0.892307692308 0.725 0.615384615385 0.130769230769 + 0.0 0.0 0.0 0.246153846154 1.0 1.0 1.0 0.169230769231 0.0 0.0 0.0 + 0.0769230769231 0.86013986014 1.0 0.979020979021 0.258741258741 + 0.125 0.3 0.233333333333 0.215384615385 0.992307692308 1.0 + 0.961538461538 0.469230769231 0.316666666667 1.0 1.0 1.0 + 0.330769230769 0.308333333333 0.338461538462 0.338461538462 + 0.181818181818 1.0 0.954545454545 0.867132867133 0.188811188811 0.0 + 0.0 0.0 0.0916666666667 1.0 1.0 1.0 0.330769230769 0.0 0.0 0.0 + 0.265151515152 0.755244755245 0.787878787879 0.818181818182 + 0.426573426573 0.128787878788 0.0 0.0 + + + 0.460567721864 0.15480449591 0.00565786312621 0.00642844147173 + 0.0239455655012 0.361701687455 0.0391150985254 0.0227032835073 + 0.0116146345091 0.014429933319 0.208861057414 0.31265365604 + 0.0524117277181 0.0309685760842 + + + + + + + + + 143 2 179 3 178 5 175 7 174 9 172 14 167 29 2 1 3 2 144 37 144 37 144 + 37 144 37 145 36 144 37 144 37 145 36 145 36 145 36 145 36 145 36 145 + 36 145 36 145 36 145 36 145 36 6 2 137 36 5 5 135 36 5 5 135 35 6 6 + 134 28 13 8 133 7 2 22 9 9 132 6 3 26 5 9 132 35 5 9 132 35 5 10 130 + 36 5 13 127 36 5 14 127 35 4 16 126 35 4 17 124 8 1 27 4 17 124 8 3 + 25 4 17 125 7 4 12 1 10 6 10 2 4 125 8 3 23 6 10 1 5 86 2 37 34 6 17 + 85 8 31 35 5 17 85 15 11 3 8 37 4 18 85 20 3 10 5 35 5 19 2 3 79 20 4 + 14 1 34 5 25 77 75 4 27 75 21 1 23 1 29 4 29 73 20 4 51 4 31 72 20 3 + 19 6 27 3 32 71 20 2 20 13 20 3 33 70 20 2 20 23 10 4 34 68 20 2 19 + 27 7 4 36 66 42 22 2 1 8 4 38 4 2 58 42 20 13 3 28 2 10 4 2 57 42 19 + 14 1 31 1 18 55 42 19 6 1 6 2 29 2 1 1 18 54 42 22 10 3 29 1 1 2 20 + 51 43 28 2 5 20 3 5 4 27 42 47 27 2 4 22 3 6 1 26 43 46 28 1 5 21 6 + 30 45 45 28 3 2 7 1 1 2 10 8 27 47 45 28 1 5 21 1 3 3 15 3 9 47 44 29 + 2 5 37 1 5 2 17 1 2 36 43 30 1 6 20 1 3 2 3 2 5 4 28 34 43 35 20 3 1 + 3 3 5 2 8 26 33 43 34 21 1 11 3 4 9 24 31 42 35 31 1 10 8 25 29 42 35 + 21 2 9 2 3 1 39 27 42 35 20 3 14 4 6 2 29 26 42 35 18 7 23 3 30 23 42 + 35 17 11 8 2 6 10 28 22 42 35 18 10 18 9 31 18 42 35 6 5 9 10 10 12 + 37 15 43 35 4 7 8 11 15 4 39 15 42 36 5 7 8 11 60 12 42 30 3 3 4 10 5 + 13 57 14 42 30 3 3 4 11 4 15 58 11 42 31 1 4 4 12 1 20 61 4 44 35 4 + 35 107 36 2 37 106 36 2 40 28 5 47 2 21 36 2 42 78 1 22 36 2 43 60 4 + 36 36 2 44 57 11 7 3 21 36 2 45 32 7 16 16 2 6 19 35 3 47 31 6 16 32 + 11 36 2 50 29 4 17 36 7 36 1 54 48 37 6 35 2 53 4 1 44 37 4 36 2 54 2 + 3 31 1 12 37 3 36 2 60 1 3 37 39 3 36 1 66 15 2 19 40 2 36 2 66 15 1 + 20 76 3 66 37 75 3 69 35 74 3 75 29 75 2 77 27 75 2 77 27 74 3 75 2 6 + 21 74 3 83 21 74 2 84 20 75 2 63 4 17 21 74 2 63 7 2 5 5 1 1 21 74 2 + 62 43 74 2 61 45 73 2 64 42 73 2 66 40 73 2 68 38 73 3 68 37 73 3 71 + 34 73 2 74 31 74 2 76 30 73 2 80 4 1 20 74 3 80 10 2 13 73 3 82 24 71 + 4 86 20 72 3 88 18 72 3 90 18 70 3 92 16 70 3 93 14 71 3 94 12 72 4 + 94 11 74 1 95 11 71 4 101 6 70 4 178 3 178 2 179 2 178 3 179 2 180 1 + 283 1 179 3 177 4 178 3 72 0 + + + + 24616.0 + + + 1.33088235294 + + + 7180.0 + + + 0.193732590529 + + + 0.836042432881 + + + 0.542229959765 0.46447333127 0.383462480623 0.102908972052 + -0.0707061250106 -0.0789167177311 0.0212670498904 -0.0517612839921 + -0.000679963652971 + + + 181.0 + + + 1.25414364641 1.77941176471 + + + 1.63535911602 1.54696132597 0.75138121547 1.08287292818 + 0.411764705882 3.23529411765 2.61764705882 0.852941176471 + + + 136.0 + + + 37.0 154.0 0.263452914798 17.0 4.0 19.0 + + + 0.0 0.992647058824 + + + 0.291680207995 + + + 0.0496732026144 0.650326797386 0.227450980392 0.0503267973856 0.0 + 0.137908496732 0.634640522876 0.118954248366 0.0 0.5 0.595424836601 + 0.277777777778 0.657289002558 0.578644501279 0.182864450128 0.0 + + + 0.0 0.20320855615 0.804812834225 0.903743315508 0.449197860963 + 0.101604278075 0.112299465241 0.0935828877005 0.0 0.0 + 0.153452685422 0.757033248082 0.363171355499 0.0 0.0 0.0 0.0 0.0 + 0.0 0.486631016043 0.866310160428 0.163101604278 0.00267379679144 + 0.0 0.0 0.0 0.0 0.074168797954 0.895140664962 0.60358056266 + 0.462915601023 0.0 0.0 0.0 0.217391304348 0.360613810742 + 0.588235294118 0.795396419437 0.877237851662 0.204603580563 0.0 0.0 + 0.446524064171 0.994652406417 0.970588235294 0.0187165775401 + 0.00267379679144 0.00267379679144 0.542199488491 0.62915601023 + 0.685421994885 0.56010230179 0.585677749361 0.127877237852 0.0 0.0 + 0.57800511509 0.879795396419 0.869565217391 0.199488491049 + 0.0179028132992 0.0 0.0 0.0 + + + 0.471871598014 0.156018740629 0.111634431473 0.100464675779 + 0.185167198541 0.29597857586 0.0455651193261 0.275279048324 + 0.24433964715 0.062867483012 0.0985712868048 0.168488589691 + 0.138604975944 0.0258155216272 + + + + + + + + + 8 1 32 2 26 3 1 3 26 2 2 4 25 2 1 5 25 9 24 10 22 13 20 12 22 10 23 9 + 24 10 23 1 3 7 21 6 27 6 28 5 27 6 27 7 7 4 15 18 15 21 12 21 12 22 + 11 22 11 24 9 25 8 26 7 26 7 7 3 16 7 8 3 15 7 26 7 27 7 10 1 8 1 5 7 + 19 2 5 7 12 1 13 8 10 3 12 8 4 1 3 5 11 9 10 3 10 10 10 3 11 8 11 3 5 + 1 5 8 19 1 5 8 25 8 26 7 24 10 24 9 4 5 1 1 13 9 5 4 9 1 6 7 5 5 15 8 + 5 1 20 7 5 1 5 1 6 3 5 8 4 3 1 4 6 2 4 9 25 8 5 2 18 8 6 2 17 8 5 4 + 16 7 6 6 14 7 6 6 14 9 3 6 14 11 1 8 13 8 6 7 5 3 3 9 6 10 1 5 2 9 5 + 17 2 10 4 10 3 2 5 8 10 6 9 8 10 4 12 7 24 11 5 10 7 28 5 29 5 215 5 + 23 14 1 3 11 1 3 19 10 3 1 20 9 1 6 2 1 15 8 3 1 1 6 15 6 27 6 4 1 1 + 2 20 6 6 1 21 4 7 1 22 5 28 3 30 3 30 3 28 5 29 4 29 4 29 3 29 5 27 6 + 28 5 29 5 28 5 28 4 30 3 30 3 9 2 19 3 9 3 18 4 9 2 16 6 29 4 30 3 30 + 3 30 3 30 3 6 2 22 3 5 5 20 3 5 5 20 2 6 7 17 4 5 7 18 3 5 8 17 3 5 9 + 17 2 5 9 16 3 5 10 15 3 6 10 13 4 5 15 9 4 5 16 8 4 5 16 8 4 5 15 9 5 + 4 16 8 5 4 17 8 4 5 16 8 5 5 16 7 5 4 18 5 5 5 17 6 5 5 28 4 29 5 28 + 5 28 5 29 4 29 4 28 4 30 4 29 4 29 4 29 4 29 4 28 5 29 4 30 3 30 3 29 + 4 30 3 25 0 + + + + 4818.0 + + + 0.22602739726 + + + 2449.0 + + + 0.283789301756 + + + 1.10570790816 + + + 0.457916496529 0.484896016671 0.028561198949 0.517950722111 + 0.017276094914 0.000480390182645 -0.0158702581078 0.00428496229516 + -0.031183485259 + + + 33.0 + + + 4.57575757576 0.561643835616 + + + 5.45454545455 7.0303030303 3.0303030303 2.78787878788 + 0.383561643836 0.931506849315 0.438356164384 0.493150684932 + + + 146.0 + + + 13.0 73.0 0.238095238095 6.0 12.0 4.0 + + + 0.0 0.993150684932 + + + 0.508302200083 + + + 0.635416666667 0.513513513514 0.704861111111 0.560810810811 + 0.631944444444 0.452702702703 0.881944444444 0.0337837837838 + 0.482638888889 0.712837837838 0.940972222222 0.22972972973 + 0.151234567901 0.297297297297 0.604938271605 0.396396396396 + + + 0.305555555556 0.458333333333 0.361111111111 0.223684210526 0.5 + 0.625 0.402777777778 0.0921052631579 0.791666666667 0.986111111111 + 0.930555555556 0.552631578947 0.708333333333 0.986111111111 + 0.819444444444 0.934210526316 0.611111111111 0.916666666667 + 0.680555555556 0.171052631579 0.777777777778 0.847222222222 + 0.0138888888889 0.0 0.138888888889 0.861111111111 0.805555555556 + 0.184210526316 0.930555555556 0.972222222222 0.125 0.0 + 0.0555555555556 1.0 1.0 0.460526315789 0.888888888889 1.0 + 0.402777777778 0.0 0.0 0.875 0.888888888889 0.526315789474 0.875 + 1.0 0.541666666667 0.0 0.0 0.666666666667 0.833333333333 + 0.513157894737 0.75 1.0 0.944444444444 0.0 0.0 0.0111111111111 0.0 + 0.0 0.244444444444 0.533333333333 0.711111111111 0.0 + + + 0.513128781967 0.198303937512 0.0325979986942 0.0228639964722 + 0.272943997025 0.436818491096 0.112636144524 0.109247327906 + 0.0476248864231 0.0394553155754 0.0712364248482 0.460026550064 + 0.260096305305 0.0649135348136 + + + + + + + + + 66 2 100 4 99 4 98 5 100 2 101 2 101 2 100 3 82 17 1 3 74 29 67 36 67 + 36 67 37 66 36 67 36 67 37 66 36 67 37 67 36 67 36 67 36 67 36 67 36 + 67 36 67 36 67 36 67 36 68 35 68 35 68 35 68 35 68 35 68 35 68 35 68 + 35 69 35 68 34 69 34 69 34 69 34 69 33 70 33 70 33 30 1 39 33 30 2 37 + 34 30 2 37 34 30 2 36 37 28 2 35 62 4 2 6 1 27 69 6 1 26 24 10 36 6 3 + 2 13 8 14 22 35 6 36 27 34 6 20 1 15 27 34 6 17 4 15 27 34 6 17 4 15 + 27 34 6 17 4 15 28 33 6 17 3 16 28 34 4 17 3 17 27 37 2 38 25 38 2 39 + 24 37 2 39 26 36 1 40 26 36 1 42 23 79 24 36 2 41 26 33 3 41 26 33 3 + 40 27 33 4 39 27 33 6 38 26 33 6 38 26 4 1 28 6 38 26 4 1 28 7 37 26 + 33 7 37 26 33 7 37 26 33 6 38 26 33 6 38 26 33 6 38 26 33 6 38 26 33 + 7 37 26 34 6 37 26 33 8 36 26 33 8 36 26 33 8 37 25 33 8 37 25 33 7 + 30 1 4 2 1 25 33 7 38 25 33 7 38 25 33 7 38 25 33 8 37 26 10 1 21 8 + 37 50 8 8 37 54 4 8 8 1 28 56 2 8 5 15 17 56 2 9 3 27 6 56 2 9 3 29 4 + 56 2 9 3 30 3 57 1 9 3 31 2 67 3 32 1 67 3 101 2 101 2 94 0 + + + + 10403.0 + + + 1.0198019802 + + + 4536.0 + + + 0.133818342152 + + + 0.961508852964 + + + 0.496701767127 0.561225749559 0.166497367691 0.118112023678 + -0.00912020661172 0.00405738300639 -0.00250468897843 + 0.0277548708875 -0.0170795767221 + + + 103.0 + + + 0.31067961165 0.752475247525 + + + 0.271844660194 0.466019417476 0.427184466019 0.0388349514563 + 0.039603960396 0.356435643564 1.38613861386 1.22772277228 + + + 101.0 + + + 7.0 36.0 0.176470588235 4.0 1.0 5.0 + + + 0.0 0.990099009901 + + + 0.436028068826 + + + 0.0 0.0032 0.8752 0.581538461538 0.452307692308 0.658461538462 + 0.584615384615 0.461538461538 0.495384615385 0.707692307692 + 0.407692307692 0.205621301775 0.0 0.113846153846 0.910769230769 + 0.507396449704 + + + 0.0 0.0 0.0 0.0128205128205 0.807692307692 0.826388888889 + 0.660256410256 0.352564102564 0.0 0.0 0.0 0.0 0.863905325444 1.0 + 1.0 0.301775147929 0.0769230769231 0.420118343195 0.307692307692 + 0.325443786982 0.976331360947 1.0 0.994082840237 0.396449704142 + 0.269230769231 1.0 1.0 1.0 0.147928994083 0.217948717949 + 0.254437869822 0.201183431953 0.333333333333 1.0 1.0 0.940828402367 + 0.0 0.0 0.0 0.0 0.25 0.366863905325 0.391025641026 0.497041420118 + 0.85798816568 0.769230769231 0.769230769231 0.0532544378698 0.0 0.0 + 0.0 0.230769230769 1.0 1.0 1.0 0.0710059171598 0.0 0.0 0.0 + 0.207100591716 0.863905325444 0.775641025641 0.775147928994 + 0.183431952663 + + + 0.326782748175 0.0570625093571 0.0511885684517 0.159766936297 + 0.155564555626 0.0895613376378 0.0122380800288 0.0953836795756 + 0.321676167682 0.0130203536849 0.209932499917 0.0369738471473 + 0.0804294923224 0.0344713615407 + + + + + + + + + 0 3 33 2 42 2 26 6 1 4 42 2 15 21 42 2 7 29 42 38 42 37 43 37 43 37 + 43 38 42 38 42 38 42 37 43 38 42 38 42 38 42 38 42 38 42 38 43 37 43 + 37 43 37 43 37 43 37 43 33 47 37 43 37 43 3 5 29 43 4 1 32 43 37 43 + 37 43 37 43 37 43 37 43 37 36 1 6 37 35 2 6 37 34 4 6 36 34 2 8 36 34 + 3 7 36 34 3 7 36 34 4 6 36 20 1 3 4 5 5 6 37 11 26 6 74 6 74 6 19 2 1 + 4 46 8 15 19 39 7 9 25 39 8 2 31 39 8 1 33 38 8 1 32 39 8 1 32 39 8 1 + 32 39 8 1 33 38 8 1 33 38 42 38 42 31 2 5 42 39 40 40 39 42 38 41 40 + 40 40 40 40 40 40 40 41 39 40 40 41 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 41 39 41 39 41 39 41 40 40 40 40 40 40 + 40 40 22 3 15 39 14 13 3 1 1 1 8 39 4 7 1 21 8 39 4 1 1 23 2 3 7 38 1 + 1 5 24 1 5 5 38 1 1 5 25 1 4 4 41 5 30 5 40 5 30 5 39 4 1 1 30 5 39 4 + 1 1 30 5 39 4 32 5 38 1 1 3 32 5 39 5 32 5 38 5 31 6 38 5 32 5 39 4 + 32 5 38 5 32 5 39 4 32 5 39 4 33 4 39 4 33 3 40 5 32 3 41 4 32 3 41 4 + 32 3 41 3 34 1 79 2 1 0 + + + + 8720.0 + + + 0.733944954128 + + + 3586.0 + + + 0.154210819855 + + + 1.47818861654 + + + 0.514564374819 0.434795294458 0.13624646008 0.186913649884 + 0.111600516729 -0.00172549284204 -0.00288036831842 + -0.00334217513025 0.00820826160563 + + + 80.0 + + + 0.4875 0.605504587156 + + + 0.3 0.8 0.2 0.65 0.220183486239 0.844036697248 0.0366972477064 + 1.32110091743 + + + 109.0 + + + 5.0 34.0 0.220394736842 7.0 5.0 4.0 + + + 0.0 0.990825688073 + + + 0.41123853211 + + + 0.822222222222 0.640740740741 0.0 0.0 0.887037037037 0.674074074074 + 0.111111111111 0.0660714285714 0.0 0.462962962963 1.0 + 0.291071428571 0.0 0.440740740741 0.874074074074 0.344642857143 + + + 0.692307692308 0.8 0.761538461538 0.407142857143 0.0 0.0 0.0 0.0 + 0.784615384615 1.0 1.0 0.428571428571 0.0 0.0 0.0 0.0 + 0.861538461538 1.0 1.0 0.314285714286 0.0 0.0 0.0 0.0 + 0.807692307692 0.871428571429 0.9 0.521428571429 0.271428571429 + 0.169230769231 0.157142857143 0.107142857143 0.0 0.0 0.0 + 0.857142857143 1.0 1.0 0.571428571429 0.292857142857 0.0 0.0 0.0 + 0.928571428571 1.0 1.0 0.3 0.0 0.0 0.0 0.0 0.957142857143 + 0.992857142857 1.0 0.321428571429 0.0 0.0 0.0 0.146153846154 + 0.607142857143 0.7 0.807692307692 0.664285714286 0.392857142857 + + + 0.531265326434 0.15003107512 0.0145553839932 0.014122005431 + 0.205211898009 0.371840791554 0.0527256787527 0.0799215207803 + 0.0691533802699 0.00402143007937 0.100747869723 0.399459440988 + 0.117479197176 0.0334723426914 + + + + + + + + + 30 1 96 2 95 6 8 1 17 1 64 33 64 33 64 33 64 33 64 33 64 33 64 31 66 + 31 66 33 65 32 65 32 65 33 64 33 63 34 63 34 63 34 63 34 64 33 64 34 + 63 34 63 34 63 34 63 34 63 34 26 1 7 2 27 33 28 1 6 2 27 33 28 1 4 5 + 25 35 26 3 4 4 25 36 26 1 5 4 25 36 26 1 5 4 26 34 33 5 25 35 25 3 4 + 5 25 35 25 3 4 6 24 19 3 13 23 6 3 5 25 18 4 11 25 5 4 4 27 17 4 11 + 27 2 6 3 27 32 27 2 6 3 26 34 26 2 7 2 26 34 26 2 7 4 23 7 2 28 24 2 + 7 17 1 63 7 2 7 33 5 46 4 2 7 32 13 3 8 30 2 2 7 33 24 29 1 3 6 34 24 + 33 6 34 25 32 6 34 25 33 5 34 25 33 5 34 25 33 5 34 25 33 5 34 25 33 + 5 34 25 33 5 34 25 33 5 35 24 33 5 35 24 33 5 35 24 33 6 34 24 33 5 + 35 24 33 5 35 24 33 5 35 24 34 4 35 24 33 5 5 1 29 24 34 7 1 4 27 25 + 3 3 27 5 34 24 6 2 26 5 34 24 34 5 34 24 7 2 25 5 34 24 8 2 24 5 34 + 24 34 5 34 25 33 5 34 25 33 5 34 25 33 5 34 25 33 5 35 24 33 5 35 24 + 33 6 34 24 33 5 35 24 33 6 34 24 33 6 34 24 34 5 34 24 34 4 35 24 34 + 4 5 3 27 24 34 4 4 27 4 24 3 13 18 5 3 28 3 24 2 18 14 5 2 57 1 20 12 + 5 2 57 1 21 2 3 6 5 2 57 1 28 4 5 2 57 1 29 3 5 3 56 1 30 3 3 4 55 3 + 29 3 4 3 86 4 93 3 94 3 95 2 195 0 + + + + 9409.0 + + + 1.0 + + + 4301.0 + + + 0.156940246454 + + + 1.05058692007 + + + 0.497883244207 0.518566418662 0.16513683363 0.117321212783 + 0.00975721335854 0.00275051137649 0.00133955848622 0.0268082606167 + -0.0144613685183 + + + 97.0 + + + 0.546391752577 1.12371134021 + + + 0.577319587629 0.371134020619 0.824742268041 0.412371134021 + 0.0824742268041 1.85567010309 1.23711340206 1.31958762887 + + + 97.0 + + + 2.0 33.0 0.204301075269 6.0 3.0 4.0 + + + 0.0 0.969072164948 + + + 0.457115527686 + + + 0.0 0.321180555556 0.888888888889 0.415 0.659722222222 0.6875 + 0.529513888889 0.265 0.564236111111 0.6875 0.4375 0.205 0.0 0.245 + 0.896666666667 0.5344 + + + 0.0 0.0 0.256944444444 0.534722222222 0.826388888889 0.729166666667 + 0.666666666667 0.134615384615 0.0 0.0 0.0 0.493055555556 1.0 1.0 + 0.916666666667 0.0 0.4375 0.444444444444 0.4375 0.694444444444 1.0 + 1.0 0.930555555556 0.00641025641026 0.756944444444 1.0 1.0 + 0.618055555556 0.0347222222222 0.0833333333333 0.152777777778 + 0.0128205128205 0.75 1.0 0.979166666667 0.638888888889 0.0 0.0 0.0 + 0.0 0.166666666667 0.340277777778 0.4375 0.694444444444 + 0.916666666667 0.833333333333 0.784722222222 0.0641025641026 0.0 + 0.0 0.0 0.5 1.0 1.0 0.958333333333 0.0128205128205 0.0 0.0 + 0.128205128205 0.352564102564 0.769230769231 0.833333333333 + 0.878205128205 0.337278106509 + + + 0.411230399943 0.049704787947 0.0502694153635 0.122252246564 + 0.0643760252636 0.0948065990498 0.0152130279457 0.0918696200965 + 0.299340238935 0.0225464205271 0.276428769774 0.0590077192899 + 0.037983023134 0.0361401781408 + + + + + + + + + 2 2 46 3 45 3 45 3 44 4 45 2 46 2 44 4 45 3 37 2 7 1 37 3 7 2 3 1 6 2 + 1 6 1 3 4 1 7 4 6 34 4 4 7 32 1 7 8 28 1 11 8 40 8 19 1 20 8 19 1 21 + 7 19 1 21 7 4 1 14 2 19 9 4 1 13 2 17 11 3 3 13 1 19 9 4 1 35 7 41 7 + 40 8 41 7 41 7 42 6 41 8 40 8 40 7 41 7 40 9 35 13 37 11 39 9 41 7 6 + 2 33 7 41 7 42 6 42 6 42 6 42 6 42 6 42 7 41 7 41 7 41 7 41 7 42 5 43 + 6 42 6 42 6 18 3 21 6 18 4 20 6 4 3 12 4 20 5 4 5 1 2 5 7 20 4 4 20 + 20 3 6 23 15 4 6 25 12 5 6 25 12 6 4 27 12 5 4 29 10 4 6 26 12 5 5 26 + 12 4 5 31 7 5 6 31 7 4 6 31 6 5 6 42 7 41 7 40 11 17 1 19 1 1 17 7 5 + 17 25 1 10 13 36 12 36 12 38 10 38 10 39 9 39 9 39 9 18 2 18 11 17 2 + 18 11 18 1 18 11 38 10 39 9 38 9 39 9 39 8 41 7 40 8 40 8 40 9 39 10 + 35 12 6 4 25 13 5 5 29 9 5 5 29 9 6 4 29 9 7 1 31 9 40 7 41 7 41 8 40 + 8 40 8 40 8 40 8 40 8 40 8 41 7 41 8 40 8 40 8 40 8 40 8 40 8 7 1 32 + 7 5 4 2 1 7 1 1 4 16 7 6 19 16 7 6 21 14 8 4 25 10 9 3 26 11 9 2 28 8 + 10 2 29 7 8 5 29 6 8 5 28 7 9 3 30 7 8 4 31 4 10 3 31 5 44 3 45 4 44 + 4 45 3 4 0 + + + + 6336.0 + + + 0.363636363636 + + + 3949.0 + + + 0.163079260572 + + + 1.04761388019 + + + 0.48694794804 0.493121265602 0.0386083091189 0.291441546667 + 0.005770221427 -0.000110216716309 -0.000204580986417 + 0.000169052694433 0.0055846818244 + + + 48.0 + + + 2.1875 0.515151515152 + + + 3.16666666667 1.5 1.25 2.83333333333 0.636363636364 0.545454545455 + 0.393939393939 0.484848484848 + + + 132.0 + + + 8.0 53.0 0.279255319149 3.0 6.0 2.0 + + + 0.0 0.992424242424 + + + 0.623263888889 + + + 0.603535353535 0.603535353535 0.686868686869 0.494949494949 + 0.666666666667 0.669191919192 0.820707070707 0.540404040404 + 0.669191919192 0.719696969697 0.830808080808 0.588383838384 + 0.366161616162 0.775252525253 0.373737373737 0.563131313131 + + + 0.520833333333 0.607843137255 0.447916666667 0.401960784314 + 0.510416666667 0.490196078431 0.46875 0.274509803922 0.322916666667 + 0.941176470588 0.979166666667 0.598039215686 0.895833333333 + 0.852941176471 1.0 0.264705882353 0.34375 1.0 1.0 0.382352941176 + 0.697916666667 0.960784313725 1.0 0.107843137255 0.354166666667 + 0.93137254902 1.0 0.333333333333 0.614583333333 0.990196078431 1.0 + 0.107843137255 0.34375 1.0 1.0 0.333333333333 0.635416666667 1.0 + 1.0 0.0980392156863 0.291666666667 1.0 1.0 0.578431372549 + 0.666666666667 1.0 1.0 0.303921568627 0.34375 0.941176470588 + 0.979166666667 0.921568627451 0.5 0.921568627451 1.0 0.754901960784 + 0.0416666666667 0.117647058824 0.416666666667 0.774509803922 + 0.0416666666667 0.0196078431373 0.239583333333 0.264705882353 + + + 0.447997296446 0.194368811013 0.0158739082772 0.00468533623789 + 0.0990053035356 0.393806596349 0.0813603438927 0.00609386119885 + 0.00859577131555 0.00407365006705 0.0658622265885 0.264923186386 + 0.196368669134 0.0260771939318 + + + + + + + + + 0 2 10 2 11 4 9 5 7 5 2 3 3 9 3 7 5 6 8 1 6 0 + + + + 108.0 + + + 1.33333333333 + + + 44.0 + + + 1.09090909091 + + + 0.955555555556 + + + 0.464876033058 0.551136363636 0.19030569121 0.0881386175808 + 0.0655756949662 0.021907359358 -0.0250038852172 -0.0248254607152 + -0.010935217811 + + + 12.0 + + + 0.0 0.111111111111 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.444444444444 0.0 + + + 9.0 + + + 1.0 3.0 0.4 0.0 2.0 2.0 + + + 0.0 0.888888888889 + + + 0.407407407407 + + + 0.666666666667 0.5 0.166666666667 0.0 0.0 0.833333333333 1.0 + 0.777777777778 0.0 0.166666666667 0.666666666667 0.666666666667 0.0 + 0.0 1.0 0.111111111111 + + + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5 1.0 0.5 0.5 0.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.5 1.0 1.0 1.0 1.0 0.75 0.0 + 0.0 0.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.5 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 + + + 0.451792767923 0.150202581286 0.12617660842 0.135793916214 + 0.320403659406 0.150139522583 0.0645583847167 0.174799427458 + 0.102867672905 0.156544980101 0.091435817596 0.151110870936 + 0.101034054085 0.0821798671554 + + + + + + + + + 5 2 149 3 148 6 145 19 1 12 119 33 118 34 117 34 117 34 117 34 117 17 + 1 1 1 14 117 17 3 14 117 34 117 33 118 33 118 34 117 34 117 34 117 34 + 117 34 117 34 117 34 117 34 117 34 117 34 117 15 4 12 120 16 3 14 118 + 35 115 37 114 39 113 38 113 37 114 36 115 36 115 36 17 5 94 1 2 31 17 + 6 94 1 2 14 2 15 16 8 93 1 1 15 2 15 16 10 91 33 17 11 90 34 16 13 88 + 17 1 16 16 15 86 34 16 15 88 32 16 17 85 33 15 19 84 33 15 20 83 33 + 15 22 86 28 15 23 89 24 15 25 106 4 16 26 105 2 17 28 104 2 17 29 104 + 1 17 30 103 1 17 32 101 1 17 34 99 1 17 34 117 1 6 27 116 3 5 21 122 + 6 1 11 2 8 123 18 2 9 5 1 116 28 6 1 116 28 6 1 116 27 6 3 116 27 5 3 + 2 2 114 25 1 1 8 2 116 23 1 1 7 3 118 24 4 6 118 24 3 6 119 23 3 6 + 121 21 4 4 61 1 60 21 1 7 61 1 47 4 8 20 4 4 63 1 47 6 2 26 1 5 63 1 + 47 30 2 2 1 6 62 2 33 1 12 30 2 9 62 2 33 1 12 42 61 6 28 2 12 5 1 1 + 1 33 62 9 1 3 20 3 13 4 1 34 63 21 5 1 5 5 13 3 1 33 64 37 14 36 64 + 37 18 32 64 37 23 27 64 37 23 1 1 25 64 37 21 29 64 37 23 1 1 24 65 + 37 23 4 5 17 64 38 25 1 8 5 3 7 64 38 26 1 8 4 3 7 64 38 27 4 4 4 2 8 + 63 40 27 20 63 41 28 20 62 42 27 20 62 43 30 17 61 43 32 15 25 5 31 + 42 34 13 26 9 28 41 35 12 27 4 33 40 35 12 27 5 33 39 34 13 26 8 31 + 39 38 7 26 11 30 39 40 5 26 12 30 4 1 33 41 3 27 11 31 4 1 33 42 1 28 + 14 27 4 3 32 71 14 28 3 4 31 71 19 23 38 70 19 24 30 2 6 70 15 1 2 25 + 38 70 15 1 3 2 2 20 39 69 24 20 38 69 25 19 38 69 26 18 38 68 28 17 + 38 68 30 15 38 68 30 16 37 68 32 14 37 67 34 13 37 67 35 12 37 67 35 + 12 37 67 17 2 17 11 37 68 37 10 36 68 5 2 31 9 2 6 28 67 40 9 1 18 17 + 67 28 2 9 35 10 68 27 3 3 1 5 37 7 70 26 7 4 38 6 71 25 6 4 40 5 72 + 24 7 3 41 4 74 22 8 1 42 4 75 21 8 1 43 3 75 21 6 3 43 3 76 20 5 4 44 + 2 78 19 4 4 44 2 78 26 46 1 78 26 124 16 3 8 119 21 7 3 113 16 3 10 2 + 7 114 1 1 13 6 16 117 12 5 17 120 1 5 3 5 17 118 3 3 6 4 16 119 32 + 121 3 3 24 125 26 125 25 131 20 132 19 132 19 131 19 133 1 4 13 138 + 13 133 1 1 16 134 7 1 8 136 15 137 14 137 14 138 14 140 11 140 10 144 + 7 144 7 142 9 8 0 + + + + 24009.0 + + + 0.949685534591 + + + 6216.0 + + + 0.195624195624 + + + 1.56234652115 + + + 0.399014371514 0.495317310982 0.32241828316 0.247854748402 + 0.168829010621 0.103370253748 0.0153410250343 0.0862728875124 + -0.0221568381514 + + + 151.0 + + + 1.27814569536 1.19496855346 + + + 1.43046357616 1.16556291391 0.76821192053 1.69536423841 + 0.427672955975 1.61006289308 1.68553459119 0.981132075472 + + + 159.0 + + + 24.0 127.0 0.243243243243 15.0 5.0 6.0 + + + 0.0 0.993710691824 + + + 0.258902911408 + + + 0.787941787942 0.239864864865 0.893918918919 0.00945945945946 + 0.0951417004049 0.528947368421 0.184868421053 0.0335526315789 0.0 + 0.258552631579 0.182236842105 0.00592105263158 0.0 0.0 + 0.382236842105 0.559210526316 + + + 0.640350877193 0.7 0.208333333333 0.197222222222 0.891666666667 + 0.677777777778 0.00277777777778 0.0 0.825484764543 0.968421052632 + 0.423684210526 0.126315789474 1.0 0.994736842105 0.0342105263158 + 0.0 0.0747922437673 0.160526315789 0.15 0.160526315789 + 0.221052631579 0.3 0.134210526316 0.0 0.0 0.139473684211 + 0.931578947368 0.873684210526 0.218421052632 0.0 0.0 0.0 0.0 0.0 + 0.310526315789 0.723684210526 0.639473684211 0.00263157894737 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0868421052632 0.0236842105263 0.0 0.0 0.0 + 0.0 0.0 0.171052631579 0.947368421053 0.726315789474 0.231578947368 + 0.0 0.0 0.0 0.0 0.0 0.410526315789 0.681578947368 0.597368421053 + + + 0.448570540211 0.153518864889 0.163368116482 0.115745085449 + 0.184265319294 0.16697550574 0.120847948347 0.20517789797 + 0.230593905625 0.102891881298 0.0807217692926 0.148651531659 + 0.203105717404 0.0787611720859 + + + + + + + + + 45 1 75 2 74 1 74 4 73 4 49 2 21 9 4 4 14 2 1 3 17 1 21 10 4 5 14 3 + 17 2 21 4 1 5 2 8 13 9 3 1 7 2 21 21 12 9 3 6 2 2 21 22 10 7 7 1 1 1 + 2 4 21 23 9 8 5 5 1 4 21 24 8 10 4 9 21 24 8 10 3 10 21 25 7 10 2 11 + 21 26 6 10 3 10 21 26 7 9 2 12 20 26 7 10 2 11 20 27 6 23 20 4 1 22 5 + 24 20 4 1 22 5 24 20 27 5 24 20 27 5 24 20 27 5 24 20 27 5 24 20 25 7 + 24 20 25 7 24 20 26 6 24 20 17 2 7 6 24 21 5 1 10 3 6 6 7 1 2 3 1 6 4 + 21 5 2 1 1 7 3 6 6 6 2 1 6 10 21 4 5 6 3 7 5 4 1 1 2 1 1 1 2 12 21 4 + 6 4 4 7 5 4 1 1 2 2 3 11 33 3 5 1 4 1 5 6 2 2 3 11 20 2 3 1 7 3 5 2 3 + 1 5 24 20 6 8 2 4 7 5 25 19 9 4 3 4 7 5 25 19 3 1 13 1 9 5 24 20 4 2 + 21 4 25 20 3 4 2 2 1 1 4 2 9 4 25 19 3 6 7 3 8 5 24 20 3 7 17 5 24 20 + 3 8 16 5 12 2 10 20 3 9 15 5 12 3 2 2 5 20 3 10 14 5 24 20 3 11 13 6 + 23 20 3 12 12 6 23 20 3 13 11 5 25 19 3 14 10 6 24 19 3 15 10 5 23 20 + 3 16 8 5 5 1 3 4 11 20 3 17 7 5 4 12 8 20 4 10 1 5 7 5 4 14 7 19 5 10 + 1 5 7 4 3 13 10 17 7 15 7 4 3 14 9 17 7 16 5 5 3 15 7 19 6 17 4 6 2 + 17 5 19 6 27 2 17 6 18 7 26 2 16 8 18 6 26 2 15 9 18 6 3 1 43 5 17 8 + 2 1 43 4 19 15 3 4 26 1 4 3 20 16 1 1 29 1 5 4 19 17 1 4 31 4 19 18 1 + 1 1 1 31 3 20 10 1 7 1 2 32 3 20 22 30 5 19 23 29 4 20 11 1 11 29 4 + 20 11 1 11 30 4 19 24 30 3 19 25 28 3 20 25 28 3 20 26 27 3 20 26 27 + 3 21 24 29 2 21 24 29 3 20 24 29 3 20 24 29 3 20 10 2 12 29 2 21 4 2 + 5 1 11 30 2 21 11 2 2 1 1 3 3 30 2 21 8 5 2 1 1 2 2 1 1 30 2 21 8 5 9 + 31 2 21 8 6 9 30 2 22 7 6 7 32 2 22 7 7 7 31 2 22 2 1 4 7 8 30 3 21 7 + 6 9 30 3 21 7 7 8 30 3 21 6 10 6 30 3 21 6 10 7 29 3 21 6 7 10 29 3 + 21 7 6 10 29 4 20 6 7 5 2 3 29 5 19 6 7 5 3 2 29 4 19 7 7 5 2 4 28 3 + 20 9 1 1 2 6 1 6 27 4 19 5 1 20 27 5 18 9 4 6 1 6 27 5 18 5 1 1 1 11 + 1 6 26 6 18 7 3 2 1 14 25 6 18 7 6 13 27 5 18 7 6 13 27 5 18 8 5 14 + 26 5 18 8 6 13 26 5 19 6 7 15 24 5 19 6 8 14 24 6 18 7 7 12 26 6 17 8 + 7 11 1 2 24 6 18 6 9 1 1 9 26 6 18 6 11 8 27 6 18 7 8 10 27 6 19 5 11 + 1 4 1 30 4 20 5 72 3 73 3 74 2 73 4 73 3 48 4 21 3 47 6 19 5 46 6 19 + 5 46 7 18 6 45 6 19 6 45 6 19 6 45 6 20 5 45 6 20 5 46 6 19 5 45 6 20 + 6 44 6 20 6 44 7 19 6 45 6 19 6 45 6 19 7 44 6 20 6 44 6 20 6 44 6 20 + 6 44 6 20 6 44 6 21 5 44 6 21 5 44 6 21 5 44 6 21 5 44 6 22 4 46 1 1 + 2 22 4 48 2 22 4 73 2 19 0 + + + + 11096.0 + + + 0.520547945205 + + + 3596.0 + + + 0.349276974416 + + + 1.07145631068 + + + 0.557704857249 0.39766790687 0.132546734042 0.383223882838 + 0.0544999544498 -0.0201034478616 0.00552818515452 -0.0223282838089 + 0.125758149347 + + + 76.0 + + + 2.60526315789 2.06849315068 + + + 1.89473684211 1.63157894737 2.68421052632 4.21052631579 + 2.43835616438 2.46575342466 2.24657534247 1.09589041096 + + + 146.0 + + + 37.0 148.0 0.210084033613 17.0 0.0 4.0 + + + 0.0 0.993150684932 + + + 0.32408074982 + + + 0.634502923977 0.409672830725 0.0 0.0 0.232456140351 0.293029871977 + 0.18567251462 0.251778093883 0.472222222222 0.375533428165 + 0.413742690058 0.24893314367 0.523391812865 0.4893314367 + 0.58918128655 0.0782361308677 + + + 0.512345679012 0.814814814815 0.783950617284 0.0818713450292 0.0 + 0.0 0.0 0.0 0.338888888889 0.877777777778 0.8 0.0157894736842 0.0 + 0.0 0.0 0.0 0.308641975309 0.672839506173 0.703703703704 + 0.538011695906 0.277777777778 0.432098765432 0.265432098765 + 0.210526315789 0.0 0.0 0.0 0.0 0.0 0.0666666666667 0.177777777778 + 0.347368421053 0.216049382716 0.172839506173 0.228395061728 + 0.146198830409 0.0123456790123 0.0 0.0 0.0 0.694444444444 0.75 + 0.266666666667 0.810526315789 0.844444444444 0.716666666667 + 0.488888888889 0.457894736842 0.66049382716 0.765432098765 + 0.586419753086 0.567251461988 0.685185185185 0.62962962963 + 0.0679012345679 0.0701754385965 0.188888888889 0.516666666667 + 0.622222222222 0.210526315789 0.416666666667 0.638888888889 + 0.177777777778 0.0 + + + 0.511382732483 0.11753614723 0.120550672555 0.0754813413002 + 0.209186670394 0.217607665604 0.033719358956 0.136568810946 + 0.12096314153 0.0538179223693 0.159369615542 0.197675153116 + 0.042593491945 0.0275844577289 + + + + + + + + + 37 1 40 1 34 3 39 1 34 2 39 2 33 3 39 3 13 1 1 20 39 9 2 27 39 38 39 + 38 39 38 39 38 39 38 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 + 40 37 40 38 39 38 40 37 39 39 37 41 36 41 37 39 38 39 38 39 37 39 40 + 37 40 37 33 2 5 37 33 2 6 36 33 2 6 36 32 3 5 37 32 3 5 37 24 11 5 37 + 20 15 6 36 12 23 6 37 6 28 6 38 1 32 6 71 6 71 6 71 7 70 6 71 6 18 2 + 51 6 12 22 37 6 4 30 37 7 2 31 38 40 35 42 36 41 37 40 37 40 37 40 37 + 40 37 40 37 40 33 44 31 46 32 45 34 43 4 2 28 2 1 41 3 2 31 40 38 40 + 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 + 40 36 41 33 45 27 50 21 56 13 64 10 67 4 73 3 73 5 74 3 31 2 75 2 + + + + 6776.0 + + + 0.875 + + + 3196.0 + + + 0.130788485607 + + + 1.50715376037 + + + 0.495154304723 0.481115043229 0.140000323353 0.14127480739 + 0.0952353711961 -0.000435323594606 -0.000102708531574 + -0.0013766015212 0.00241148199986 + + + 77.0 + + + 0.285714285714 0.272727272727 + + + 0.25974025974 0.0 0.415584415584 0.467532467532 0.272727272727 + 0.454545454545 0.318181818182 0.0454545454545 + + + 88.0 + + + 3.0 19.0 0.244444444444 5.0 2.0 3.0 + + + 0.0 0.988636363636 + + + 0.471664698937 + + + 0.763157894737 0.8995215311 0.155502392344 0.0 0.837320574163 1.0 + 0.138755980861 0.0 0.00717703349282 0.284688995215 0.985645933014 + 0.732057416268 0.0 0.318181818182 0.840909090909 0.590909090909 + + + 0.616161616162 0.888888888889 0.878787878788 0.69696969697 + 0.292929292929 0.0 0.0 0.0 0.545454545455 1.0 1.0 1.0 + 0.327272727273 0.0 0.0 0.0 0.636363636364 1.0 1.0 1.0 + 0.252525252525 0.0 0.0 0.0 0.709090909091 1.0 1.0 1.0 0.3 0.0 0.0 + 0.0 0.00909090909091 0.0181818181818 0.172727272727 0.445454545455 + 1.0 0.945454545455 0.9 0.590909090909 0.0 0.0 0.0 0.515151515152 + 1.0 1.0 1.0 0.434343434343 0.0 0.0 0.0 0.654545454545 1.0 1.0 1.0 + 0.309090909091 0.0 0.0 0.0363636363636 0.581818181818 + 0.727272727273 0.636363636364 0.9 0.154545454545 + + + 0.475430460706 0.162354582289 0.00375713161842 0.00702486762786 + 0.0688943469841 0.376380668585 0.0523381873141 0.0111071515855 + 0.0136625936378 0.00606315069999 0.148671818675 0.312360275738 + 0.103683268424 0.0318279902745 + + + + + + + + + 10 2 31 4 31 5 30 6 29 6 29 6 28 7 28 7 27 9 25 1 1 10 24 10 25 4 1 1 + 29 4 4 1 26 4 4 4 23 4 4 6 21 15 20 15 19 17 18 17 18 17 19 17 17 20 + 15 20 14 22 14 22 13 16 2 2 15 16 18 17 18 16 19 4 1 11 27 8 28 7 29 + 6 19 3 3 1 2 6 20 3 2 12 19 18 16 19 16 6 2 10 18 5 3 9 18 5 3 10 18 + 4 4 9 26 4 3 1 6 2 20 3 3 1 4 5 8 4 6 8 3 8 5 19 2 10 6 3 1 25 6 2 2 + 25 5 30 5 30 5 29 6 29 6 29 7 1 2 25 11 24 7 8 1 19 7 1 2 4 3 18 11 3 + 3 17 11 5 3 2 2 12 10 4 11 9 13 2 11 10 12 3 6 14 12 3 7 13 10 5 7 14 + 10 4 8 12 11 4 9 11 9 6 10 11 9 7 8 10 8 7 11 10 6 8 27 10 24 13 23 + 13 22 14 21 2 1 12 20 15 19 17 18 18 17 20 16 21 13 23 12 23 12 25 9 + 26 9 26 9 26 10 25 10 24 12 3 1 19 14 1 1 19 20 15 11 2 7 8 2 5 10 5 + 8 5 2 5 10 26 9 28 7 30 5 30 5 31 5 30 5 30 5 30 6 27 9 1 3 22 5 7 1 + 24 3 33 2 34 1 34 2 33 1 34 1 34 1 69 1 34 1 74 1 4 1 2 3 18 1 6 1 2 + 7 2 4 12 1 10 6 2 3 13 2 9 6 3 2 1 1 7 1 3 1 10 6 30 6 28 8 17 1 10 7 + 16 2 10 8 15 2 10 8 15 2 7 11 15 2 6 13 22 12 2 2 11 2 6 19 8 1 7 18 + 3 2 4 2 6 19 2 5 1 2 5 19 5 1 2 3 5 19 3 3 1 3 6 29 5 30 6 29 6 29 6 + 29 6 29 6 29 7 28 7 28 7 28 7 29 5 30 5 30 5 30 4 32 3 32 3 30 0 + + + + 5215.0 + + + 0.234899328859 + + + 2684.0 + + + 0.279806259314 + + + 1.08839861924 + + + 0.466752871044 0.523852559713 0.0295175749162 0.487180276162 + 0.00233840912327 0.000839329633656 -0.0179627244053 0.0075244134526 + -0.0855431623293 + + + 35.0 + + + 4.34285714286 0.536912751678 + + + 5.71428571429 4.8 3.54285714286 2.4 0.268456375839 0.832214765101 + 0.214765100671 0.832214765101 + + + 149.0 + + + 22.0 80.0 0.229857819905 12.0 8.0 1.0 + + + 0.0 0.993288590604 + + + 0.514669223394 + + + 0.253378378378 0.280405405405 0.641891891892 0.786184210526 + 0.774774774775 0.678678678679 0.948948948949 0.166666666667 + 0.342342342342 0.627627627628 0.921921921922 0.356725146199 + 0.003003003003 0.531531531532 0.45045045045 0.46783625731 + + + 0.0 0.0 0.0138888888889 0.0131578947368 0.25 0.527777777778 + 0.868421052632 0.868421052632 0.319444444444 0.684210526316 + 0.680555555556 0.421052631579 0.842105263158 0.958333333333 + 0.907894736842 0.5 0.833333333333 0.789473684211 0.677777777778 + 0.810526315789 0.863157894737 0.977777777778 0.421052631579 0.0 + 0.458333333333 0.986842105263 0.916666666667 0.289473684211 + 0.973684210526 1.0 0.223684210526 0.0 0.222222222222 0.907894736842 + 0.916666666667 0.276315789474 0.934210526316 1.0 0.565789473684 0.0 + 0.0111111111111 0.294736842105 0.7 0.621052631579 0.778947368421 + 1.0 0.810526315789 0.0210526315789 0.0 0.0131578947368 0.75 + 0.684210526316 0.236842105263 1.0 0.947368421053 0.0789473684211 + 0.0 0.0 0.466666666667 0.305263157895 0.0 0.666666666667 + 0.831578947368 0.0315789473684 + + + 0.525438592789 0.190219781023 0.0876033042133 0.0443006649814 + 0.345876993434 0.390092616134 0.114224109305 0.128262206992 + 0.014175672078 0.0677240634783 0.204500664258 0.393645524628 + 0.229381336542 0.0736170256923 + + + + + + + + + 1 2 75 6 8 2 1 11 5 2 42 35 42 35 42 35 42 35 42 35 42 35 42 35 42 35 + 42 35 42 35 42 36 41 36 41 36 41 36 41 36 41 36 41 35 42 35 42 36 40 + 37 40 38 39 38 39 38 39 37 35 2 3 37 35 3 3 36 41 36 41 36 41 36 35 1 + 5 36 34 2 5 37 33 3 4 41 2 1 4 1 4 15 1 4 5 72 5 21 3 47 6 17 2 2 6 + 45 5 16 3 1 8 44 5 18 1 3 4 45 6 71 6 21 3 47 7 19 3 2 1 45 7 20 5 46 + 6 23 2 46 6 12 12 47 6 1 27 43 6 1 29 41 6 1 30 40 6 1 31 3 1 35 38 + 39 38 39 38 39 38 39 38 39 38 4 1 28 44 1 2 1 1 27 45 35 1 1 40 39 38 + 39 38 39 38 40 37 40 37 39 38 40 37 40 37 40 37 40 37 40 37 40 37 40 + 37 40 38 39 37 40 37 40 37 40 38 39 38 39 38 4 15 1 13 7 37 1 36 2 75 + 2 76 1 153 1 74 4 74 3 74 4 73 3 75 1 2 0 + + + + 6776.0 + + + 0.875 + + + 3225.0 + + + 0.141085271318 + + + 1.50252367896 + + + 0.495597715218 0.457653033948 0.139498346978 0.135689594951 + 0.0942074407313 -0.00114079540656 -0.00163343316424 + -0.00227488934718 -0.000277526051191 + + + 77.0 + + + 0.532467532468 0.420454545455 + + + 0.0519480519481 1.09090909091 0.103896103896 0.883116883117 + 0.136363636364 0.954545454545 0.454545454545 0.136363636364 + + + 88.0 + + + 3.0 35.0 0.195488721805 5.0 2.0 4.0 + + + 0.0 0.988636363636 + + + 0.475944510035 + + + 0.88995215311 0.925837320574 0.0382775119617 0.0 0.861244019139 + 0.887559808612 0.188995215311 0.0789473684211 0.0 0.476076555024 + 0.992822966507 0.507177033493 0.0 0.436363636364 0.825 + 0.513636363636 + + + 0.808080808081 0.89898989899 0.939393939394 0.757575757576 + 0.10101010101 0.0 0.0 0.0 0.845454545455 1.0 1.0 0.990909090909 + 0.0545454545455 0.0 0.0 0.0 0.909090909091 1.0 1.0 0.626262626263 + 0.010101010101 0.0 0.0 0.0 0.681818181818 0.872727272727 + 0.936363636364 0.972727272727 0.427272727273 0.281818181818 + 0.272727272727 0.0272727272727 0.0 0.0 0.0 0.954545454545 + 0.981818181818 0.990909090909 1.0 0.0181818181818 0.0 0.0 0.0 + 0.949494949495 1.0 1.0 1.0 0.010101010101 0.0 0.0 0.0 1.0 1.0 1.0 + 1.0 0.0 0.0 0.0 0.1 0.645454545455 0.645454545455 0.654545454545 + 0.8 0.254545454545 + + + 0.48642725091 0.160419200782 0.0121190294805 0.00809030843508 + 0.110353631577 0.359295239186 0.0619860536853 0.059087648727 + 0.0407901677918 0.00517566249812 0.125177811097 0.298888490244 + 0.109561794476 0.042401023492 + + + + + + + + + 1 3 39 3 38 5 33 3 1 4 33 4 124 1 3 1 37 1 3 3 34 2 3 14 23 2 3 27 10 + 2 3 33 3 3 3 39 3 39 3 39 3 39 3 39 4 38 3 39 3 40 2 40 3 39 3 39 3 + 39 3 39 3 39 3 39 3 39 3 39 3 39 3 4 1 34 5 1 7 29 4 1 8 18 15 30 12 + 5 4 29 4 4 5 29 4 4 5 29 4 7 1 30 4 7 1 30 4 38 4 38 4 38 4 38 4 39 3 + 39 3 39 3 39 4 38 4 38 4 16 1 21 4 38 4 37 5 37 5 4 4 30 4 1 21 16 5 + 1 26 10 40 2 126 0 + + + + 2520.0 + + + 0.7 + + + 1702.0 + + + 0.174500587544 + + + 1.07974594213 + + + 0.518529133587 0.527365611743 0.0756879702738 0.107828716971 + 0.0130890317664 -0.000584429902472 -0.000763300001419 + -0.00180761638803 -0.00102557853029 + + + 42.0 + + + 0.880952380952 0.316666666667 + + + 1.52380952381 0.380952380952 0.0952380952381 1.33333333333 + 0.466666666667 0.0 0.533333333333 0.266666666667 + + + 60.0 + + + 1.0 20.0 0.177215189873 4.0 4.0 9.0 + + + 0.0 0.933333333333 + + + 0.675396825397 + + + 0.486666666667 0.833333333333 0.566666666667 0.373333333333 + 0.363636363636 1.0 0.927272727273 0.581818181818 0.313333333333 1.0 + 0.993333333333 0.633333333333 0.290909090909 0.884848484848 + 0.812121212121 0.727272727273 + + + 0.428571428571 0.7 0.742857142857 0.6 0.371428571429 0.4 + 0.257142857143 0.075 0.0 0.75 1.0 1.0 0.457142857143 1.0 1.0 0.225 + 0.0 0.75 1.0 1.0 0.714285714286 0.95 1.0 0.2 0.0 0.625 1.0 1.0 1.0 + 1.0 0.97619047619 0.25 0.0 0.625 1.0 1.0 1.0 1.0 1.0 0.25 0.0 0.55 + 1.0 1.0 0.971428571429 1.0 1.0 0.375 0.0 0.45 1.0 1.0 + 0.771428571429 1.0 1.0 0.475 0.190476190476 0.458333333333 + 0.738095238095 0.833333333333 0.595238095238 0.875 0.97619047619 + 0.520833333333 + + + 0.53073580562 0.0479082890135 0.0159563815262 0.0079956492801 + 0.183302257096 0.0901016901497 0.0573972726612 0.0144564248446 + 0.0183366706041 0.0128985708229 0.172972579739 0.0690698603486 + 0.138631513035 0.0345437365581 + + + + + + + + + 1 5 72 3 73 2 73 4 31 2 39 5 28 4 39 5 28 5 38 5 27 6 37 6 29 3 39 3 + 32 1 74 2 73 4 60 1 7 1 2 4 41 35 41 35 41 35 41 34 42 35 41 35 41 35 + 41 35 41 35 41 35 41 35 41 35 41 35 41 35 41 35 41 35 41 35 41 35 40 + 36 40 36 40 36 40 36 41 3 2 30 43 1 3 29 42 2 2 31 41 35 41 35 41 34 + 42 34 42 34 42 34 42 34 42 34 42 34 42 34 42 35 41 35 41 35 41 35 41 + 35 42 34 42 34 42 1 31 2 42 1 31 2 227 1 74 1 72 7 70 5 72 4 71 5 71 + 6 70 6 70 6 69 7 72 2 74 2 74 1 35 1 39 1 35 1 39 2 34 2 38 2 34 1 39 + 2 34 1 39 2 34 1 39 2 27 1 6 1 39 2 8 12 1 9 3 2 39 3 1 33 39 37 39 + 37 39 37 39 38 38 38 38 38 38 37 39 3 1 1 1 30 40 3 1 1 1 31 39 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 36 40 25 1 4 46 34 42 + 3 6 25 44 1 5 30 38 38 38 38 38 38 38 38 38 38 39 37 39 37 39 37 39 + 37 39 37 39 37 39 37 39 38 38 38 38 38 38 38 38 16 2 20 38 17 4 1 8 8 + 38 11 20 7 37 8 2 3 21 6 36 8 25 1 1 5 37 7 28 3 38 6 29 3 38 6 70 4 + 71 5 71 5 73 1 37 0 + + + + 9880.0 + + + 0.584615384615 + + + 3248.0 + + + 0.178879310345 + + + 1.7783446712 + + + 0.500049261084 0.51568526368 0.127810175309 0.401387233151 + 0.179639035088 0.000141422629327 -0.0108996598161 -0.00417550409569 + -0.0148081949857 + + + 76.0 + + + 0.776315789474 0.323076923077 + + + 0.631578947368 1.05263157895 0.736842105263 0.684210526316 + 0.246153846154 0.153846153846 0.492307692308 0.4 + + + 130.0 + + + 5.0 28.0 0.203278688525 6.0 10.0 2.0 + + + 0.0 0.992307692308 + + + 0.328744939271 + + + 0.625 0.556618819777 0.0 0.0 0.641447368421 0.688995215311 + 0.113486842105 0.0701754385965 0.00328947368421 0.0111642743222 + 0.613486842105 0.752791068581 0.0 0.0 0.552631578947 0.628389154705 + + + 0.458333333333 0.791666666667 0.645833333333 0.235294117647 0.0 0.0 + 0.0 0.0 0.25 1.0 1.0 0.352941176471 0.0 0.0 0.0 0.0 0.256944444444 + 1.0 1.0 0.352941176471 0.0 0.0 0.0 0.0 0.40625 0.9 0.925 + 0.505882352941 0.23125 0.2 0.15 0.117647058824 0.0138888888889 0.0 + 0.0 0.0457516339869 0.229166666667 0.972222222222 0.923611111111 + 0.725490196078 0.0 0.0 0.0 0.0 0.25 1.0 1.0 0.4 0.0 0.0 0.0 0.0 + 0.25 1.0 0.993055555556 0.359477124183 0.0 0.0 0.0 0.0 0.20625 + 0.76875 0.6875 0.505882352941 + + + 0.396035495685 0.238460940326 0.0342732701469 0.0172357427172 + 0.0791612877843 0.533699888179 0.11185500766 0.0435038715806 + 0.010906764078 0.02047842813 0.26318317462 0.442194480503 + 0.284408996534 0.0508535356649 + + + + + + + + + 175 2 84 2 86 1 85 2 85 2 85 3 35 3 46 3 35 3 46 4 34 3 46 3 33 5 46 + 2 35 5 45 3 24 2 1 3 3 6 45 3 5 1 4 2 3 24 45 41 46 41 46 42 45 41 46 + 40 47 41 46 41 46 40 47 40 47 40 47 40 47 40 47 40 47 40 47 40 47 40 + 48 38 49 39 48 39 48 38 49 38 49 4 1 33 49 38 50 3 1 33 49 38 49 38 + 49 38 49 38 49 38 49 38 49 38 49 38 49 7 2 29 49 39 48 39 48 39 24 14 + 11 39 22 16 10 40 2 13 4 18 10 55 4 18 10 54 5 18 10 53 6 18 10 10 1 + 43 5 18 10 9 23 23 3 19 10 3 31 21 3 19 45 20 3 19 45 20 3 19 46 19 3 + 19 46 20 1 20 46 20 1 20 45 42 44 22 1 22 43 21 2 21 42 23 1 21 42 22 + 1 22 42 22 2 21 42 22 2 21 42 22 2 21 44 20 2 20 45 20 2 20 45 42 45 + 42 45 42 45 20 1 21 45 20 2 20 45 42 45 42 45 20 3 19 45 19 4 19 45 + 19 4 19 45 19 4 19 45 21 2 19 45 20 3 20 44 20 3 20 44 20 1 21 46 42 + 45 19 3 20 45 18 4 20 45 17 4 21 45 16 5 21 45 6 6 4 6 20 46 4 18 13 + 1 6 45 4 27 3 3 5 46 3 33 6 45 3 33 7 44 4 32 7 44 4 32 8 43 4 34 2 1 + 4 42 4 33 9 42 3 33 6 45 3 34 4 46 4 33 3 47 4 33 2 48 4 32 3 48 4 32 + 4 47 3 33 5 46 3 34 5 46 2 34 5 46 2 35 3 47 3 41 0 + + + + 9831.0 + + + 0.769911504425 + + + 3640.0 + + + 0.163461538462 + + + 1.38102466793 + + + 0.471112317915 0.488728905024 0.149960082374 0.169702666019 + 0.113813809826 0.00214155141421 0.000879209519975 0.000771493266273 + 0.00400773677775 + + + 87.0 + + + 0.505747126437 0.690265486726 + + + 0.413793103448 0.459770114943 0.781609195402 0.367816091954 + 0.389380530973 0.424778761062 0.849557522124 1.09734513274 + + + 113.0 + + + 14.0 40.0 0.183561643836 3.0 5.0 2.0 + + + 0.0176991150442 0.991150442478 + + + 0.370257349202 + + + 0.561224489796 0.93537414966 0.0204081632653 0.0 0.525974025974 + 0.863636363636 0.262987012987 0.109717868339 0.0 0.142857142857 + 0.918831168831 0.352664576803 0.0 0.157467532468 0.680194805195 + 0.415360501567 + + + 0.221428571429 1.0 0.892857142857 0.842857142857 0.0785714285714 + 0.0 0.0 0.0 0.0324675324675 1.0 1.0 0.993506493506 0.00649350649351 + 0.0 0.0 0.0 0.0974025974026 1.0 1.0 1.0 0.0 0.0 0.0 0.0 + 0.233766233766 0.772727272727 0.662337662338 0.792207792208 + 0.584415584416 0.467532467532 0.350649350649 0.0969696969697 0.0 + 0.0 0.0 0.350649350649 1.0 1.0 0.701298701299 0.212121212121 0.0 + 0.0 0.0 0.220779220779 0.831168831169 0.844155844156 0.532467532468 + 0.0 0.0 0.0 0.0 0.5 1.0 1.0 0.798701298701 0.0 0.0 0.0 0.0 + 0.12987012987 0.350649350649 0.37012987013 0.467532467532 + 0.424242424242 + + + 0.509106448378 0.159328316825 0.0134765792728 0.00140190424125 + 0.169623205023 0.370464444088 0.0614307484227 0.0290824531381 + 0.0423606842213 0.00951765674593 0.12768471261 0.380966525899 + 0.103080493004 0.0469809979164 + + + + + + + + + 2 1 9 4 8 4 8 3 11 1 11 1 11 1 12 1 11 1 11 1 11 1 10 2 9 3 9 4 5 1 2 + 4 4 2 1 5 4 2 2 4 5 1 2 4 4 2 4 2 4 3 2 3 4 3 2 3 4 3 2 3 4 3 1 4 5 1 + 2 4 5 1 2 2 1 1 5 1 2 2 1 1 5 1 2 4 9 4 7 5 7 5 8 4 8 4 7 5 8 4 8 4 8 + 5 7 4 8 4 8 4 8 4 8 5 7 5 7 4 8 4 9 4 8 1 1 1 6 0 + + + + 552.0 + + + 0.260869565217 + + + 178.0 + + + 0.943820224719 + + + 0.970291146762 + + + 0.355464759959 0.548064918851 0.04054291749 0.780134303778 + 0.00948765123005 0.0103769780123 -0.0446532565037 -0.0163855973041 + -0.109547636957 + + + 12.0 + + + 1.0 0.347826086957 + + + 2.33333333333 0.666666666667 0.666666666667 0.333333333333 0.0 + 0.782608695652 0.434782608696 0.0 + + + 46.0 + + + 1.0 11.0 0.223880597015 2.0 4.0 2.0 + + + 0.0 0.978260869565 + + + 0.322463768116 + + + 0.393939393939 0.527777777778 0.545454545455 0.277777777778 + 0.181818181818 0.611111111111 0.818181818182 0.972222222222 0.0 0.0 + 0.0 0.111111111111 0.0 0.583333333333 0.0909090909091 0.0 + + + 0.6 0.0 0.166666666667 0.0 0.0 0.0 0.0 0.0 0.8 0.166666666667 + 0.916666666667 0.583333333333 0.9 0.75 0.5 0.333333333333 0.4 + 0.666666666667 1.0 1.0 0.6 1.0 1.0 1.0 0.0 0.0 0.333333333333 0.5 + 0.6 1.0 1.0 0.916666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.166666666667 + 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + 0.833333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + 0.833333333333 0.3 0.0 0.0 0.0 + + + 0.507973706175 0.201463829997 0.0759148420058 0.0303356717314 + 0.420913481376 0.328657516411 0.160329314336 0.0992109419619 + 0.165698757486 0.0647533390023 0.266906297489 0.364105386249 + 0.233417281246 0.14164823064 + + + + + + + + + 89 1 191 1 191 2 104 1 85 1 104 4 82 4 101 4 188 4 119 1 67 6 118 1 + 68 5 118 1 68 7 116 1 68 8 82 29 2 3 68 10 79 35 68 11 77 36 68 13 75 + 36 68 14 74 36 68 16 72 36 68 17 71 36 68 19 69 36 68 21 67 36 68 22 + 66 36 68 19 3 2 64 36 68 19 69 36 68 17 71 36 68 20 69 35 67 17 1 3 1 + 2 66 35 67 2 1 1 1 20 65 35 67 3 2 22 63 35 67 3 3 23 61 35 67 4 2 25 + 59 35 67 4 1 27 58 34 68 4 1 29 56 34 68 4 1 30 55 29 73 36 54 34 68 + 38 52 34 68 40 50 34 68 41 49 34 68 41 49 35 67 43 47 35 67 1 1 43 45 + 35 67 47 43 35 67 49 41 35 68 49 40 33 1 1 68 53 36 35 68 55 6 4 24 + 35 67 41 2 16 4 3 1 1 22 35 67 22 1 10 3 3 5 17 4 6 19 35 67 33 4 3 2 + 22 2 8 16 35 68 36 1 4 1 24 1 4 2 3 13 35 68 45 1 22 5 6 10 35 68 44 + 5 20 4 8 7 36 68 49 3 19 2 51 68 33 4 11 7 16 1 52 68 4 1 30 3 1 3 8 + 6 15 2 21 9 3 11 7 68 4 4 44 8 11 2 18 29 4 68 4 5 44 8 30 30 2 69 4 + 6 18 2 26 5 10 1 19 31 1 69 4 7 18 3 28 1 10 1 5 2 12 31 1 69 4 9 14 + 7 28 6 2 1 20 31 1 70 3 11 13 7 29 4 23 31 1 69 4 12 14 8 30 4 19 31 + 1 69 5 12 14 7 32 2 19 31 1 68 7 12 2 3 5 8 57 28 3 67 7 19 2 9 58 27 + 2 69 5 21 1 11 55 28 3 68 6 20 67 29 3 66 7 22 16 5 45 28 2 67 7 24 + 13 9 42 28 2 68 5 34 5 9 40 99 5 38 2 10 2 4 31 100 4 39 5 7 4 4 29 + 101 3 40 16 9 1 2 20 101 3 41 13 2 1 11 20 101 3 43 13 13 19 101 3 45 + 16 8 20 100 3 47 10 2 5 5 20 100 3 53 12 3 21 100 3 56 9 3 21 100 2 + 62 2 5 21 100 2 70 20 100 2 69 21 100 2 70 20 100 3 69 20 101 2 69 21 + 99 3 70 20 99 3 70 7 4 9 99 3 71 1 1 1 2 5 1 8 99 3 71 1 5 9 3 1 99 3 + 78 4 2 3 2 1 99 3 78 8 1 4 98 3 78 13 98 3 76 15 98 3 76 15 98 3 79 + 12 98 3 82 9 98 3 85 7 97 4 86 5 61 1 35 4 87 4 60 25 12 4 88 3 60 28 + 5 1 4 3 88 3 60 30 1 3 4 2 90 2 60 34 4 2 90 3 59 34 4 3 90 2 59 34 4 + 3 90 2 59 34 4 3 90 2 59 18 1 1 1 12 5 3 152 32 5 3 151 34 5 2 151 34 + 5 2 152 3 1 5 1 22 5 3 152 33 4 3 151 34 5 3 150 35 3 4 150 34 4 4 + 150 35 3 4 150 34 4 4 151 33 4 4 151 33 5 3 151 33 5 3 151 33 4 5 150 + 33 5 4 150 33 5 4 150 33 5 4 150 33 5 5 149 33 5 5 148 35 4 4 149 35 + 4 4 149 35 5 4 118 1 29 8 2 25 5 4 118 2 29 34 5 4 117 4 27 35 4 6 + 117 1 29 35 4 5 118 1 30 33 6 4 118 2 29 33 6 4 118 2 29 33 6 4 118 4 + 26 34 7 3 118 27 3 34 7 3 118 29 1 34 7 3 118 36 1 27 8 2 118 35 3 25 + 9 2 118 34 3 3 7 16 9 2 119 33 16 2 6 5 9 2 119 33 25 4 8 3 119 33 25 + 4 8 3 119 33 25 4 8 3 119 33 25 4 9 2 119 33 25 4 9 3 118 33 25 4 9 3 + 118 33 25 4 9 3 118 33 25 4 9 3 118 33 25 4 9 3 118 33 25 4 9 3 119 + 32 25 4 10 3 118 32 26 3 10 3 118 33 25 3 10 3 118 33 23 5 10 3 118 + 33 23 5 10 3 118 33 24 3 11 3 118 4 4 4 1 20 24 3 12 2 118 5 2 5 1 20 + 24 3 12 2 118 33 24 3 12 2 118 33 24 3 13 1 118 33 24 3 13 1 119 32 + 23 3 14 2 118 32 23 3 14 2 118 32 23 3 14 2 118 32 24 2 14 2 118 5 1 + 26 25 1 15 1 118 32 23 2 135 32 160 32 160 20 1 11 160 32 160 32 160 + 32 160 32 160 32 160 4 1 9 1 17 160 4 18 10 160 4 21 8 159 4 23 6 159 + 4 25 4 159 4 26 3 159 4 26 3 159 4 26 3 160 4 25 3 159 5 25 4 158 5 + 25 3 160 2 27 3 161 1 28 2 29 0 + + + + 36096.0 + + + 1.02127659574 + + + 8097.0 + + + 0.209954304063 + + + 1.78523798574 + + + 0.507573420962 0.436315292057 0.4215044836 0.298427009985 + 0.22152812313 -0.0402902633688 0.0491152127897 0.0313184784411 + 0.0650608713759 + + + 192.0 + + + 1.16666666667 1.85106382979 + + + 1.75 1.9375 0.458333333333 0.520833333333 1.44680851064 + 2.72340425532 1.70212765957 1.53191489362 + + + 188.0 + + + 53.0 188.0 0.240072202166 15.0 6.0 7.0 + + + 0.0 0.994680851064 + + + 0.224318484043 + + + 0.5 0.339982269504 0.0722517730496 0.0283687943262 0.141843971631 + 0.625443262411 0.0084219858156 0.0 0.470744680851 0.0806737588652 + 0.0656028368794 0.245567375887 0.0 0.0 0.674645390071 0.33554964539 + + + 0.43115942029 0.960069444444 0.559782608696 0.116319444444 + 0.132246376812 0.15625 0.106884057971 0.00868055555556 + 0.0018115942029 0.583333333333 0.699275362319 0.00868055555556 0.0 + 0.0 0.0 0.0 0.0 0.133680555556 0.824275362319 0.161458333333 0.0 + 0.0 0.0 0.0 0.175724637681 0.253472222222 0.820652173913 + 0.711805555556 0.0344202898551 0.0 0.0 0.0 0.565217391304 + 0.998263888889 0.226449275362 0.0 0.0253623188406 0.0 0.0 0.0 + 0.121376811594 0.1875 0.103260869565 0.0 0.0 0.232638888889 + 0.621376811594 0.366319444444 0.0 0.0 0.0 0.0 0.405797101449 + 0.550347222222 0.730072463768 0.461805555556 0.0 0.0 0.0 0.0 + 0.842391304348 0.895833333333 0.150362318841 0.00868055555556 + + + 0.243612846827 0.227165601125 0.137557459073 0.0899437752573 + 0.125943740996 0.292248238721 0.132127792318 0.323099464512 + 0.177625531195 0.0893360387949 0.0575835277906 0.138941863582 + 0.241292910542 0.0648223466436 + + + + + + + + + 95 1 231 2 197 29 5 2 197 36 197 36 197 36 197 36 197 36 197 36 197 + 36 197 36 197 35 198 36 197 36 197 36 197 36 197 36 197 36 197 37 196 + 37 196 37 197 36 197 36 197 36 197 36 197 36 21 4 172 36 20 6 171 36 + 1 1 18 9 167 38 19 8 168 38 19 8 168 38 19 9 167 38 19 10 166 38 17 + 12 166 38 17 12 167 36 18 14 166 35 18 15 2 1 162 35 18 19 161 35 17 + 22 159 35 17 20 161 35 17 24 157 35 17 25 124 1 31 35 16 27 123 1 30 + 37 15 28 122 68 15 29 121 36 28 4 15 30 120 35 47 32 119 35 47 33 118 + 35 47 34 117 35 47 35 116 35 46 37 115 35 46 37 115 35 47 4 2 30 115 + 34 49 3 3 22 2 5 115 35 47 4 2 21 5 4 116 34 47 4 2 22 4 4 116 34 53 + 22 6 2 116 34 54 20 125 34 54 20 125 34 55 19 21 4 100 34 57 18 20 6 + 98 34 58 17 20 7 98 33 59 13 22 10 95 34 60 11 23 11 94 34 63 8 23 11 + 94 30 69 4 25 11 94 35 64 3 26 11 94 35 65 2 25 12 94 35 58 1 6 3 24 + 11 96 34 57 4 2 5 10 1 12 12 96 34 57 10 2 4 4 1 13 12 96 34 54 13 3 + 4 2 2 12 13 96 34 54 13 2 5 1 3 12 13 66 1 29 34 56 12 3 7 12 13 66 1 + 29 34 54 5 3 5 3 7 13 13 5 6 54 2 29 34 55 13 2 7 13 15 2 8 53 2 29 + 35 56 20 13 26 52 2 29 35 56 20 12 28 51 4 30 32 58 17 13 2 1 26 51 9 + 23 33 59 16 12 31 50 19 11 35 60 15 12 32 49 19 4 42 61 14 11 34 48 + 17 6 42 62 12 12 35 47 19 3 43 63 11 12 36 46 65 64 1 6 3 11 37 46 65 + 72 2 11 38 45 18 2 20 23 2 71 3 11 39 44 17 2 19 26 1 70 3 11 40 44 + 38 26 1 69 5 10 40 44 36 1 1 26 1 68 5 11 41 43 37 25 4 68 4 11 41 42 + 39 25 3 70 1 12 40 15 1 26 39 26 2 84 6 2 31 16 1 26 40 25 3 83 5 4 + 29 17 3 24 38 27 3 83 5 11 21 17 5 23 39 26 3 103 11 2 2 17 9 21 39 + 133 8 24 7 22 37 135 7 1 1 22 9 23 34 136 6 25 10 23 33 137 7 22 12 + 22 33 137 1 28 14 20 34 165 14 20 34 164 16 19 4 1 29 164 17 18 33 + 165 18 17 34 163 20 16 30 2 2 141 3 19 21 15 31 2 1 141 4 2 1 15 22 + 14 34 141 7 15 23 13 34 141 6 16 23 13 35 139 7 15 25 12 35 139 1 2 4 + 14 27 12 17 2 15 142 3 15 28 11 34 139 5 16 29 10 17 1 11 1 4 139 5 + 16 30 9 28 5 1 139 5 16 26 2 3 8 31 2 1 139 4 17 1 3 3 1 14 2 2 4 1 8 + 34 138 5 17 23 16 34 138 5 16 24 9 1 7 33 138 5 16 24 9 2 6 34 137 5 + 16 25 2 1 5 3 5 2 9 23 139 3 16 14 1 11 1 1 5 3 5 1 21 4 1 7 159 13 2 + 12 4 4 5 1 30 3 160 12 3 10 5 4 37 2 160 12 4 9 5 2 39 2 161 11 4 8 4 + 2 42 1 166 7 3 8 3 4 41 1 167 17 2 6 209 17 1 6 209 24 211 1 4 7 1 9 + 219 3 2 8 209 1 7 5 2 9 206 6 6 3 2 10 206 9 2 15 207 26 209 24 204 + 29 205 27 207 26 208 25 209 23 212 21 212 2 2 17 219 14 220 12 227 6 + 227 6 227 6 218 3 3 8 220 13 220 14 221 12 222 10 224 9 225 8 225 8 + 226 6 228 4 230 1 12 0 + + + + 37047.0 + + + 1.46540880503 + + + 7714.0 + + + 0.196785066114 + + + 1.16965417346 + + + 0.437173678846 0.460114439306 0.605237215672 0.166400661737 + 0.108591592986 0.186450149436 0.0384752013315 0.190468457912 + -0.000240625873367 + + + 233.0 + + + 0.716738197425 1.69182389937 + + + 0.549356223176 0.291845493562 0.789699570815 1.23605150215 + 0.427672955975 2.31446540881 2.8427672956 1.03144654088 + + + 159.0 + + + 12.0 109.0 0.284980744544 29.0 3.0 9.0 + + + 0.0 0.993710691824 + + + 0.208221988285 + + + 0.0 0.426293103448 0.646120689655 0.0349137931034 0.596816976127 + 0.216379310345 0.0331896551724 0.0 0.0707338638373 0.45474137931 + 0.175 0.0 0.0 0.0216101694915 0.357627118644 0.296610169492 + + + 0.0 0.0 0.0 0.0362068965517 0.908620689655 0.874137931034 + 0.0741379310345 0.0 0.0 0.0 0.76724137931 0.901724137931 + 0.53275862069 0.268965517241 0.0655172413793 0.0 0.833030852995 + 0.903448275862 0.405172413793 0.265517241379 0.13275862069 0.0 0.0 + 0.0 0.274047186933 0.372413793103 0.194827586207 0.0 0.0 0.0 0.0 + 0.0 0.0 0.275862068966 0.856896551724 0.472413793103 0.136206896552 + 0.0 0.0 0.0 0.0 0.0 0.0465517241379 0.443103448276 0.562068965517 + 0.00172413793103 0.0 0.0 0.0 0.0 0.0 0.0879310344828 0.460344827586 + 0.243103448276 0.0724137931034 0.0 0.0 0.0 0.0 0.0 0.0933333333333 + 0.633333333333 0.716666666667 0.38 + + + 0.443687107915 0.162203117307 0.229908173786 0.149858676629 + 0.171284281246 0.258355891108 0.0840893566849 0.325091529739 + 0.183307625178 0.132668959163 0.128166094148 0.210715151772 + 0.101980635123 0.104535989533 + + + + + + + + + 42 1 45 2 45 3 44 6 41 6 40 6 41 5 41 5 42 4 43 4 42 5 41 5 42 5 42 4 + 42 4 43 1 46 1 36 2 8 1 32 6 9 1 31 6 41 7 39 8 4 3 32 9 3 3 32 10 1 + 3 31 16 30 6 2 8 31 16 30 13 1 2 31 16 31 16 31 2 1 6 5 2 31 9 2 2 33 + 15 32 16 31 2 1 2 6 4 31 8 1 7 31 10 2 3 32 10 4 1 32 11 1 3 31 17 29 + 18 29 17 30 17 30 16 21 2 7 11 2 4 20 3 8 4 8 2 22 3 8 3 8 3 22 2 8 4 + 8 3 32 2 10 2 42 1 1 3 41 1 2 3 37 5 37 2 3 7 35 2 3 7 35 2 2 9 34 13 + 35 12 23 3 7 1 1 11 24 3 6 2 1 11 24 2 8 1 1 4 1 5 43 4 39 8 39 7 40 + 7 41 6 41 6 41 5 42 4 45 2 28 0 + + + + 3243.0 + + + 0.68115942029 + + + 624.0 + + + 0.572115384615 + + + 0.742902208202 + + + 0.500348383501 0.539804864253 0.120217578237 0.419171525032 + -0.17065270409 0.0180707909423 0.0621914728864 -0.0433085472914 + -0.0357169845566 + + + 47.0 + + + 0.936170212766 0.536231884058 + + + 0.0851063829787 1.6170212766 1.78723404255 0.0851063829787 0.0 + 0.579710144928 0.985507246377 0.579710144928 + + + 69.0 + + + 6.0 27.0 0.340277777778 6.0 6.0 3.0 + + + 0.0 0.985507246377 + + + 0.192414431082 + + + 0.0 0.0 0.0534759358289 0.0606060606061 0.0 0.323529411765 + 0.544117647059 0.62962962963 0.0 0.656862745098 0.397058823529 + 0.0138888888889 0.328431372549 0.0196078431373 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.25 0.177777777778 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0740740740741 0.0 0.0 0.0 0.0 0.037037037037 0.444444444444 + 0.458333333333 0.666666666667 0.314814814815 0.0 0.0 0.270833333333 + 0.944444444444 0.944444444444 0.291666666667 0.944444444444 + 0.592592592593 0.0 0.0 0.875 0.87037037037 0.777777777778 + 0.541666666667 0.0555555555556 0.0 0.0 0.0 0.333333333333 + 0.537037037037 0.240740740741 0.0 0.0 0.0 0.0833333333333 + 0.462962962963 0.0833333333333 0.0 0.0 0.0 0.0 0.0 0.625 + 0.148148148148 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.585939618528 0.155192762359 0.0922313601749 0.0526925408719 + 0.566833369057 0.279220977283 0.101239331976 0.0849047832281 + 0.0817071495701 0.0853430888775 0.478311249276 0.316931761131 + 0.147379558763 0.081037558268 + + + + + + + + + 3 3 126 4 124 6 122 8 122 8 77 6 38 8 77 10 33 10 76 20 5 1 17 10 76 + 37 6 2 2 6 2 1 73 37 6 14 72 37 6 15 71 37 6 16 70 37 6 11 1 4 70 36 + 7 10 2 5 69 36 7 17 69 4 1 17 2 13 6 17 69 4 1 18 1 12 7 17 69 36 7 + 18 68 37 6 17 70 3 1 32 6 18 69 36 6 18 69 36 6 17 70 36 7 17 69 36 7 + 17 69 36 7 19 67 35 7 21 1 2 63 36 7 21 1 1 63 36 7 31 55 36 6 27 2 4 + 3 6 45 36 5 29 1 15 42 37 6 20 1 25 39 38 6 20 1 29 36 38 5 51 36 36 + 6 49 38 7 1 2 4 22 6 5 1 15 4 24 38 36 5 6 7 10 3 10 6 8 37 37 6 5 3 + 14 4 10 7 7 37 37 6 21 4 14 2 12 33 37 7 20 4 4 2 23 33 7 2 13 1 12 8 + 20 5 5 3 3 5 14 3 1 27 6 3 12 2 12 8 20 6 5 2 4 3 21 25 7 2 26 8 19 + 11 1 3 29 24 6 4 25 7 19 14 30 24 6 4 8 1 16 7 16 1 2 14 32 22 6 4 2 + 1 6 3 13 7 16 1 2 7 2 6 4 4 25 20 6 3 2 3 21 7 19 5 6 4 4 6 24 19 11 + 3 21 7 17 6 10 2 2 8 24 18 35 7 17 7 13 7 29 14 35 7 16 9 16 2 32 12 + 3 7 24 8 4 2 11 9 16 2 33 10 3 18 6 1 6 8 3 4 11 10 13 3 34 9 3 29 3 + 7 3 8 6 12 7 10 33 8 3 29 2 8 3 9 5 14 5 13 27 11 3 40 2 11 3 16 6 9 + 28 53 3 12 1 18 7 7 23 1 4 53 3 33 6 4 25 1 4 54 2 34 33 3 3 54 2 37 + 30 3 3 54 2 39 27 3 4 54 2 39 28 4 2 4 6 44 2 40 27 10 9 41 2 42 25 + 10 13 38 2 42 27 5 16 36 3 43 24 11 13 35 3 46 25 12 2 4 1 36 3 47 25 + 9 9 36 3 48 15 2 9 7 9 37 2 50 14 2 6 2 11 4 2 4 1 6 2 23 2 53 32 7 5 + 3 4 23 2 54 27 6 10 3 4 23 2 57 8 1 15 3 8 1 4 3 5 22 2 59 23 4 11 3 + 7 20 2 61 20 6 9 3 11 17 2 61 22 6 7 2 13 16 2 62 23 4 17 1 6 14 2 63 + 7 3 9 3 1 4 15 4 5 13 2 76 6 4 1 7 11 3 10 9 2 49 6 19 10 3 1 6 11 2 + 10 10 2 50 13 11 38 1 4 11 1 51 57 6 3 11 1 51 67 9 2 49 26 1 42 9 3 + 53 34 1 29 10 2 55 30 3 2 7 21 9 2 54 30 2 9 2 21 9 2 58 16 5 4 6 1 3 + 25 9 2 59 17 13 1 1 27 9 2 60 8 2 4 18 25 10 2 62 4 27 25 9 2 64 5 25 + 24 9 3 64 8 26 19 8 4 65 12 21 19 9 3 67 13 15 10 4 8 9 2 71 9 17 9 7 + 6 9 1 75 6 4 3 9 12 4 7 8 1 74 16 8 13 1 8 90 11 7 21 91 11 7 20 109 + 21 111 4 2 12 113 1 4 11 124 5 122 6 123 6 128 1 515 1 118 3 6 2 118 + 12 114 15 115 14 118 11 119 10 121 8 123 5 126 3 1 0 + + + + 15222.0 + + + 1.09322033898 + + + 5170.0 + + + 0.284526112186 + + + 1.07267469967 + + + 0.572647183269 0.418978657277 0.292283531797 0.136468834359 + 0.0545140399724 -0.0769041593992 0.0256631341342 -0.0252222098878 + 0.0173591546082 + + + 129.0 + + + 2.52713178295 2.26271186441 + + + 1.20930232558 1.70542635659 3.56589147287 3.59689922481 + 1.32203389831 3.79661016949 2.98305084746 0.881355932203 + + + 118.0 + + + 42.0 178.0 0.260632497274 21.0 4.0 5.0 + + + 0.0 0.991525423729 + + + 0.339639994744 + + + 0.470905172414 0.578125 0.0657327586207 0.01875 0.00969827586207 + 0.671875 0.177801724138 0.0 0.224137931034 0.367708333333 + 0.706896551724 0.090625 0.648902821317 0.549494949495 + 0.468129571578 0.366666666667 + + + 0.611607142857 0.916666666667 0.845833333333 0.45 0.142857142857 + 0.120833333333 0.075 0.0 0.0178571428571 0.316666666667 + 0.729166666667 0.2875 0.0 0.0 0.0 0.0 0.0 0.0375 0.8125 + 0.483333333333 0.0223214285714 0.0 0.0 0.0 0.0 0.0 0.441666666667 + 0.95 0.540178571429 0.1625 0.0 0.0 0.0 0.0 0.0333333333333 0.7875 + 0.803571428571 0.704166666667 0.1125 0.0 0.388392857143 + 0.504166666667 0.475 0.175 0.629464285714 0.691666666667 0.25 0.0 + 0.553571428571 0.9875 0.875 0.283333333333 0.3125 0.866666666667 + 0.35 0.0 0.348739495798 0.694117647059 0.729411764706 + 0.313725490196 0.0294117647059 0.639215686275 0.737254901961 + 0.356862745098 + + + 0.401957248555 0.122634658719 0.109887057512 0.127058429423 + 0.107303293011 0.149226879578 0.0739898531781 0.134694642481 + 0.254336599212 0.0880373276229 0.00896942723412 0.115538541675 + 0.0981297190113 0.0392718414304 + + + + + + + + + 2 4 12 6 10 6 10 6 11 3 1 1 1 1 10 2 1 3 8 8 8 4 1 1 10 4 1 2 9 8 8 5 + 11 4 14 1 15 1 15 2 1 1 12 4 12 1 2 1 47 1 12 4 10 6 10 6 10 1 1 3 13 + 1 12 4 11 7 9 5 1 1 10 2 1 1 8 2 14 3 13 2 14 2 14 2 14 2 14 1 15 2 + 14 2 14 2 14 2 14 2 14 2 14 2 14 1 15 1 15 2 14 1 15 1 15 1 15 1 15 1 + 15 2 14 1 15 1 2 0 + + + + 848.0 + + + 0.301886792453 + + + 162.0 + + + 1.16049382716 + + + 1.47727272727 + + + 0.449794238683 0.36918328585 0.112582817284 1.2162657755 + 0.242382973839 0.023270108851 0.240168934878 0.0901625403772 + 0.63815936766 + + + 16.0 + + + 1.375 0.207547169811 + + + 1.5 2.75 0.5 0.75 0.377358490566 0.22641509434 0.22641509434 0.0 + + + 53.0 + + + 3.0 16.0 0.121212121212 4.0 4.0 1.0 + + + 0.0 0.981132075472 + + + 0.191037735849 + + + 0.403846153846 0.153846153846 0.192307692308 0.0 0.769230769231 + 0.538461538462 0.115384615385 0.0 0.153846153846 0.0 0.0 0.0 0.0 + 0.0 0.423076923077 0.339285714286 + + + 0.0 0.0 0.0 0.0714285714286 0.357142857143 0.0 0.0 0.0 0.75 + 0.857142857143 0.0 0.5 0.357142857143 0.0 0.0 0.0 1.0 + 0.928571428571 0.5 0.714285714286 0.285714285714 0.0 0.0 0.0 + 0.666666666667 0.5 0.333333333333 0.571428571429 0.142857142857 0.0 + 0.0 0.0 0.25 0.357142857143 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.357142857143 0.5 0.5 0.5 0.0 0.0 + 0.0 0.0 0.428571428571 0.416666666667 0.285714285714 + 0.0714285714286 + + + 0.593491389628 0.163937570596 0.158997263122 0.0539391626645 + 0.495673719701 0.359675306096 0.107714086263 0.224169526631 + 0.116961864922 0.074118342566 0.215300338962 0.511402399803 + 0.195331497816 0.089845682561 + + + + + + + + + 3 4 3 4 3 4 3 3 4 3 4 4 3 4 2 4 3 5 2 5 2 5 3 4 4 3 4 3 2 5 2 5 2 5 2 + 5 2 5 2 5 2 5 2 5 2 4 3 5 2 4 3 4 3 4 3 4 3 4 3 3 4 4 3 4 3 4 3 4 3 4 + 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 4 3 4 3 4 3 4 3 4 3 5 3 3 3 4 3 5 2 5 2 + 5 2 4 3 5 3 4 2 4 3 4 3 5 2 5 2 5 2 4 3 5 2 5 2 5 2 5 2 4 3 4 3 4 3 4 + 3 4 3 4 3 4 3 4 3 4 3 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 5 2 4 3 + 18 1 5 4 3 4 4 3 3 4 4 3 5 1 60 3 4 3 4 3 4 2 5 2 5 1 6 2 6 1 6 1 5 0 + + + + + 791.0 + + + 0.0619469026549 + + + 398.0 + + + 0.663316582915 + + + 1.03621571027 + + + 0.500418760469 0.419732591529 0.00567534587155 2.03929168328 + -0.0616841118296 5.70300896633e-05 -0.0269722131394 + 7.94473006263e-05 0.769862961824 + + + 7.0 + + + 3.14285714286 0.0 + + + 1.14285714286 3.42857142857 1.14285714286 3.42857142857 0.0 0.0 0.0 + 0.0 + + + 113.0 + + + 4.0 7.0 0.168316831683 2.0 16.0 1.0 + + + 0.0 0.991150442478 + + + 0.503160556258 + + + 0.0 0.0 0.0 0.344827586207 0.321428571429 0.839285714286 1.0 + 0.48275862069 0.964285714286 1.0 0.839285714286 0.137931034483 + 0.857142857143 0.339285714286 0.125 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.214285714286 0.466666666667 0.0 0.0 0.0 + 0.0 0.0 0.0 0.214285714286 0.466666666667 0.0 0.0 0.5 + 0.857142857143 1.0 1.0 0.571428571429 0.533333333333 0.285714285714 + 1.0 1.0 1.0 1.0 1.0 0.642857142857 0.2 0.857142857143 1.0 1.0 1.0 + 1.0 1.0 0.571428571429 0.0 1.0 1.0 1.0 1.0 1.0 0.357142857143 0.0 + 0.0 1.0 1.0 0.928571428571 0.428571428571 0.5 0.0 0.0 0.0 + 0.785714285714 0.642857142857 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.594497545282 0.179545228312 0.0825008639393 0.0276237904171 + 0.531983924039 0.40334959371 0.123096550614 0.0148304559041 + 0.0745679852629 0.0481381627387 0.40977851866 0.529633299514 + 0.27242668969 0.0978264765016 + + + + + + + + + 75 3 78 2 77 3 62 10 5 3 44 13 5 19 42 14 5 19 41 15 5 19 38 1 2 15 4 + 20 37 20 5 18 37 20 4 19 37 20 3 20 37 20 3 20 36 21 4 19 36 21 4 19 + 36 22 3 19 36 44 36 22 2 20 36 22 2 20 37 21 1 21 37 21 3 19 37 20 4 + 19 37 16 2 1 5 20 36 19 4 20 37 19 5 19 39 1 3 1 3 10 3 12 56 9 4 11 + 45 4 1 15 3 12 2 1 1 1 41 19 3 21 37 5 4 10 3 21 37 3 1 15 3 20 38 20 + 2 20 38 20 2 20 38 20 2 21 37 20 2 21 37 20 2 20 38 20 3 19 38 19 4 + 17 1 1 38 20 3 19 38 19 4 19 38 18 6 18 38 18 6 18 38 18 6 18 38 19 4 + 19 38 19 4 19 3 2 33 42 3 16 4 3 12 20 2 20 3 24 1 8 2 19 4 19 3 37 7 + 2 23 8 3 37 34 6 3 37 35 5 3 17 1 19 36 4 3 17 1 20 35 4 3 16 1 21 35 + 1 2 1 3 38 35 1 6 38 35 1 6 38 35 1 5 39 35 2 4 41 38 42 38 41 40 40 + 41 39 34 2 5 38 35 1 6 38 35 1 6 38 35 1 6 38 42 38 42 4 1 33 42 38 + 42 38 42 7 1 30 42 38 42 38 42 38 42 38 42 38 42 38 43 37 43 38 42 5 + 4 29 42 5 4 29 42 5 3 30 42 5 4 20 2 7 42 38 42 7 1 30 42 6 2 30 42 6 + 1 31 42 38 43 1 5 31 59 21 73 7 76 4 78 2 78 2 79 1 39 0 + + + + 7600.0 + + + 0.842105263158 + + + 3351.0 + + + 0.179647866309 + + + 0.634603930911 + + + 0.501788621571 0.490231559966 0.144991869317 0.179019468611 + -0.111121148914 0.00491197045299 0.00214287563796 -0.00257057204361 + -3.91470243405e-05 + + + 80.0 + + + 0.85 0.915789473684 + + + 0.55 0.45 1.55 0.85 0.884210526316 1.38947368421 0.842105263158 + 0.378947368421 + + + 95.0 + + + 16.0 60.0 0.182741116751 5.0 4.0 5.0 + + + 0.0 0.989473684211 + + + 0.440921052632 + + + 0.0 0.075 0.904166666667 0.597916666667 0.145652173913 + 0.179166666667 0.991666666667 0.810416666667 0.673913043478 + 0.802083333333 0.01875 0.0354166666667 0.830434782609 + 0.904166666667 0.08125 0.0 + + + 0.0 0.0 0.0 0.15 0.833333333333 0.808333333333 0.683333333333 + 0.283333333333 0.0 0.0 0.0 0.15 0.975 1.0 0.941666666667 + 0.483333333333 0.0 0.0 0.0 0.1 1.0 1.0 1.0 0.583333333333 + 0.118181818182 0.45 0.275 0.341666666667 0.966666666667 1.0 + 0.983333333333 0.675 0.609090909091 1.0 0.85 1.0 0.05 0.025 + 0.0416666666667 0.1 0.363636363636 0.691666666667 0.716666666667 + 0.641666666667 0.0 0.0 0.0 0.0 0.718181818182 1.0 1.0 0.975 0.0 0.0 + 0.0 0.0 0.672727272727 0.908333333333 0.75 0.891666666667 + 0.283333333333 0.0416666666667 0.0 0.0 + + + 0.377300485517 0.200409091245 0.0259119354159 0.00898060428366 + 0.0597189851552 0.378102341237 0.0746317768951 0.0354179115238 + 0.0321761768581 0.0199364252842 0.130416375938 0.229401724649 + 0.0861150700738 0.0500529133153 + + + + + + + + + 64 2 32 1 96 4 2 4 4 4 1 1 2 5 7 2 95 36 95 36 95 36 95 36 95 37 94 + 36 95 36 95 36 95 36 95 36 95 36 95 36 96 35 95 36 95 36 95 36 96 36 + 94 37 94 37 94 37 95 35 96 35 96 35 96 35 96 35 96 35 96 35 95 38 93 + 38 93 37 94 37 64 2 28 38 26 3 34 2 28 38 24 5 34 3 27 22 2 14 24 5 + 34 2 29 20 3 14 26 1 36 2 29 17 2 17 27 2 35 2 28 17 3 16 28 2 35 6 + 23 18 3 16 28 2 35 18 1 18 2 27 28 2 35 36 4 26 28 2 35 35 6 31 1 2 2 + 8 8 3 35 33 13 5 4 33 6 2 35 34 27 29 3 3 35 36 25 35 35 36 26 34 35 + 37 25 34 35 37 25 34 35 37 25 34 35 37 24 35 35 37 24 35 35 37 24 35 + 35 37 24 35 35 37 24 35 35 37 24 35 35 38 23 35 35 38 23 35 4 1 30 38 + 23 35 4 1 30 38 23 35 3 2 30 38 23 36 2 2 30 37 24 35 3 2 30 38 23 35 + 3 2 30 38 23 35 3 3 30 37 23 36 2 3 29 38 23 3 2 1 2 28 3 2 29 38 23 + 4 1 1 1 29 2 3 29 38 23 36 2 3 29 38 23 36 2 3 30 37 23 36 2 3 30 37 + 23 36 2 3 30 34 2 1 23 36 2 3 29 38 23 35 3 3 29 39 22 35 3 4 28 39 + 22 35 3 12 20 39 22 35 3 23 10 38 22 35 3 31 1 39 22 35 3 71 22 35 3 + 71 22 35 3 70 23 35 3 49 1 21 22 35 3 38 1 1 6 2 17 6 22 35 3 38 29 4 + 22 35 3 38 30 3 22 9 2 1 7 16 3 38 31 2 22 4 21 10 3 38 31 1 23 3 24 + 8 3 38 31 1 24 2 24 8 3 38 31 1 23 2 26 7 3 38 31 2 22 1 26 9 1 41 53 + 3 24 50 54 3 25 7 1 41 55 2 25 7 2 40 82 8 1 40 82 7 2 40 81 8 2 40 + 82 7 3 39 83 5 5 38 82 6 5 38 82 5 6 38 83 4 6 38 83 3 7 38 83 3 7 38 + 83 2 8 38 93 38 93 39 92 39 92 39 92 39 92 40 92 38 93 39 92 38 94 37 + 93 39 92 39 93 38 93 6 3 2 1 3 3 20 93 6 17 15 93 5 18 15 93 5 22 3 1 + 7 93 6 22 1 1 1 1 6 92 5 28 6 92 4 29 6 91 6 27 1 1 5 91 1 1 4 27 1 1 + 4 93 6 28 5 92 6 27 6 91 6 29 4 93 5 30 3 93 5 30 3 92 6 30 4 92 6 29 + 5 92 5 29 6 91 5 29 6 91 5 28 6 92 5 30 4 91 6 30 4 91 1 1 4 30 4 92 + 5 30 5 91 5 30 5 92 4 30 6 91 2 32 6 126 4 126 5 126 5 127 4 127 4 + 127 4 86 0 + + + + 19650.0 + + + 0.873333333333 + + + 6692.0 + + + 0.152271368799 + + + 0.728128806334 + + + 0.497253896731 0.438505156914 0.203489489701 0.154998925153 + -0.0891106755888 0.00532128602801 -0.0180146859755 0.0308026716227 + 0.0033113911035 + + + 131.0 + + + 0.603053435115 1.19333333333 + + + 0.396946564885 0.641221374046 0.610687022901 0.488549618321 + 0.426666666667 1.94666666667 1.41333333333 0.933333333333 + + + 150.0 + + + 13.0 57.0 0.193760262726 6.0 4.0 7.0 + + + 0.0 0.993333333333 + + + 0.340559796438 + + + 0.0 0.0353618421053 0.911317567568 0.265625 0.029484029484 + 0.871610845295 0.407043407043 0.196172248804 0.956592956593 + 0.384370015949 0.101556101556 0.0 0.0868140868141 0.845295055821 + 0.356265356265 0.0 + + + 0.0 0.0 0.0 0.141447368421 0.885416666667 0.838815789474 + 0.470394736842 0.210526315789 0.0 0.0 0.0 0.0 0.920138888889 1.0 + 0.381578947368 0.0 0.0 0.0278637770898 0.77399380805 0.869969040248 + 0.676470588235 0.551083591331 0.482972136223 0.278637770898 + 0.0590277777778 0.0328947368421 0.848684210526 1.0 0.388888888889 + 0.0 0.0 0.0 0.927083333333 1.0 0.506578947368 0.434210526316 + 0.260416666667 0.0 0.0 0.0 0.911764705882 0.984520123839 + 0.430340557276 0.176470588235 0.160130718954 0.0 0.0 0.0 0.125 + 0.184210526316 0.763157894737 0.980263157895 0.527777777778 0.0 0.0 + 0.0 0.0 0.0433436532508 0.671826625387 0.969040247678 + 0.735294117647 0.179566563467 0.0 0.0 + + + 0.480669455552 0.12217407545 0.0801552234704 0.0785885293198 + 0.0967817521893 0.277684378134 0.0305137078797 0.141141570853 + 0.191165605758 0.0381171633385 0.132624384201 0.237122316072 + 0.0406450049641 0.0159814729745 + + + + + + + + + 1 1 7 1 7 1 7 1 2 1 4 1 2 1 4 1 2 1 4 4 3 5 4 4 13 2 6 2 5 4 4 4 5 3 + 5 3 5 3 5 1 7 1 7 1 7 1 7 3 1 1 3 3 1 2 2 3 1 1 3 5 3 1 1 3 5 1 1 1 5 + 1 7 1 1 1 3 6 4 4 4 4 4 3 6 2 6 2 5 2 7 1 7 1 7 1 2 0 + + + + 312.0 + + + 0.205128205128 + + + 100.0 + + + 1.3 + + + 1.16522366522 + + + 0.511428571429 0.510263157895 0.029236 1.019179 0.114838 + 0.000637824 -0.006647964 -0.000102608 -0.106613262 + + + 8.0 + + + 1.5 0.230769230769 + + + 0.5 2.5 2.0 1.0 0.307692307692 0.0 0.512820512821 0.0 + + + 39.0 + + + 3.0 11.0 0.204081632653 3.0 4.0 1.0 + + + 0.0 0.974358974359 + + + 0.320512820513 + + + 0.555555555556 0.1 0.0 0.0 0.333333333333 0.8 0.55 0.1 + 0.333333333333 0.25 0.5 0.75 0.0 0.0 0.4 0.45 + + + 0.0 0.2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.4 0.0 0.0 0.0 0.0 0.0 0.0 + 0.6 0.8 1.0 1.0 0.4 0.2 0.0 0.0 0.6 0.8 0.6 0.6 0.2 0.2 0.0 0.25 + 1.0 0.4 0.6 0.6 1.0 0.8 0.2 0.0 0.0 0.0 0.0 0.0 0.4 1.0 1.0 0.0 0.0 + 0.0 0.0 0.6 0.8 1.0 0.2 0.0 0.0 0.0 0.0 0.2 0.0 0.6 0.0 + + + 0.441932994686 0.248625942052 0.0529441468727 0.0178783042116 + 0.261131603495 0.432289918748 0.194234862079 0.0659366191002 + 0.0258757812545 0.0220529843978 0.208572091063 0.388064876102 + 0.357121857174 0.159014837333 + + + + + + + + + 24 9 4 2 36 20 2 16 35 39 35 39 35 39 35 39 35 39 35 38 37 37 36 39 + 35 39 35 38 36 39 35 39 36 38 36 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 36 39 36 38 36 39 35 39 35 39 36 38 36 36 + 38 1 3 1 1 30 38 1 2 33 38 36 38 36 38 36 38 36 38 36 34 2 2 36 22 2 + 3 1 6 2 2 37 11 13 1 10 2 72 2 72 2 23 3 1 2 43 2 11 22 39 3 1 32 37 + 4 1 32 37 4 1 32 37 4 1 32 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 32 47 24 46 3 1 29 40 37 38 3 4 + 29 37 6 1 30 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 + 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 11 20 6 71 3 593 0 + + + + 7030.0 + + + 0.778947368421 + + + 3272.0 + + + 0.122555012225 + + + 1.53637660485 + + + 0.499627390562 0.449191723456 0.128877605193 0.177078612472 + 0.107674683425 0.000222981705125 0.000913629045074 0.00026117558296 + 0.00183874260738 + + + 74.0 + + + 0.391891891892 0.231578947368 + + + 0.324324324324 0.0 0.702702702703 0.432432432432 0.0842105263158 + 0.505263157895 0.252631578947 0.0421052631579 + + + 95.0 + + + 5.0 24.0 0.168724279835 2.0 2.0 3.0 + + + 0.0 0.905263157895 + + + 0.465433854908 + + + 0.929951690821 0.849537037037 0.00694444444444 0.0 0.972540045767 + 0.912280701754 0.0460526315789 0.0328947368421 0.0845410628019 + 0.289351851852 0.976851851852 0.606481481481 0.0 0.260964912281 + 0.912280701754 0.572368421053 + + + 0.888888888889 0.916666666667 0.805555555556 0.722222222222 + 0.0277777777778 0.0 0.0 0.0 0.909090909091 1.0 1.0 0.87037037037 + 0.0 0.0 0.0 0.0 0.919191919192 1.0 1.0 0.814814814815 0.0 0.0 0.0 + 0.0 0.963636363636 1.0 1.0 0.833333333333 0.1 0.075 0.1 0.025 + 0.20202020202 0.138888888889 0.203703703704 0.490740740741 1.0 + 0.907407407407 1.0 0.25 0.0 0.0 0.0 0.462962962963 1.0 1.0 1.0 + 0.175925925926 0.0 0.0 0.0 0.509259259259 1.0 1.0 1.0 + 0.166666666667 0.0 0.0 0.0 0.533333333333 0.9 0.766666666667 0.9 + 0.225 + + + 0.365263094364 0.212655122831 0.00924583713179 0.00352374121067 + 0.0423445381908 0.373097244688 0.0939055274076 0.00802157952317 + 0.00381350619597 0.00694715444527 0.0915020583158 0.225789570739 + 0.118818772469 0.0616315359354 + + + + + + + + + 1 2 1 2 1 2 1 17 1 2 1 2 + + + + 33.0 + + + 0.272727272727 + + + 27.0 + + + 1.11111111111 + + + 0.833333333333 + + + 0.611111111111 0.518518518519 0.0201188843164 0.321089264848 + -0.00838286846517 -0.00107552252554 0.0118904990324 0.0012547762798 + -0.0251353597636 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 11.0 + + + 0.0 0.0 0.0 0.0 6.0 1.0 + + + 0.0 0.909090909091 + + + 0.818181818182 + + + 0.0 0.333333333333 1.0 0.333333333333 0.0 0.333333333333 1.0 + 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.327521835488 0.277138642703 0.0945978387085 0.0562319030875 + 0.359858928551 0.180491167768 0.262913012184 0.0869020699684 + 0.0863024602271 0.0994764943445 0.116000480136 0.262460064733 + 0.103026804244 0.242419435903 + + + + + + + + + 6 3 7 4 5 5 5 5 5 5 5 5 5 5 5 5 4 6 4 6 5 4 6 4 6 4 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 6 4 6 4 6 4 6 4 5 5 5 + 5 5 4 6 4 7 4 5 4 6 4 6 4 6 4 6 5 4 5 5 5 5 5 5 5 5 5 5 6 4 6 3 8 1 + 37 5 5 5 5 5 5 5 6 3 6 4 5 6 5 5 5 5 4 5 7 3 6 4 5 5 5 5 6 4 6 4 6 4 + 6 4 6 3 7 3 7 3 7 4 7 2 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 + 3 6 4 6 4 6 3 8 2 8 3 7 3 7 2 8 2 8 2 8 2 8 2 8 2 7 3 8 3 7 3 7 3 7 2 + 6 4 6 4 7 3 7 4 7 2 57 4 5 5 6 4 6 4 6 4 6 4 6 4 5 5 5 5 6 4 6 5 5 4 + 5 5 5 4 6 4 6 4 6 5 5 5 6 4 5 5 5 4 6 5 6 4 5 5 5 5 5 5 5 5 5 5 5 5 5 + 5 5 5 5 5 6 4 6 4 6 4 6 4 5 6 4 5 5 5 5 5 5 6 4 6 4 6 4 6 4 6 4 6 4 4 + 6 5 5 5 5 5 5 5 5 5 5 5 5 5 6 3 7 4 7 2 47 4 5 4 6 5 5 4 7 3 7 3 7 3 + 7 3 7 3 7 3 7 3 7 3 8 2 8 2 8 2 8 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 7 0 + + + + 2010.0 + + + 0.0497512437811 + + + 775.0 + + + 0.634838709677 + + + 0.856740296337 + + + 0.393261648746 0.459212903226 0.00574493182505 4.33198883636 + -0.111645700245 0.000212382968879 0.0620631391508 -0.00427524624922 + 0.610498024946 + + + 10.0 + + + 4.5 0.0 + + + 5.6 4.4 2.8 0.4 0.0 0.0 0.0 0.0 + + + 201.0 + + + 5.0 15.0 0.147540983607 4.0 30.0 1.0 + + + 0.0 0.995024875622 + + + 0.385572139303 + + + 0.0 0.07 0.61 0.549019607843 0.473333333333 0.86 0.82 + 0.712418300654 0.98 0.27 0.01 0.0686274509804 0.573333333333 0.0 + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.16 0.76 0.72 0.115384615385 0.0 0.0 0.16 0.12 + 0.52 1.0 0.92 0.461538461538 0.0 0.44 0.72 0.96 0.8 1.0 0.96 + 0.884615384615 0.28 0.92 0.86 0.88 0.64 0.92 0.9 0.326923076923 + 0.92 1.0 0.76 0.04 0.0 0.04 0.28 0.0 1.0 1.0 0.28 0.0 0.0 0.0 0.0 + 0.0 1.0 0.72 0.0 0.0 0.0 0.0 0.0 0.0 0.68 0.18 0.0 0.0 0.0 0.0 0.0 + 0.0 + + + 0.417003543115 0.268607685889 0.0385150689319 0.0137034341827 + 0.144325566229 0.51548510032 0.206351114643 0.0165372135416 + 0.0433698253238 0.0253980627014 0.152473894009 0.397102050188 + 0.474746595546 0.161050662785 + + + + + + + + + 31 2 166 2 164 4 162 6 159 9 160 8 159 8 158 10 156 13 154 13 154 13 + 1 1 152 16 151 17 150 17 87 2 2 7 52 17 87 29 1 2 31 18 86 32 31 18 + 86 32 31 17 87 32 31 17 87 32 31 17 87 32 31 19 2 4 79 32 31 19 2 6 + 77 32 31 20 1 8 75 32 31 20 1 10 72 33 31 33 70 33 31 20 1 14 68 33 + 30 20 2 16 2 3 62 19 1 12 30 19 6 19 60 33 30 17 5 23 59 33 7 1 23 17 + 4 29 53 33 5 3 23 13 1 2 6 29 52 33 4 6 21 9 6 1 7 25 54 36 3 3 23 8 + 14 26 54 36 3 3 24 16 6 12 1 13 53 35 4 3 24 13 9 11 7 10 51 35 3 4 + 24 12 11 12 6 12 49 33 4 5 23 13 10 36 44 33 3 5 23 12 14 35 42 34 2 + 5 22 10 18 35 41 33 4 9 1 3 11 12 20 38 36 32 5 33 21 41 35 33 3 32 + 24 5 1 38 31 32 4 21 5 5 26 3 4 6 2 29 29 34 3 21 4 6 41 34 25 33 3 + 35 22 3 4 4 4 34 25 33 3 35 22 5 4 44 21 32 4 31 27 54 19 33 3 32 26 + 57 16 33 3 32 25 54 6 3 11 33 3 31 28 52 6 7 8 32 3 31 30 6 5 40 5 9 + 3 35 3 30 33 6 3 13 8 18 8 2 1 43 2 30 39 18 8 14 9 2 3 42 2 31 37 21 + 9 13 6 48 2 30 38 29 1 12 7 19 3 27 1 30 38 28 7 7 7 17 7 25 1 30 39 + 30 10 1 7 16 9 1 2 9 2 9 2 31 40 31 16 2 1 16 25 3 2 32 40 30 15 20 + 25 2 3 34 40 30 12 20 26 3 2 34 42 28 13 19 26 3 7 25 2 2 44 28 12 18 + 27 2 3 5 2 29 45 25 12 18 26 2 10 30 48 23 7 21 27 1 2 3 3 1 2 29 34 + 1 16 21 6 21 26 2 1 39 34 3 16 24 1 21 26 2 2 38 57 42 26 2 2 38 63 + 35 27 3 1 38 38 7 19 34 28 1 1 39 38 9 6 5 8 33 29 39 39 7 1 1 9 2 11 + 6 1 22 29 39 43 8 23 23 32 38 44 5 29 20 31 38 43 8 28 20 30 38 43 8 + 27 21 30 39 39 18 11 1 8 21 30 39 42 34 1 21 30 39 42 56 29 40 44 54 + 29 40 47 51 30 39 50 48 30 9 1 30 49 2 1 45 30 4 13 3 3 17 53 44 30 3 + 23 14 51 2 1 15 2 26 29 5 30 6 57 11 9 20 29 5 31 5 59 10 9 19 29 5 + 31 5 60 13 5 19 30 3 32 5 66 31 30 3 32 4 72 26 29 4 32 4 78 21 28 5 + 31 4 79 21 28 2 33 4 80 20 148 18 152 15 153 14 160 7 161 6 162 4 164 + 3 164 2 30 0 + + + + 16700.0 + + + 1.67 + + + 6300.0 + + + 0.213492063492 + + + 0.842207771407 + + + 0.505607190667 0.517421837422 0.421370769111 0.0694410112659 + -0.0130357521746 -0.0251726809351 0.0016498786557 -0.00677861025239 + -0.000335329640263 + + + 167.0 + + + 1.45508982036 2.23 + + + 1.34131736527 1.41317365269 2.41916167665 0.574850299401 0.76 3.16 + 3.48 1.52 + + + 100.0 + + + 15.0 94.0 0.279036827195 19.0 6.0 9.0 + + + 0.0 0.99 + + + 0.377245508982 + + + 0.263414634146 0.530731707317 0.830243902439 0.375609756098 + 0.106666666667 0.584761904762 0.155238095238 0.00571428571429 0.0 + 0.277142857143 0.614285714286 0.401904761905 0.344761904762 + 0.791428571429 0.489523809524 0.27619047619 + + + 0.0 0.0 0.116666666667 0.811538461538 0.929166666667 0.903846153846 + 0.658333333333 0.0653846153846 0.400793650794 0.619047619048 + 0.579365079365 0.582417582418 0.583333333333 0.901098901099 0.75 + 0.0769230769231 0.015873015873 0.395604395604 0.686507936508 + 0.18315018315 0.0 0.0 0.0 0.0 0.0 0.0 0.579365079365 0.897435897436 + 0.551587301587 0.0879120879121 0.0238095238095 0.0 0.0 0.0 + 0.0198412698413 0.827838827839 0.845238095238 0.421245421245 + 0.611111111111 0.0 0.0 0.0 0.0 0.21978021978 0.5 0.699633699634 + 0.849206349206 0.197802197802 0.0 0.604395604396 0.722222222222 + 0.666666666667 0.734126984127 0.600732600733 0.619047619048 + 0.490842490842 0.0 0.721611721612 0.880952380952 0.897435897436 + 0.603174603175 0.047619047619 0.0 0.0 + + + 0.277670531567 0.243474984024 0.0576477781544 0.0282727341837 + 0.0577086725973 0.334341011234 0.135307685275 0.0793972979511 + 0.0300773397654 0.0262410813751 0.150313918128 0.232177931279 + 0.162021070091 0.0980855794043 + + + + + + + + + 12 3 36 4 36 5 32 10 31 12 29 10 30 9 31 9 31 11 28 13 28 15 25 16 24 + 19 20 21 19 22 18 23 17 24 16 26 14 27 13 27 13 29 11 30 9 32 8 32 8 + 32 8 31 9 31 9 31 8 32 9 31 8 26 14 26 15 25 16 24 18 26 15 25 14 21 + 19 2 6 13 15 1 3 2 6 14 14 1 1 1 1 2 6 16 12 3 2 2 5 16 12 10 1 15 1 + 2 11 25 15 25 15 27 2 1 10 30 10 30 10 31 9 4 1 26 9 4 2 26 8 4 3 24 + 9 4 4 23 9 4 4 22 10 4 5 21 10 4 6 20 10 4 7 19 10 4 7 1 1 17 10 4 8 + 18 10 2 11 17 10 2 12 4 1 11 10 3 12 3 1 3 1 7 10 4 11 3 1 2 3 6 9 5 + 11 3 1 2 4 5 8 10 7 6 5 3 10 9 7 5 7 2 10 8 32 7 33 7 30 3 1 5 33 7 + 34 9 2 1 28 14 26 15 26 15 24 18 22 19 21 20 20 21 18 23 18 23 17 25 + 15 26 14 27 13 27 13 27 13 27 13 27 13 27 12 28 13 26 14 26 14 26 14 + 26 14 26 14 26 14 27 13 28 12 28 12 27 13 27 13 27 13 9 4 14 13 9 6 2 + 3 7 13 10 4 14 12 27 13 28 11 29 12 28 12 17 3 8 12 28 12 5 1 22 12 5 + 3 20 12 5 3 20 12 5 1 2 4 16 12 5 1 1 6 16 12 4 8 15 13 4 8 16 12 4 + 10 14 12 4 11 13 12 5 9 14 11 7 7 3 1 11 10 7 1 1 11 9 12 7 13 8 12 6 + 17 5 12 5 18 5 13 4 19 3 13 7 18 1 15 5 35 5 39 1 35 1 1 4 34 5 34 6 + 35 5 34 6 34 6 35 5 35 5 35 5 35 5 36 1 31 0 + + + + 5640.0 + + + 0.283687943262 + + + 2808.0 + + + 0.229700854701 + + + 0.995295539962 + + + 0.508775294032 0.46745014245 0.0260426953154 0.458384936404 + -0.0133654483026 0.000443539040122 -0.00633758132844 + 0.0011888927383 0.0188003378332 + + + 40.0 + + + 2.65 0.475177304965 + + + 2.2 3.9 2.1 2.4 0.0 1.10638297872 0.141843971631 0.652482269504 + + + 141.0 + + + 14.0 56.0 0.25340599455 10.0 7.0 2.0 + + + 0.0 0.992907801418 + + + 0.497872340426 + + + 0.111428571429 0.294285714286 0.402857142857 0.341666666667 + 0.934285714286 0.502857142857 0.951428571429 0.363888888889 + 0.697142857143 0.785714285714 0.822857142857 0.452777777778 + 0.382857142857 0.491428571429 0.197142857143 0.25 + + + 0.0 0.0 0.0 0.0222222222222 0.0 0.0 0.0 0.0 0.0941176470588 + 0.344444444444 0.458823529412 0.688888888889 0.8 0.811764705882 + 0.766666666667 0.6 0.952941176471 0.988888888889 0.705882352941 + 0.355555555556 1.0 1.0 0.588888888889 0.366666666667 0.788235294118 + 1.0 0.8 0.177777777778 0.955555555556 0.847058823529 0.5 0.0 + 0.458823529412 1.0 1.0 0.6 0.8 0.964705882353 0.811111111111 0.0 + 0.294117647059 1.0 1.0 0.566666666667 0.555555555556 0.988235294118 + 0.977777777778 0.0222222222222 0.0705882352941 0.911111111111 + 0.811764705882 0.611111111111 0.233333333333 0.564705882353 + 0.866666666667 0.133333333333 0.0 0.511111111111 0.282352941176 + 0.266666666667 0.0 0.0 0.0 0.0 + + + 0.508053311962 0.199795012796 0.0267218455106 0.0105615625076 + 0.240283189462 0.449238555595 0.111794731025 0.00826413687695 + 0.0327281335736 0.0242760871173 0.0731850753495 0.427977562323 + 0.286534472447 0.060488555522 + + + + + + + + + 35 7 68 15 18 1 41 21 11 2 41 34 41 35 40 35 40 35 40 35 40 17 3 15 + 41 16 2 15 42 16 1 17 41 3 2 11 2 16 42 1 4 11 1 6 1 8 42 3 1 1 1 17 + 2 2 1 4 43 34 41 34 41 34 41 34 41 35 40 35 40 35 40 35 40 35 41 34 + 41 34 40 35 40 35 40 35 40 35 39 7 2 29 38 6 2 28 38 37 38 37 38 38 2 + 2 34 8 1 27 3 3 32 37 3 7 28 37 3 3 1 7 24 37 3 17 17 38 3 22 11 39 3 + 72 4 71 4 71 4 71 4 40 7 24 4 39 15 17 4 38 22 11 4 38 30 3 5 37 32 1 + 5 37 32 1 5 37 33 1 4 37 33 1 4 37 33 1 4 37 33 1 4 37 33 1 5 36 33 1 + 4 37 33 1 4 37 33 2 3 37 33 2 4 36 33 2 5 3 1 31 33 2 6 1 6 22 38 2 6 + 1 7 23 1 2 33 2 13 27 33 2 13 28 32 1 5 3 7 27 32 2 4 4 5 7 2 19 32 2 + 7 13 2 8 3 8 32 2 9 32 32 2 8 33 44 31 33 1 5 1 7 28 33 2 4 2 6 29 32 + 2 5 4 4 28 32 2 5 36 32 2 5 36 31 3 5 36 32 2 5 36 32 2 5 37 31 2 6 + 36 31 2 9 33 31 2 13 29 32 1 18 24 59 17 65 10 68 7 70 4 33 0 + + + + 6525.0 + + + 0.862068965517 + + + 3132.0 + + + 0.172733077905 + + + 0.721673254282 + + + 0.509030582306 0.493220766878 0.120073953919 0.161164958957 + -0.0750211991648 -0.000665020959152 0.00444939987962 + 0.00121515146409 0.000446115607736 + + + 75.0 + + + 0.853333333333 0.83908045977 + + + 1.22666666667 0.533333333333 0.906666666667 0.586666666667 + 0.64367816092 0.459770114943 1.10344827586 1.10344827586 + + + 87.0 + + + 9.0 52.0 0.208556149733 7.0 9.0 3.0 + + + 0.0 0.988505747126 + + + 0.48 + + + 0.0 0.275252525253 0.790404040404 0.441919191919 0.0726817042607 + 0.215311004785 0.99043062201 0.83971291866 0.907268170426 + 0.988038277512 0.172248803828 0.22009569378 0.624060150376 + 0.827751196172 0.205741626794 0.0741626794258 + + + 0.0 0.0 0.0 0.636363636364 0.828282828283 0.464646464646 + 0.282828282828 0.151515151515 0.0 0.0 0.0 0.464646464646 1.0 + 0.868686868687 0.828282828283 0.505050505051 0.0 0.0 0.0 + 0.309090909091 1.0 1.0 0.963636363636 0.654545454545 0.211111111111 + 0.10101010101 0.111111111111 0.454545454545 1.0 0.959595959596 + 0.969696969697 0.777777777778 0.955555555556 0.919191919192 + 0.959595959596 0.989898989899 0.323232323232 0.212121212121 + 0.373737373737 0.555555555556 0.79 0.963636363636 1.0 1.0 + 0.172727272727 0.0 0.0 0.0 0.7 0.959595959596 1.0 1.0 + 0.313131313131 0.0 0.0 0.0 0.36 0.5 0.636363636364 0.709090909091 + 0.336363636364 0.163636363636 0.181818181818 0.1 + + + 0.36776611003 0.162394777601 0.0180432883215 0.0209172774587 + 0.057970698767 0.326871054863 0.0636829099064 0.0167219015063 + 0.025939552673 0.0143450637505 0.0846171101199 0.2292899505 + 0.111162531529 0.0211447455864 + + + + + + + + + 317 2 1 1 36 4 35 2 1 6 31 3 36 11 1 23 5 3 35 44 35 44 35 22 1 21 35 + 20 3 21 36 19 4 20 36 20 2 21 36 20 2 21 35 21 2 21 35 21 2 21 35 21 + 2 21 35 21 2 21 35 44 35 20 3 20 36 20 3 21 35 20 3 21 35 21 2 21 35 + 43 36 43 36 43 36 20 3 20 44 12 3 19 42 15 3 18 43 15 3 20 45 11 3 20 + 41 1 3 12 1 21 36 43 36 43 36 43 36 43 37 42 39 4 1 11 4 20 36 18 6 + 19 36 1 2 3 3 9 6 19 36 43 36 42 37 42 37 20 3 20 19 11 1 4 1 19 5 19 + 5 8 3 19 1 19 5 33 2 19 1 20 2 34 3 19 1 56 3 19 1 55 4 19 2 1 17 8 3 + 24 5 19 35 19 5 20 37 17 5 20 37 17 5 20 37 19 4 19 37 20 2 20 37 20 + 2 20 37 20 2 20 37 20 2 20 37 20 2 20 37 21 1 20 36 43 34 46 34 23 1 + 21 34 22 3 20 35 21 3 20 35 21 2 21 35 21 2 20 36 21 2 20 36 21 2 20 + 36 43 36 43 36 43 36 43 37 42 37 42 37 20 2 20 37 20 2 21 35 21 2 21 + 36 20 2 21 36 20 2 21 36 43 36 43 36 43 36 20 2 21 36 17 6 20 36 16 7 + 19 38 3 1 11 7 4 10 5 38 15 64 8 71 5 73 5 74 3 76 3 77 1 41 0 + + + + 7426.0 + + + 0.840425531915 + + + 3506.0 + + + 0.160011409013 + + + 1.47182447108 + + + 0.500062164495 0.496844119758 0.132556959447 0.153847946079 + 0.0947844189072 0.000291245351835 -0.00189636157149 + -0.00110774656585 -0.000997345803103 + + + 79.0 + + + 0.835443037975 0.797872340426 + + + 1.16455696203 1.26582278481 0.759493670886 0.0 0.808510638298 + 0.893617021277 0.936170212766 0.468085106383 + + + 94.0 + + + 20.0 78.0 0.139534883721 4.0 13.0 5.0 + + + 0.0425531914894 0.989361702128 + + + 0.472124966335 + + + 0.752860411899 0.896929824561 0.0892448512586 0.0 0.665217391304 + 0.90625 0.289130434783 0.145833333333 0.19347826087 0.2625 + 0.876086956522 0.689583333333 0.0 0.15 0.960869565217 + 0.670833333333 + + + 0.545454545455 0.972222222222 0.675925925926 0.907407407407 + 0.191919191919 0.0 0.0 0.0 0.454545454545 1.0 1.0 0.983333333333 + 0.181818181818 0.0 0.0 0.0 0.418181818182 0.775 0.866666666667 + 0.758333333333 0.254545454545 0.0 0.0 0.0 0.427272727273 1.0 1.0 + 1.0 0.5 0.416666666667 0.333333333333 0.25 0.272727272727 + 0.491666666667 0.375 0.491666666667 1.0 1.0 1.0 0.583333333333 0.0 + 0.0 0.0 0.183333333333 0.645454545455 0.85 0.916666666667 + 0.258333333333 0.0 0.0 0.0 0.308333333333 1.0 1.0 1.0 + 0.366666666667 0.0 0.0 0.0 0.291666666667 0.9 0.941666666667 0.95 + 0.366666666667 + + + 0.372130003162 0.194087595588 0.0111206142901 0.00898521595109 + 0.0263962965661 0.330436778505 0.0725266698717 0.00715186090466 + 0.00514937464167 0.0130579862802 0.0692192388685 0.171765256056 + 0.040740759684 0.0634404135874 + + + + + + + + + 43 1 53 1 39 1 39 2 52 2 39 2 37 3 23 10 2 9 7 3 39 6 8 6 4 18 19 28 + 3 4 39 20 4 18 16 38 39 20 4 19 15 38 39 20 5 18 18 35 39 20 5 17 20 + 13 2 19 39 20 3 19 15 3 2 34 39 21 2 19 15 4 1 34 39 21 2 20 14 39 39 + 21 2 20 14 39 39 21 2 20 14 39 39 43 14 39 39 43 14 39 39 43 14 39 39 + 22 1 20 14 39 39 21 2 20 14 38 40 22 1 20 14 38 40 43 14 38 40 43 14 + 38 39 44 14 38 38 46 12 39 40 44 11 41 39 44 11 42 38 44 12 40 38 46 + 12 39 40 44 13 38 40 44 12 4 1 35 39 43 13 39 33 4 4 41 14 38 36 1 5 + 41 15 37 36 1 5 41 14 4 1 33 35 2 5 41 14 3 2 34 34 2 4 39 2 1 16 1 2 + 35 40 20 1 17 19 1 1 65 3 2 6 41 18 40 2 29 5 42 18 14 1 55 5 41 15 + 17 3 5 4 44 6 39 17 1 2 70 6 20 1 20 18 70 7 41 14 20 5 48 7 20 1 20 + 14 20 5 48 7 20 1 20 14 20 3 50 7 19 2 19 15 20 5 48 7 40 15 6 22 45 + 7 4 1 9 22 5 14 3 28 42 7 3 36 1 15 2 33 38 97 38 97 38 98 37 97 38 + 97 38 97 38 97 38 97 35 100 1 4 28 102 38 97 38 97 4 3 31 97 38 97 38 + 97 38 97 38 97 38 97 38 97 39 96 39 96 38 97 38 97 38 97 38 97 39 96 + 38 97 38 97 38 97 38 97 19 3 3 1 12 97 2 5 5 19 7 105 3 23 4 105 1 28 + 1 269 1 134 1 133 3 133 2 133 2 132 4 132 2 133 1 2 0 + + + + 12150.0 + + + 1.5 + + + 5032.0 + + + 0.14546899841 + + + 1.55504885993 + + + 0.525271100776 0.387316678873 0.310769539942 0.0785982360643 + 0.0913686593989 -0.0313713242518 0.0164858427046 0.0148857385564 + 0.00873584707816 + + + 135.0 + + + 0.548148148148 1.22222222222 + + + 0.266666666667 0.711111111111 0.622222222222 0.533333333333 + 1.95555555556 2.04444444444 0.488888888889 0.266666666667 + + + 90.0 + + + 14.0 76.0 0.211650485437 15.0 4.0 8.0 + + + 0.0 0.988888888889 + + + 0.414156378601 + + + 0.754820936639 0.888010540184 0.0606060606061 0.0 0.485294117647 + 0.562659846547 0.0387700534759 0.0 0.807486631016 0.915601023018 + 0.181818181818 0.0869565217391 0.0 0.418158567775 0.930481283422 + 0.494884910486 + + + 0.607954545455 0.880681818182 0.840909090909 0.734375 + 0.136363636364 0.0 0.0 0.0 0.572192513369 0.957219251337 1.0 + 0.970588235294 0.106951871658 0.0 0.0 0.0 0.51871657754 + 0.705882352941 0.764705882353 0.691176470588 0.096256684492 0.0 0.0 + 0.0 0.245989304813 0.470588235294 0.48128342246 0.323529411765 + 0.0588235294118 0.0 0.0 0.0 0.79679144385 1.0 1.0 0.906862745098 + 0.0 0.0 0.0 0.0 0.636363636364 0.79679144385 0.812834224599 + 0.941176470588 0.406417112299 0.320855614973 0.352941176471 + 0.00980392156863 0.0 0.0 0.0 0.823529411765 1.0 0.994652406417 + 0.983957219251 0.0441176470588 0.0 0.0 0.0427807486631 + 0.740196078431 0.866310160428 0.860962566845 0.887700534759 + 0.137254901961 + + + 0.415954351123 0.204492384165 0.0658061528103 0.0694905900895 + 0.0642589873375 0.370147399187 0.104724651799 0.185616112795 + 0.147181920504 0.0573429043498 0.0448456896259 0.12457429175 + 0.252085094163 0.0368004380408 + + + + + + + + + 28 2 31 5 31 4 31 6 30 7 28 9 21 15 21 15 18 19 19 5 3 12 17 4 4 10 + 19 4 3 9 20 3 4 9 29 1 2 3 115 7 28 9 27 6 30 4 32 3 32 5 30 5 31 4 + 32 4 31 6 30 6 30 6 31 4 33 3 32 5 32 4 34 2 30 0 + + + + 1224.0 + + + 1.05882352941 + + + 225.0 + + + 0.697777777778 + + + 0.535087719298 + + + 0.503873015873 0.415218855219 0.557118331962 0.347398496571 + -0.378121832647 -0.110889361786 -0.13755206574 0.141901909008 + 0.127386387496 + + + 36.0 + + + 0.166666666667 0.147058823529 + + + 0.444444444444 0.0 0.111111111111 0.111111111111 0.0 0.588235294118 + 0.0 0.0 + + + 34.0 + + + 0.0 5.0 0.4 3.0 1.0 0.0 + + + 0.0 0.970588235294 + + + 0.183823529412 + + + 0.0 0.0 0.527777777778 0.493827160494 0.0277777777778 + 0.0864197530864 0.0694444444444 0.0 0.444444444444 0.382716049383 + 0.0 0.0 0.402777777778 0.506172839506 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.1875 0.5625 0.9375 0.5 0.0 0.0 0.0 0.0 0.9 0.4 + 0.35 0.32 0.0 0.0 0.0 0.0 0.3125 0.0 0.0 0.0 0.0 0.1 0.35 0.0 0.0 + 0.0 0.0 0.0 0.0 0.5 0.875 0.15 0.0 0.0 0.0 0.0 0.35 0.85 0.6 0.08 + 0.0 0.0 0.0 0.0 0.625 1.0 1.0 0.3 0.0 0.0 0.0 0.0 0.0 0.15 0.7 0.2 + 0.0 0.0 0.0 0.0 + + + 0.297166093924 0.285347220198 0.328812967476 0.126938565185 + 0.0135853049256 0.424355029287 0.193018480084 0.33239887562 + 0.0703494968693 0.154955835052 0.168715691184 0.31918339175 + 0.289220610739 0.148407234174 + + + + + + + + + 40 1 39 2 39 2 39 2 39 2 38 3 38 3 38 3 1 35 1 4 1 40 1 19 2 19 1 40 + 1 122 1 81 1 40 1 40 1 40 1 40 1 40 1 40 1 40 1 40 1 40 1 40 1 40 1 + 40 9 21 1 1 1 1 13 24 3 3 6 40 1 6 3 31 1 40 1 40 1 40 2 39 2 39 2 39 + 2 39 2 39 2 39 2 39 2 39 2 39 2 39 2 39 2 39 3 38 3 35 2 1 3 35 6 3 7 + 2 17 5 7 1 40 2 38 4 37 3 39 2 39 2 36 0 + + + + 2378.0 + + + 0.706896551724 + + + 1706.0 + + + 0.145369284877 + + + 1.00640882331 + + + 0.516588511137 0.506211307871 0.0776319672433 0.0972557572448 + -0.00337398878693 6.75048984959e-05 0.000268832257187 + -0.00107699905838 0.00064182724092 + + + 41.0 + + + 0.658536585366 0.155172413793 + + + 1.46341463415 0.0 0.19512195122 0.878048780488 0.137931034483 0.0 + 0.275862068966 0.206896551724 + + + 58.0 + + + 5.0 23.0 0.131578947368 0.0 3.0 2.0 + + + 0.0 0.98275862069 + + + 0.717409587889 + + + 0.392857142857 0.913333333333 0.735714285714 0.52 0.428571428571 + 1.0 1.0 0.546666666667 0.414285714286 1.0 1.0 0.533333333333 + 0.538961038961 1.0 0.88961038961 0.533333333333 + + + 0.0 0.714285714286 0.857142857143 0.8 0.571428571429 0.6 + 0.542857142857 0.425 0.0 0.857142857143 1.0 1.0 0.771428571429 1.0 + 1.0 0.175 0.0 0.857142857143 1.0 1.0 1.0 1.0 1.0 0.175 0.0 + 0.857142857143 1.0 1.0 1.0 1.0 1.0 0.125 0.0 0.8 1.0 1.0 1.0 1.0 + 1.0 0.125 0.0 0.857142857143 1.0 1.0 1.0 1.0 1.0 0.125 0.0 + 0.857142857143 1.0 1.0 0.828571428571 1.0 1.0 0.2 0.357142857143 + 0.904761904762 1.0 1.0 0.738095238095 1.0 0.952380952381 + 0.104166666667 + + + 0.491924300764 0.0274693254863 0.00342870416998 0.00819297716872 + 0.095777322399 0.0507774823704 0.0650657569224 0.00144671265272 + 0.0154110497371 0.00276493858106 0.202234434004 0.0299709068945 + 0.148957141528 0.0275931653712 + + + + + + + + + 34 1 34 1 33 1 33 2 33 1 34 1 33 2 32 2 33 2 32 2 33 2 32 2 8 1 24 2 + 7 3 22 3 9 2 21 3 9 1 22 2 10 2 20 2 10 3 20 2 10 3 20 2 10 1 21 2 10 + 3 20 2 10 3 19 3 10 2 20 2 12 1 19 2 33 1 67 2 16 1 16 2 17 2 13 3 16 + 3 12 4 16 5 10 4 14 7 10 3 16 6 10 2 34 1 22 2 32 2 98 8 27 8 26 10 5 + 2 18 11 5 1 19 7 27 9 25 13 26 9 26 9 26 8 23 0 + + + + 1680.0 + + + 0.729166666667 + + + 216.0 + + + 1.17592592593 + + + 0.477301587302 + + + 0.357434640523 0.647261623325 0.456189093221 0.758201775485 + -0.381620858577 0.243058180721 0.257848719204 -0.326381029878 + -0.327817814957 + + + 35.0 + + + 0.657142857143 0.416666666667 + + + 1.94285714286 0.685714285714 0.0 0.0 0.0 1.0 0.5 0.166666666667 + + + 48.0 + + + 0.0 5.0 0.430769230769 11.0 0.0 0.0 + + + 0.0 0.979166666667 + + + 0.128571428571 + + + 0.0 0.260416666667 0.229166666667 0.614583333333 0.0 0.0 + 0.0555555555556 0.314814814815 0.0 0.0740740740741 0.203703703704 + 0.0185185185185 0.175925925926 0.175925925926 0.0 0.0 + + + 0.0 0.0 0.166666666667 0.375 0.0 0.125 0.416666666667 0.375 0.0 0.0 + 0.333333333333 0.166666666667 0.25 0.541666666667 0.666666666667 + 1.0 0.0 0.0 0.0 0.0 0.0 0.2 0.366666666667 0.733333333333 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0416666666667 0.0 0.0 0.0 0.0 0.0 0.125 + 0.291666666667 0.0833333333333 0.0 0.0 0.0 0.0 0.266666666667 0.3 + 0.1 0.0 0.0 0.0 0.166666666667 0.583333333333 0.208333333333 0.0 + 0.0 0.0 0.0 0.233333333333 0.266666666667 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.604832473035 0.118317608855 0.184574727295 0.0627256955479 + 0.463828590065 0.239010122489 0.084882172248 0.379889997897 + 0.135594983706 0.076774256265 0.0696890711846 0.327779098306 + 0.144272995034 0.0739513670301 + + + + + + + + + 0 1 8 2 2 1 4 6 3 6 3 11 1 4 2 0 + + + + 54.0 + + + 1.5 + + + 31.0 + + + 1.1935483871 + + + 1.125 + + + 0.362903225806 0.638709677419 0.163069383371 0.0612265449297 + 0.0328622738411 0.0225253183219 -0.00736705331668 0.00462101195475 + -0.00642713703465 + + + 9.0 + + + 0.0 0.333333333333 + + + 0.0 0.0 0.0 0.0 0.0 0.666666666667 0.0 0.0 + + + 6.0 + + + 2.0 2.0 0.142857142857 0.0 1.0 1.0 + + + 0.0 0.833333333333 + + + 0.574074074074 + + + 0.5 1.0 1.0 1.0 0.0 0.5 1.0 0.75 0.0 0.75 1.0 1.0 0.0 0.0 0.0 + 0.666666666667 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 + 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 + + + 0.46603894592 0.132097965995 0.071092790206 0.0761009085563 + 0.230806907493 0.164454994351 0.0578940732523 0.0740256508859 + 0.0410876241849 0.118867023438 0.0789068096111 0.189907363168 + 0.143821422404 0.0581101706282 + + + + + + + + + 47 1 49 2 48 1 48 1 49 1 49 1 49 1 745 1 48 1 49 1 49 1 49 1 49 1 83 + 1 49 1 49 1 49 2 48 2 45 5 45 6 44 7 42 9 8 1 32 9 7 2 32 9 7 2 31 10 + 7 2 31 10 6 2 32 11 5 2 32 11 5 2 31 12 5 2 31 12 4 2 32 12 4 2 32 12 + 3 3 32 1 1 11 2 2 33 14 1 2 33 3 1 5 2 6 33 7 42 7 42 9 5 4 32 18 31 + 12 1 6 1 1 8 5 16 8 6 7 8 3 17 8 6 6 10 3 17 7 5 8 12 1 17 7 5 9 29 7 + 5 7 31 6 6 3 35 6 6 3 35 7 5 1 38 6 4 1 37 9 1 1 1 1 37 9 1 1 1 3 35 + 17 33 11 1 1 38 4 10 2 34 4 10 2 34 3 48 3 5 5 37 14 36 3 2 2 5 2 21 + 2 13 2 2 4 2 4 20 3 13 2 2 4 2 3 22 2 14 1 2 6 2 1 38 1 3 5 2 1 43 3 + 47 4 47 3 47 3 25 1 23 1 25 2 170 4 45 5 23 2 19 6 23 2 20 5 45 5 123 + 2 49 1 48 2 49 1 48 0 + + + + 4850.0 + + + 0.515463917526 + + + 595.0 + + + 0.791596638655 + + + 0.929459494831 + + + 0.496895901218 0.582720588235 0.109407484991 0.444248121394 + -0.108127458596 0.0021821797924 0.0220070406728 0.00281737108293 + -0.0199129786494 + + + 50.0 + + + 1.32 0.577319587629 + + + 0.56 1.36 2.8 0.24 0.0 0.536082474227 1.11340206186 0.659793814433 + + + 97.0 + + + 10.0 30.0 0.346820809249 13.0 13.0 5.0 + + + 0.0 0.989690721649 + + + 0.122680412371 + + + 0.0 0.0 0.0 0.0666666666667 0.0 0.224358974359 0.538461538462 + 0.190769230769 0.0 0.336805555556 0.378472222222 0.106666666667 + 0.0352564102564 0.0448717948718 0.0384615384615 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.138888888889 0.128205128205 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.25 0.527777777778 + 0.138888888889 0.0 0.0 0.0 0.107142857143 0.72619047619 + 0.809523809524 0.52380952381 0.440476190476 0.164835164835 0.0 0.0 + 0.222222222222 0.930555555556 0.527777777778 0.375 0.305555555556 + 0.128205128205 0.0 0.0 0.0 0.194444444444 0.611111111111 0.0 0.0 + 0.0 0.0 0.0416666666667 0.0416666666667 0.152777777778 0.0 0.0 0.0 + 0.0 0.0952380952381 0.0 0.0 0.0 0.142857142857 0.0 0.0 0.0 + + + 0.785608272439 0.060951276096 0.00724988123833 0.0056993541266 + 0.987373150854 0.167989392763 0.0254846770316 0.0818204821902 + 0.0368432216822 0.0191629713298 0.916465236998 0.331334284189 + 0.0289442067 0.023380630177 + + + + + + + + + 39 3 121 5 120 5 120 4 121 4 124 1 123 2 121 4 121 3 122 2 123 3 122 + 1 124 1 123 2 1 1 85 4 32 4 85 5 21 2 7 5 86 7 9 15 1 7 85 19 3 11 2 + 5 46 2 37 13 3 3 3 12 1 6 13 4 1 3 15 5 1 5 37 13 2 5 2 19 12 35 37 + 16 1 1 4 19 10 37 36 6 7 1 9 12 2 4 11 37 37 3 19 11 3 4 11 37 36 4 4 + 1 4 4 6 11 3 5 10 37 37 3 2 13 4 7 1 3 4 3 11 36 38 18 4 11 4 1 13 36 + 38 40 11 37 38 40 10 36 39 19 1 20 10 37 39 18 2 19 10 37 38 40 10 37 + 38 40 10 37 38 41 9 37 38 18 2 21 8 38 38 41 8 38 38 41 8 38 39 39 9 + 38 39 39 10 37 38 40 10 37 38 16 2 1 1 20 10 37 38 9 1 2 9 19 8 1 1 + 37 38 19 2 19 9 39 36 20 1 20 10 38 36 14 1 4 2 20 10 38 36 13 4 2 2 + 19 11 38 39 1 11 4 3 6 3 4 16 38 44 11 3 7 1 6 15 37 38 3 5 10 3 6 3 + 1 20 36 38 4 3 11 3 13 4 1 11 37 39 2 2 14 1 17 1 1 11 18 1 18 43 13 + 2 20 10 18 1 18 44 11 4 18 14 34 37 2 4 11 5 18 13 35 36 17 6 15 2 1 + 12 2 2 33 37 18 1 17 19 34 4 23 2 4 3 6 12 18 15 72 2 5 24 4 18 72 2 + 5 46 72 3 3 51 68 4 2 47 72 4 2 47 16 1 9 1 45 4 2 48 1 6 13 13 38 4 + 2 81 38 87 38 87 38 87 38 87 38 87 38 87 38 87 38 87 38 87 38 87 38 + 87 38 87 37 88 30 95 36 89 37 88 37 88 38 87 38 87 38 87 38 87 38 87 + 38 87 38 87 37 88 37 88 37 87 38 88 37 88 37 88 37 88 37 88 37 88 37 + 88 37 88 2 7 1 25 3 87 2 34 2 87 2 34 1 89 1 123 3 123 2 282 3 123 2 + 123 2 + + + + 13375.0 + + + 1.16822429907 + + + 4604.0 + + + 0.189834926151 + + + 1.56917267422 + + + 0.545393556795 0.476363867351 0.277280541614 0.108308288577 + 0.117846577525 -0.0385172141324 0.0161192044616 0.00758103477878 + 0.0123612993264 + + + 125.0 + + + 1.112 1.20560747664 + + + 2.464 1.344 0.256 0.288 1.57009345794 2.16822429907 0.822429906542 + 0.14953271028 + + + 107.0 + + + 19.0 75.0 0.192 11.0 1.0 5.0 + + + 0.0 0.990654205607 + + + 0.344224299065 + + + 0.279156327543 0.812425328554 0.108721624851 0.0 0.255583126551 + 0.642771804062 0.10752688172 0.0 0.248138957816 0.873357228196 + 0.438470728793 0.137395459976 0.0 0.0 0.94212962963 0.633101851852 + + + 0.0 0.579487179487 0.857142857143 0.641025641026 0.282051282051 0.0 + 0.0 0.0 0.0 0.538461538462 0.964285714286 0.764423076923 + 0.173076923077 0.0 0.0 0.0 0.194871794872 0.482051282051 + 0.747619047619 0.569230769231 0.133333333333 0.0 0.0 0.0 0.0 + 0.355769230769 0.642857142857 0.605769230769 0.307692307692 0.0 0.0 + 0.0 0.0 0.543269230769 1.0 0.990384615385 0.668269230769 0.0 0.0 + 0.0 0.0 0.446153846154 0.728571428571 0.758974358974 0.738461538462 + 0.4 0.405128205128 0.171428571429 0.0 0.0 0.0 0.0 0.913461538462 + 1.0 1.0 0.290178571429 0.0 0.0 0.0 0.0 0.908653846154 + 0.941964285714 0.966346153846 0.325892857143 + + + 0.423869606215 0.199707622786 0.0701498411546 0.068219719721 + 0.105148546375 0.353372923479 0.0992552928377 0.177567446873 + 0.136138986044 0.0598155296548 0.105898217257 0.132240848846 + 0.220926584739 0.0357991174752 + + + + + + + + + 34 3 64 10 58 22 46 32 35 33 36 32 36 32 36 32 36 17 1 14 36 17 3 12 + 36 19 1 12 36 32 36 32 36 32 36 32 36 32 36 33 35 33 35 33 35 33 35 + 33 35 33 35 33 35 33 35 33 35 33 34 35 34 34 35 33 34 34 33 36 34 33 + 35 32 36 32 36 17 3 12 36 17 1 15 34 34 1 13 20 34 1 21 12 34 1 26 7 + 34 2 31 1 34 2 66 2 66 2 36 2 28 2 36 5 25 2 36 13 17 2 35 24 7 2 35 + 29 2 2 35 30 1 2 35 30 2 1 35 33 35 33 35 33 35 33 35 33 35 33 35 33 + 35 33 35 39 29 34 1 4 29 34 34 34 3 4 27 34 4 4 26 34 6 1 27 34 35 33 + 35 33 35 33 35 33 35 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 + 34 34 34 34 35 33 46 22 53 15 56 12 61 7 66 2 67 1 67 1 31 0 + + + + 5984.0 + + + 0.772727272727 + + + 2939.0 + + + 0.128955427016 + + + 0.685223367698 + + + 0.500992824242 0.485519744381 0.111912360389 0.169035374755 + -0.0873738527295 2.31724831818e-05 0.00246207588968 + -0.00164506619104 -0.00069603968776 + + + 68.0 + + + 0.352941176471 0.227272727273 + + + 0.588235294118 0.294117647059 0.117647058824 0.411764705882 + 0.136363636364 0.318181818182 0.454545454545 0.0 + + + 88.0 + + + 2.0 19.0 0.230452674897 0.0 4.0 9.0 + + + 0.0 0.988636363636 + + + 0.491143048128 + + + 0.0 0.29679144385 0.874331550802 0.57486631016 0.0588235294118 + 0.251336898396 1.0 0.794117647059 0.935828877005 0.994652406417 + 0.152406417112 0.163101604278 0.729946524064 0.914438502674 + 0.117647058824 0.0 + + + 0.0 0.0 0.0 0.590909090909 0.875 0.636363636364 0.670454545455 + 0.215909090909 0.0 0.0 0.0 0.59595959596 1.0 0.959595959596 1.0 + 0.383838383838 0.0 0.0 0.0 0.5 1.0 1.0 1.0 0.488636363636 + 0.111111111111 0.111111111111 0.10101010101 0.40404040404 1.0 1.0 + 1.0 0.676767676768 0.943181818182 1.0 1.0 0.977272727273 + 0.272727272727 0.261363636364 0.375 0.318181818182 0.808080808081 + 1.0 1.0 1.0 0.10101010101 0.0 0.0 0.0 0.738636363636 1.0 1.0 + 0.954545454545 0.181818181818 0.0 0.0 0.0 0.484848484848 + 0.727272727273 0.848484848485 0.868686868687 0.282828282828 0.0 0.0 + 0.0 + + + 0.32803843975 0.205113250173 0.0164693736144 0.0136609738103 + 0.0684929678787 0.320983386083 0.0839806322399 0.0141332913791 + 0.0180709297147 0.0126486452311 0.0462089571874 0.195080129987 + 0.105535830085 0.0423511502127 + + + + + + + + + 28 3 35 2 29 2 36 2 29 2 35 3 29 3 34 3 29 2 35 4 27 4 33 5 29 1 33 6 + 66 1 275 1 68 1 32 18 2 4 4 1 7 1 31 26 2 6 1 3 31 38 31 38 31 38 31 + 38 31 38 31 38 31 38 30 39 30 39 31 38 31 38 31 38 31 38 31 38 31 38 + 31 38 31 38 31 38 31 38 31 38 31 33 36 35 34 38 32 37 32 37 31 38 32 + 37 32 37 32 37 32 37 32 37 32 37 32 37 32 37 32 37 33 36 33 36 3 1 27 + 38 3 9 18 39 3 66 3 66 3 66 3 37 20 9 3 35 28 3 3 17 1 16 30 2 3 17 1 + 16 30 2 3 34 30 2 3 35 30 1 3 35 30 1 3 36 28 3 1 37 27 4 1 37 28 3 1 + 36 29 41 29 2 1 37 33 34 36 33 36 33 36 34 35 34 35 6 2 26 35 34 35 + 34 35 34 35 4 1 29 35 34 35 34 35 33 36 33 36 33 36 33 36 33 36 6 3 + 25 35 7 1 26 35 7 2 25 35 7 2 25 35 34 36 33 36 33 36 33 36 33 36 33 + 51 1 4 13 65 4 66 4 66 2 67 2 68 1 68 1 33 0 + + + + 7176.0 + + + 0.663461538462 + + + 3195.0 + + + 0.147730829421 + + + 0.725161290323 + + + 0.503111479334 0.517386085662 0.104342512045 0.18546103459 + -0.0902594339622 0.000677905364288 -0.00227661969071 + 0.00138121916791 0.001229748651 + + + 69.0 + + + 0.536231884058 0.336538461538 + + + 0.405797101449 0.63768115942 0.347826086957 0.695652173913 + 0.461538461538 0.0 0.653846153846 0.230769230769 + + + 104.0 + + + 4.0 25.0 0.182186234818 3.0 2.0 4.0 + + + 0.0 0.990384615385 + + + 0.445234113712 + + + 0.0 0.0 0.882352941176 0.613122171946 0.18778280543 0.260180995475 + 0.943438914027 0.764705882353 0.495475113122 1.0 0.289592760181 + 0.10407239819 0.474358974359 0.871794871795 0.247863247863 0.0 + + + 0.0 0.0 0.0 0.0 0.817307692308 0.855769230769 0.740384615385 + 0.298076923077 0.0 0.0 0.0 0.0 0.863247863248 0.982905982906 + 0.931623931624 0.461538461538 0.0 0.0 0.0 0.0 0.826923076923 1.0 + 1.0 0.490384615385 0.145299145299 0.564102564103 0.547008547009 + 0.435897435897 0.940170940171 1.0 1.0 0.564102564103 0.0 1.0 1.0 + 1.0 0.521367521368 0.230769230769 0.179487179487 0.213675213675 0.0 + 0.980769230769 1.0 1.0 0.384615384615 0.0 0.0 0.0 0.0 + 0.940170940171 1.0 1.0 0.401709401709 0.0 0.0 0.0 0.239316239316 + 0.717948717949 0.709401709402 0.777777777778 0.478632478632 + 0.111111111111 0.0 0.0 + + + 0.512134417374 0.151192740571 0.00836793745456 0.0073373065558 + 0.151025296426 0.366932616241 0.0510612341219 0.0600659419457 + 0.0420260952476 0.00811219122763 0.127575891596 0.35590775445 + 0.120693008897 0.0269822789486 + + + + + + + + + 10 1 45 9 9 3 25 31 1 2 12 34 11 35 11 35 11 34 12 34 13 33 13 33 12 + 35 11 35 11 35 11 35 11 35 11 35 11 35 9 38 8 39 8 37 9 37 10 35 11 4 + 2 29 11 18 1 16 11 18 2 15 11 35 11 35 11 35 11 35 12 34 12 34 12 34 + 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 13 33 13 + 33 13 33 13 3 10 21 12 3 18 4 4 5 12 3 19 2 6 4 12 2 20 2 6 3 14 1 20 + 2 6 3 14 1 20 2 6 3 35 2 6 2 37 1 7 1 36 3 6 2 35 3 6 2 36 2 6 2 36 2 + 44 2 44 2 44 2 44 2 12 1 31 2 12 1 31 2 12 2 30 2 11 4 29 2 12 8 24 3 + 11 13 19 3 11 17 14 4 11 35 11 35 11 35 11 35 11 18 1 16 11 17 2 16 + 11 17 2 17 10 17 2 16 11 17 1 17 11 36 9 39 7 39 7 38 8 38 7 40 7 37 + 10 36 11 35 11 35 11 36 10 35 11 4 2 1 1 27 11 4 2 1 1 28 10 4 6 26 + 10 4 3 29 10 3 5 28 10 4 5 27 10 6 4 26 10 36 11 35 11 35 11 2 1 32 + 11 2 1 32 11 2 1 1 1 2 2 26 11 7 2 26 11 35 12 34 12 6 2 26 12 5 4 25 + 12 2 1 2 4 26 11 2 1 2 3 27 12 1 2 1 2 28 20 4 1 20 26 21 37 9 41 5 + 42 4 43 2 7 0 + + + + 5336.0 + + + 0.396551724138 + + + 3153.0 + + + 0.168093878846 + + + 0.89545225709 + + + 0.526884448673 0.485963678484 0.0367569091237 0.37998888249 + -0.0219418064312 -0.00069385797935 0.00301712758056 + 0.000390387429901 0.00172504027281 + + + 46.0 + + + 1.4347826087 0.491379310345 + + + 1.21739130435 2.0 1.21739130435 1.21739130435 0.172413793103 + 0.551724137931 0.413793103448 0.827586206897 + + + 116.0 + + + 12.0 47.0 0.172506738544 6.0 7.0 1.0 + + + 0.0 0.991379310345 + + + 0.590892053973 + + + 0.181818181818 0.0407523510972 0.658307210031 0.401253918495 + 0.948275862069 0.58908045977 0.666666666667 0.770114942529 + 0.931034482759 0.611285266458 0.658307210031 0.871473354232 + 0.775862068966 0.620689655172 0.284482758621 0.413793103448 + + + 0.0 0.0 0.0 0.0 0.414285714286 0.666666666667 0.342857142857 0.04 + 0.261904761905 0.4 0.154761904762 0.0 0.488095238095 1.0 + 0.690476190476 0.477777777778 0.928571428571 0.977777777778 1.0 + 0.277777777778 0.404761904762 1.0 0.940476190476 0.466666666667 + 0.880952380952 1.0 1.0 0.133333333333 0.309523809524 0.911111111111 + 1.0 0.7 0.857142857143 0.973333333333 1.0 0.186666666667 + 0.285714285714 1.0 1.0 0.733333333333 0.892857142857 0.988888888889 + 1.0 0.3 0.297619047619 1.0 1.0 0.766666666667 0.857142857143 1.0 + 1.0 0.4 0.416666666667 0.711111111111 0.809523809524 0.844444444444 + 0.511904761905 0.722222222222 0.666666666667 0.444444444444 0.0 0.0 + 0.0 0.0 + + + 0.289801678316 0.276129413629 0.00916846057842 0.00949405922003 + 0.0777400497084 0.413893758884 0.162892104483 0.00923919286846 + 0.0202746027923 0.0212058975172 0.0700696435704 0.174231713471 + 0.269559945626 0.0732426324727 + + + + + + + + + 894 4 12 2 201 2 16 4 4 2 6 2 201 2 17 3 3 4 5 2 201 2 16 3 4 3 209 3 + 9 2 4 2 15 1 201 3 5 1 4 1 4 4 13 1 201 3 4 3 2 2 4 5 12 1 201 4 1 1 + 1 8 3 6 2 1 7 2 202 1 3 22 6 3 202 1 3 17 2 3 6 4 200 4 1 17 217 1 2 + 20 1 2 210 28 210 16 2 9 208 18 3 8 209 17 2 10 208 18 1 11 3 2 201 + 36 202 35 202 35 202 35 202 35 72 4 126 36 70 6 125 36 70 8 123 36 70 + 9 122 36 70 10 121 36 70 14 117 8 1 27 70 16 115 36 70 16 84 1 31 35 + 70 16 83 3 30 35 70 11 1 4 5 1 77 4 1 4 2 6 1 2 12 36 70 10 2 5 5 2 + 75 10 1 18 2 37 70 18 81 68 70 18 81 68 70 20 79 69 1 13 1 4 50 17 1 + 6 75 99 39 17 1 7 74 100 38 17 1 8 73 39 18 43 38 28 71 18 1 18 27 36 + 38 20 1 8 71 36 27 36 38 25 75 4 2 30 27 36 38 25 75 4 2 30 27 36 38 + 26 6 2 11 2 53 5 2 29 28 35 38 28 2 9 5 4 52 36 28 35 38 19 4 19 2 7 + 49 36 28 35 37 20 7 26 48 37 27 35 37 20 9 26 45 42 21 37 36 21 12 8 + 4 20 36 40 24 37 36 22 11 30 38 38 25 38 35 22 13 25 41 38 25 38 35 + 22 1 2 11 3 21 5 35 39 25 37 36 22 1 1 2 6 30 2 36 39 25 38 35 5 6 22 + 15 5 5 12 31 38 25 38 35 5 7 14 2 4 15 27 27 38 24 40 35 8 2 15 1 3 1 + 1 4 2 11 2 2 25 24 37 24 38 37 38 18 22 23 37 24 1 1 36 37 32 1 6 18 + 24 20 37 26 36 37 43 13 27 18 37 26 36 37 44 14 27 16 38 25 36 37 20 + 2 16 3 6 11 29 14 37 26 36 37 4 1 15 4 14 21 30 12 37 26 36 37 4 1 15 + 5 14 22 25 2 2 10 39 25 36 38 19 8 15 8 1 1 38 1 1 7 39 25 37 37 19 9 + 17 3 47 6 37 25 37 37 3 2 14 12 1 2 56 2 4 4 38 25 37 38 1 5 5 1 3 18 + 1 3 53 1 4 3 39 25 37 38 1 6 2 1 1 2 1 24 27 3 70 24 37 38 1 41 1 4 2 + 5 12 1 71 25 36 86 4 3 83 25 36 66 3 26 81 25 37 66 1 25 17 4 5 3 55 + 24 37 93 25 4 19 2 32 25 37 74 1 18 26 2 19 4 31 25 37 72 7 15 21 1 3 + 3 17 7 1 2 26 25 37 74 5 15 23 5 13 28 13 24 37 77 4 16 23 1 14 30 1 + 4 5 25 37 81 2 17 26 3 8 1 2 30 5 25 3 26 7 104 13 1 10 2 10 32 4 25 + 3 30 3 86 4 15 12 4 19 33 1 28 2 119 10 12 11 2 20 187 6 12 33 189 4 + 13 4 2 25 191 4 11 3 5 2 1 21 193 3 1 1 18 21 195 4 17 20 217 8 4 8 + 218 6 7 6 217 8 2 10 215 23 215 22 215 22 96 2 119 20 96 2 119 21 95 + 3 117 22 95 3 103 13 1 22 96 2 104 35 96 4 103 12 1 21 96 6 1 9 2 1 + 93 7 3 19 96 20 1 13 79 29 95 34 3 2 76 26 96 20 1 19 77 24 96 40 82 + 19 96 19 3 18 84 18 95 18 3 19 86 16 95 20 1 19 86 16 95 40 88 14 95 + 40 90 12 95 40 93 9 95 42 93 8 93 43 94 7 93 43 93 8 93 43 97 4 93 43 + 96 5 93 43 97 4 93 42 194 43 196 42 196 40 197 40 197 40 197 5 5 30 + 197 5 2 34 196 41 197 40 197 40 197 40 197 40 197 40 197 40 197 40 + 197 41 196 41 197 19 1 20 197 40 197 40 196 41 197 40 197 40 197 40 + 197 40 198 3 17 3 9 7 198 3 30 7 196 4 30 7 196 4 31 6 196 4 31 6 198 + 2 32 3 199 3 32 3 199 3 33 2 200 2 33 3 199 2 33 4 234 4 233 4 234 3 + 234 3 234 3 235 2 236 2 235 2 235 2 189 0 + + + + 38631.0 + + + 1.45398773006 + + + 9014.0 + + + 0.206456623031 + + + 0.579404761905 + + + 0.510490743213 0.436695866786 0.547685729353 0.123485814767 + -0.158317409031 -0.0567556966624 -0.0468467844595 0.0543829759123 + 0.0235079678426 + + + 237.0 + + + 1.27004219409 1.9263803681 + + + 0.928270042194 2.36286919831 1.3164556962 0.455696202532 + 1.69325153374 4.1226993865 1.39877300613 0.343558282209 + + + 163.0 + + + 39.0 147.0 0.256846081209 29.0 2.0 18.0 + + + 0.0184049079755 0.993865030675 + + + 0.233335921928 + + + 0.089406779661 0.267052501033 0.346010748243 0.406366267053 0.0 + 0.447292269533 0.0537412153783 0.0 0.217796610169 0.700289375775 + 0.272426622571 0.0 0.310833333333 0.611382113821 0.00325203252033 + 0.0 + + + 0.0 0.0 0.0 0.0 0.0275862068966 0.909688013136 0.848275862069 + 0.133004926108 0.0 0.351666666667 0.742857142857 0.296666666667 0.0 + 0.42380952381 0.508333333333 0.166666666667 0.0 0.0 0.399014778325 + 0.344827586207 0.0103448275862 0.0 0.0 0.0 0.0 0.0 0.214285714286 + 0.84 0.193333333333 0.0126984126984 0.0 0.0 0.0 0.14 0.430158730159 + 0.725 0.695 0.37619047619 0.0 0.0 0.205172413793 0.536206896552 + 0.848932676519 0.812068965517 0.00862068965517 0.0 0.0 0.0 + 0.336666666667 0.84 0.34126984127 0.243333333333 0.00833333333333 + 0.0 0.0 0.0 0.0 0.0666666666667 0.925396825397 0.933333333333 0.005 + 0.0 0.0 0.0 + + + 0.378284360355 0.227395439621 0.149383590626 0.0625609410173 + 0.133225229865 0.337992621835 0.130062768572 0.157184823482 + 0.10623578619 0.116825658832 0.280295964745 0.111113746129 + 0.194825450315 0.0795110122881 + + + + + + + + + 14 1 28 2 25 4 25 4 25 4 12 1 11 6 10 2 11 6 10 2 10 8 8 2 11 8 8 2 + 11 8 8 2 10 10 6 3 10 10 6 3 10 10 6 2 10 11 5 2 11 12 4 2 11 12 3 2 + 12 12 3 2 11 14 1 3 11 18 10 19 10 18 11 18 10 18 11 18 11 11 3 3 11 + 12 2 4 10 21 7 22 7 21 8 9 1 11 7 21 8 9 2 10 8 9 3 10 6 10 2 9 9 19 + 11 17 11 18 11 18 11 15 1 1 11 18 11 6 7 1 2 2 11 7 5 6 11 9 1 1 1 5 + 12 17 12 16 13 16 13 16 13 9 2 5 13 9 2 4 15 3 1 3 6 1 16 1 4 1 3 1 2 + 1 16 1 4 1 1 3 55 1 27 2 26 5 22 8 22 7 23 6 23 5 24 5 26 3 17 0 + + + + 1798.0 + + + 0.467741935484 + + + 766.0 + + + 0.375979112272 + + + 0.898503605519 + + + 0.417474822827 0.478834053846 0.0488006125533 0.25025833504 + -0.0515568434004 0.00258168494005 0.000451067223498 + -0.00264232095662 0.0171551157711 + + + 29.0 + + + 1.13793103448 0.564516129032 + + + 0.689655172414 2.62068965517 0.827586206897 0.413793103448 + 0.709677419355 0.387096774194 0.58064516129 0.58064516129 + + + 62.0 + + + 11.0 34.0 0.276073619632 6.0 4.0 2.0 + + + 0.0 0.983870967742 + + + 0.426028921023 + + + 0.0 0.330357142857 0.914285714286 0.276785714286 0.485714285714 + 0.973214285714 0.809523809524 0.5625 0.504761904762 0.9375 + 0.619047619048 0.0625 0.191666666667 0.296875 0.025 0.0 + + + 0.0 0.0 0.0 0.208333333333 0.666666666667 0.958333333333 + 0.541666666667 0.0 0.0 0.0 0.15625 0.84375 1.0 0.96875 0.46875 + 0.09375 0.0 0.291666666667 0.916666666667 1.0 1.0 0.708333333333 + 0.5 0.875 0.428571428571 1.0 1.0 0.96875 0.75 0.8125 0.40625 + 0.53125 0.535714285714 1.0 1.0 0.875 1.0 0.71875 0.21875 0.0 0.0 + 0.25 0.916666666667 0.958333333333 0.666666666667 0.0 0.0 0.0 0.0 + 0.0625 0.71875 0.46875 0.107142857143 0.0 0.0 0.0 0.178571428571 + 0.5 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.533586679211 0.159425862082 0.0358822910026 0.0202586410217 + 0.390751508841 0.275034438829 0.0923397780993 0.0169678348656 + 0.0451065971967 0.0400217588471 0.200207322609 0.238776645849 + 0.135991213576 0.0660521535732 + + + + + + + + + 1 3 1 14 2 3 3 1 2 0 + + + + 30.0 + + + 0.833333333333 + + + 21.0 + + + 1.19047619048 + + + 1.0 + + + 0.47619047619 0.419047619048 0.0675952920851 0.0948061764388 + -0.00410322859302 0.000264804387553 0.00116020227428 + -0.00356363870707 0.00694550491082 + + + 5.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 6.0 + + + 2.0 0.0 0.153846153846 0.0 2.0 3.0 + + + 0.0 0.833333333333 + + + 0.7 + + + 0.0 1.0 1.0 0.0 1.0 1.0 1.0 0.5 1.0 1.0 1.0 1.0 0.5 1.0 0.5 0.25 + + + 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 + + + 0.199002081265 0.0661464128051 0.0533348137773 0.0868472414709 + 0.147563113762 0.0534279393287 0.0790502898701 0.126245344067 + 0.0414897270195 0.0678585383307 0.0417373779579 0.0666340469468 + 0.0748528327122 0.0801758212597 + + + + + + + + + 148 7 228 10 225 17 218 26 1 1 8 2 197 39 196 39 197 17 3 18 197 16 4 + 18 197 16 2 21 196 39 196 39 196 39 196 39 196 39 196 39 196 39 196 + 39 196 39 196 39 196 39 196 39 196 39 196 40 195 40 195 41 193 42 194 + 41 194 40 195 40 196 4 3 33 194 5 5 32 194 5 2 19 1 8 1 5 194 26 1 13 + 195 39 196 26 1 12 196 7 2 16 3 3 5 1 1 1 196 7 1 9 1 13 5 1 1 1 196 + 7 1 10 2 12 3 4 196 40 196 39 196 39 196 39 196 39 196 39 197 2 1 35 + 205 6 2 1 1 20 216 19 224 5 2 4 233 2 234 1 754 2 233 3 232 3 230 6 + 229 8 227 8 227 9 226 10 225 10 225 2 1 9 137 1 85 12 137 2 84 13 136 + 2 84 15 133 3 84 16 132 4 83 16 132 4 83 15 133 4 83 14 133 5 83 14 + 100 2 31 5 37 1 45 15 94 2 1 17 3 1 14 5 37 2 44 17 1 1 3 2 85 20 3 + 12 2 6 37 2 44 20 2 3 84 20 3 20 35 1 1 2 44 26 83 21 2 20 34 5 44 27 + 82 20 3 20 34 4 45 27 82 19 4 20 83 20 1 6 82 20 3 20 83 31 78 21 2 + 20 83 20 1 11 77 6 1 14 2 20 83 20 2 3 1 6 1 1 76 3 3 14 1 21 82 21 4 + 12 74 5 1 36 82 22 3 13 73 42 37 2 43 38 9 1 63 42 36 3 43 40 7 3 61 + 42 34 5 43 28 1 15 3 6 58 42 35 4 42 31 1 12 4 8 56 42 35 4 43 30 5 9 + 3 11 53 42 36 3 43 32 5 24 48 44 36 4 42 22 1 5 1 6 3 22 50 44 34 5 + 42 27 4 5 3 5 1 11 54 45 34 3 43 37 11 9 53 44 36 3 43 38 10 11 50 43 + 36 5 42 40 6 22 42 42 37 5 41 42 3 25 41 41 37 6 31 3 6 43 3 26 39 41 + 37 4 34 2 6 27 3 13 6 26 36 41 37 4 42 29 2 14 6 28 32 41 37 4 42 34 + 1 12 4 2 1 28 29 40 38 4 42 21 2 26 2 33 27 40 38 4 42 18 7 16 1 10 1 + 34 24 40 38 4 43 16 9 12 1 1 1 6 2 2 4 35 21 40 38 5 32 2 8 16 11 20 + 4 40 19 40 39 18 1 14 3 3 7 15 14 19 2 43 17 20 1 19 39 39 7 5 5 5 15 + 66 14 19 2 19 39 39 7 4 7 3 18 65 13 20 1 19 40 38 7 4 29 36 2 22 3 5 + 9 20 1 19 40 38 7 4 31 69 5 41 40 38 7 4 33 29 5 36 1 43 39 38 7 4 35 + 28 5 79 39 38 7 4 23 2 12 26 7 2 3 72 39 39 6 5 24 1 12 37 3 11 2 26 + 1 7 2 20 39 39 6 5 38 33 5 12 2 20 3 11 1 21 39 39 6 5 39 29 2 3 11 + 25 4 2 2 29 39 39 6 5 40 29 2 4 12 21 18 20 39 39 6 5 42 36 11 20 24 + 13 39 39 7 4 33 5 6 4 1 31 9 20 32 5 39 39 8 3 36 5 11 2 3 26 5 21 34 + 3 39 39 9 2 37 7 14 26 6 19 35 2 39 39 10 1 38 7 14 27 4 19 36 1 38 + 40 50 8 17 24 2 19 36 1 38 40 52 11 14 43 76 39 53 15 10 19 3 21 75 + 39 55 14 11 41 76 2 3 32 58 9 3 1 15 36 84 23 65 11 2 1 15 34 83 30 + 62 11 19 30 76 4 1 34 68 3 22 27 76 1 1 1 4 32 8 1 87 24 78 2 3 31 7 + 6 84 24 76 38 8 5 84 24 76 39 6 6 85 18 1 4 76 39 6 6 88 21 75 39 6 6 + 69 1 18 21 75 39 6 6 70 6 5 4 2 23 74 39 6 6 61 49 74 39 6 6 58 52 74 + 39 6 6 61 49 75 39 5 7 63 1 1 44 75 39 5 7 65 44 75 39 5 7 68 41 75 + 39 5 7 71 38 75 39 5 7 73 36 76 38 5 7 76 10 3 4 3 13 76 38 5 5 81 8 + 2 3 2 15 76 38 6 5 82 6 2 20 76 38 6 6 83 26 76 4 1 3 1 2 18 9 6 6 85 + 23 77 2 32 4 7 5 91 18 76 2 33 3 8 4 92 19 74 2 34 2 8 4 93 18 73 3 + 34 3 7 4 95 15 74 4 32 4 7 4 95 16 74 2 34 2 6 7 94 15 75 2 34 3 6 6 + 100 10 74 2 34 3 6 6 101 8 74 4 33 2 7 5 103 6 112 3 6 5 103 6 122 4 + 104 5 122 4 104 5 121 5 105 4 121 5 105 4 121 5 106 3 120 7 105 3 120 + 7 106 2 120 7 229 6 229 6 229 5 231 4 231 4 231 4 232 3 233 2 233 2 + 233 1 225 0 + + + + 41360.0 + + + 1.33522727273 + + + 9591.0 + + + 0.201855906579 + + + 1.0369045185 + + + 0.517585485681 0.537288827323 0.468639986771 0.15680633871 + -0.0314654389654 -0.064484883593 0.0449757414533 0.0329172119667 + -0.0461810678319 + + + 235.0 + + + 1.29787234043 2.09090909091 + + + 1.63404255319 1.83829787234 0.697872340426 0.936170212766 + 0.522727272727 1.79545454545 4.25 1.79545454545 + + + 176.0 + + + 44.0 184.0 0.258010118044 21.0 4.0 7.0 + + + 0.0 0.994318181818 + + + 0.231890715667 + + + 0.0 0.289968652038 0.436128526646 0.0905172413793 0.0 + 0.0358243451464 0.603620955316 0.234591679507 0.422958397535 + 0.252696456086 0.38251155624 0.0408320493066 0.190292758089 + 0.0354391371341 0.457241910632 0.235747303544 + + + 0.0 0.0 0.172413793103 0.793103448276 0.666144200627 0.08934169279 + 0.200626959248 0.16144200627 0.0 0.0 0.0 0.194357366771 + 0.772727272727 0.216300940439 0.0 0.0 0.0 0.0 0.0 0.00151515151515 + 0.660606060606 0.533333333333 0.160606060606 0.0 0.0 0.0 0.0 + 0.144200626959 0.351097178683 0.869905956113 0.755485893417 + 0.0329153605016 0.0 0.0 0.0 0.711598746082 0.992163009404 + 0.203761755486 0.111285266458 0.0548589341693 0.818181818182 + 0.845454545455 0.0742424242424 0.231818181818 0.257575757576 + 0.0909090909091 0.0 0.0 0.335423197492 0.438871473354 + 0.0846394984326 0.0595611285266 0.24921630094 0.35736677116 + 0.258620689655 0.00940438871473 0.0 0.0 0.0 0.0 0.319696969697 + 0.892424242424 0.656060606061 0.0121212121212 + + + 0.367745995897 0.149329390824 0.0310564642501 0.108176012349 + 0.0891503188932 0.207843747396 0.099683770678 0.159929563632 + 0.192673562659 0.0829368152965 0.226966357788 0.236291320197 + 0.273398324354 0.0629606745419 + + + + + + + + + 30 5 95 13 87 30 3 1 66 35 65 35 65 35 65 35 65 35 65 35 65 35 65 35 + 65 35 65 35 65 35 65 35 66 34 66 34 66 34 66 34 66 34 66 34 66 34 66 + 34 66 34 66 35 66 33 67 33 67 33 67 33 67 33 67 34 66 33 67 33 67 33 + 36 2 29 33 36 2 29 34 35 2 29 34 36 2 28 36 34 2 28 52 11 1 6 4 2 6 + 17 61 2 2 5 26 3 66 6 94 6 21 1 72 6 34 4 3 2 51 6 33 18 1 6 36 6 34 + 26 34 6 17 1 16 26 34 6 17 2 15 26 34 6 17 1 16 27 33 6 34 27 33 6 34 + 27 33 6 34 27 33 4 37 25 77 22 77 22 38 2 37 23 38 2 38 23 37 4 36 23 + 35 6 36 24 33 6 37 24 34 6 35 26 34 5 35 26 33 7 34 26 34 6 34 25 35 + 6 34 26 34 6 34 26 34 7 33 26 34 7 33 25 35 7 34 25 34 7 34 25 34 7 + 34 25 34 7 34 25 34 7 34 25 34 8 33 25 34 7 34 25 34 7 34 25 34 8 33 + 25 34 8 34 24 34 9 33 24 34 8 34 24 3 4 27 8 10 1 23 24 2 18 14 8 3 + 14 1 3 13 24 2 26 6 8 3 26 5 25 1 29 3 8 3 27 4 24 1 31 2 8 3 28 3 56 + 2 8 3 28 3 56 2 8 3 28 4 56 1 8 3 28 4 56 1 8 3 29 2 57 1 8 4 28 3 66 + 3 29 2 66 3 29 2 66 3 29 2 66 3 29 2 67 2 29 2 67 2 99 1 91 0 + + + + 9700.0 + + + 1.03092783505 + + + 4398.0 + + + 0.138699408822 + + + 1.00051988563 + + + 0.48818563075 0.498972070638 0.161674058797 0.110364418629 + 0.000764144095575 0.00410363212577 -0.0029162777278 0.0255455400173 + -0.0130020452834 + + + 100.0 + + + 0.31 0.865979381443 + + + 0.36 0.44 0.32 0.12 0.0412371134021 0.824742268041 1.03092783505 + 1.56701030928 + + + 97.0 + + + 7.0 28.0 0.227848101266 5.0 2.0 15.0 + + + 0.0 0.989690721649 + + + 0.453402061856 + + + 0.0 0.335 0.91 0.3632 0.748333333333 0.706666666667 0.491666666667 + 0.2752 0.543333333333 0.703333333333 0.508333333333 0.1568 0.0 + 0.328333333333 0.88 0.3328 + + + 0.0 0.0 0.0277777777778 0.659722222222 0.909722222222 + 0.722222222222 0.513888888889 0.230769230769 0.0 0.0 0.0 + 0.653846153846 0.99358974359 1.0 0.75 0.0 0.569444444444 + 0.520833333333 0.423611111111 0.75 0.972222222222 1.0 + 0.861111111111 0.025641025641 0.871794871795 1.0 1.0 0.634615384615 + 0.0448717948718 0.025641025641 0.121794871795 0.147928994083 + 0.819444444444 1.0 1.0 0.6875 0.0486111111111 0.0 0.0 0.0 + 0.179487179487 0.230769230769 0.25 0.897435897436 0.974358974359 + 0.935897435897 0.628205128205 0.0 0.0 0.0 0.0 0.8125 1.0 1.0 + 0.694444444444 0.0 0.0 0.0 0.0 0.512820512821 0.775641025641 + 0.762820512821 0.647435897436 0.0414201183432 + + + 0.386409994245 0.053638508412 0.055088079955 0.131976019381 + 0.0901321926746 0.100545289736 0.0104135712215 0.101265820135 + 0.297542886889 0.0108218215981 0.246447331525 0.0539682758356 + 0.0788392027891 0.0295334377075 + + + + + + + + + 40 1 40 1 39 2 39 1 38 3 38 3 37 4 37 3 38 3 38 3 37 3 38 3 38 3 37 4 + 37 3 38 3 38 3 38 3 37 3 38 3 38 2 39 2 38 3 38 2 39 2 38 3 38 3 38 2 + 39 2 39 2 38 3 120 1 40 1 40 1 38 3 38 2 39 2 37 4 37 4 38 2 79 3 38 + 3 38 3 38 2 38 3 38 3 38 3 38 3 38 3 38 2 39 3 38 3 37 4 37 4 37 4 37 + 3 38 4 38 3 23 1 14 4 21 3 13 3 23 2 13 3 23 2 13 3 24 1 13 3 24 1 13 + 2 22 5 12 1 1 1 21 5 12 3 21 5 12 2 21 6 35 6 35 6 34 8 38 3 38 2 36 + 1 1 3 35 3 38 3 1 2 35 6 36 4 116 1 1 1 3 2 32 3 3 3 31 5 1 4 31 11 1 + 2 26 6 1 9 25 6 2 7 26 12 1 1 27 8 32 6 3 1 32 5 3 1 32 4 4 1 32 4 2 + 4 31 4 2 4 31 4 2 4 31 2 5 2 32 4 3 2 31 5 3 4 29 4 4 4 28 7 2 4 28 7 + 2 4 28 14 27 15 26 16 26 14 27 2 5 3 38 4 37 4 37 3 30 0 + + + + 4551.0 + + + 0.369369369369 + + + 507.0 + + + 0.834319526627 + + + 0.443965517241 + + + 0.396449704142 0.643661466738 0.262579411505 1.85689217283 + -0.64004995617 0.0757974706957 0.694344770601 -0.238068648385 + -1.86733680608 + + + 41.0 + + + 1.12195121951 0.297297297297 + + + 1.9512195122 1.65853658537 0.780487804878 0.0975609756098 0.0 0.0 + 0.432432432432 0.756756756757 + + + 111.0 + + + 1.0 24.0 0.287581699346 10.0 0.0 2.0 + + + 0.0 0.990990990991 + + + 0.111404087014 + + + 0.0 0.0 0.114285714286 0.585714285714 0.0 0.0 0.164285714286 + 0.296428571429 0.0 0.178571428571 0.167857142857 0.0 0.242424242424 + 0.0422077922078 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.514285714286 0.628571428571 0.0 0.0 0.0 + 0.0 0.0714285714286 0.385714285714 0.628571428571 0.571428571429 + 0.0 0.0 0.0 0.0 0.214285714286 0.442857142857 0.5 0.557142857143 + 0.0 0.0 0.0 0.0 0.0 0.0 0.114285714286 0.0142857142857 0.0 0.0 0.0 + 0.0 0.0714285714286 0.0 0.0 0.0 0.0 0.0 0.2 0.514285714286 + 0.571428571429 0.0285714285714 0.0 0.0 0.0 0.371428571429 + 0.185714285714 0.0 0.0 0.0 0.0 0.0 0.423076923077 0.154761904762 + 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.595406603199 0.17341341572 0.226664152713 0.0780165824157 + 0.567883785831 0.355323193669 0.125447177151 0.379877856537 + 0.0342934986644 0.099871552843 0.383838913203 0.513425947721 + 0.215311514246 0.109384907596 + + + + + + + + + 69 1 66 3 4 2 56 1 5 1 2 5 2 3 46 29 43 32 41 34 38 37 37 38 37 38 37 + 39 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 38 37 39 36 38 37 38 + 37 38 37 38 37 36 39 31 44 38 38 37 41 1 1 32 38 38 36 38 38 37 38 37 + 45 30 47 28 46 30 45 29 37 1 8 29 25 5 1 12 2 30 6 11 1 24 3 30 6 35 + 5 29 6 35 13 22 5 30 9 31 5 70 5 36 2 32 5 35 4 31 5 34 6 30 5 22 2 + 13 1 11 5 3 9 4 5 40 1 2 24 3 5 38 29 3 5 37 30 3 5 36 31 3 5 37 25 1 + 4 3 5 37 26 1 3 3 5 38 29 3 5 39 27 6 3 40 27 4 4 40 26 5 2 42 27 5 2 + 40 28 5 3 39 28 5 3 39 28 5 3 39 29 5 2 40 27 2 1 2 2 41 27 4 4 40 27 + 4 5 40 26 4 5 39 27 4 4 40 27 4 5 39 28 3 5 39 28 3 5 38 37 38 37 38 + 37 38 37 38 37 38 37 38 37 39 37 38 37 38 37 17 8 13 37 2 30 6 37 2 + 32 5 36 2 33 4 36 2 34 3 37 1 35 2 37 1 35 2 73 2 32 0 + + + + 6600.0 + + + 0.852272727273 + + + 3284.0 + + + 0.161693057247 + + + 0.741803278689 + + + 0.503201435296 0.490728296023 0.119732672694 0.146510395444 + -0.0764934398876 -0.000531337692691 0.00310077096893 + 0.00337644008117 -0.00431629259136 + + + 75.0 + + + 0.893333333333 0.613636363636 + + + 0.106666666667 0.693333333333 1.65333333333 0.906666666667 + 0.181818181818 0.454545454545 1.31818181818 0.5 + + + 88.0 + + + 5.0 32.0 0.217228464419 6.0 5.0 5.0 + + + 0.0 0.988636363636 + + + 0.497575757576 + + + 0.0 0.239898989899 0.896464646465 0.588383838384 0.162679425837 + 0.375598086124 0.992822966507 0.665071770335 0.854066985646 + 0.868421052632 0.282296650718 0.217703349282 0.705741626794 + 0.782296650718 0.282296650718 0.0334928229665 + + + 0.0 0.0 0.0 0.424242424242 0.777777777778 0.808080808081 + 0.676767676768 0.313131313131 0.0 0.0 0.0 0.535353535354 1.0 1.0 + 1.0 0.363636363636 0.0 0.0 0.0 0.6 0.981818181818 1.0 1.0 0.3 + 0.242424242424 0.444444444444 0.323232323232 0.59595959596 + 0.989898989899 1.0 1.0 0.363636363636 0.676767676768 1.0 + 0.949494949495 0.535353535354 0.414141414141 0.525252525253 + 0.484848484848 0.434343434343 0.736363636364 1.0 1.0 0.963636363636 + 0.227272727273 0.0 0.0 0.0 0.818181818182 1.0 0.989898989899 1.0 + 0.222222222222 0.0 0.0 0.0 0.436363636364 0.609090909091 + 0.536363636364 0.645454545455 0.418181818182 0.454545454545 + 0.127272727273 0.0 + + + 0.393301654847 0.163812633518 0.0121308120149 0.0258274461766 + 0.0351526807786 0.308118691563 0.0698739519468 0.0260701954253 + 0.0488053233734 0.017939420699 0.132994062093 0.199116061231 + 0.0907909356503 0.0454478307599 + + + + + + + + + 1 1 3 2 1 24 1 3 1 2 1 0 + + + + 40.0 + + + 0.4 + + + 32.0 + + + 1.0 + + + 0.9 + + + 0.510416666667 0.527777777778 0.0331726074219 0.185546875 + 0.007080078125 1.11267680069e-05 -0.000237371050813 + 8.09219491409e-06 -0.00155370142351 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 10.0 + + + 2.0 6.0 0.153846153846 0.0 3.0 1.0 + + + 0.0 0.9 + + + 0.8 + + + 0.0 1.0 1.0 0.333333333333 1.0 1.0 1.0 1.0 0.5 1.0 1.0 1.0 0.0 1.0 + 1.0 0.666666666667 + + + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 + + + 0.381328375941 0.200664946182 0.00960100252778 0.00355629772649 + 0.162379232547 0.191458840582 0.141454049914 0.0556173670654 + 0.0555702218613 0.0259492831992 0.0386805810409 0.0763809053043 + 0.0439248733709 0.121589004641 + + + + + + + + + 73 4 4 5 19 1 173 34 171 36 169 38 169 38 169 38 169 38 169 38 169 38 + 169 38 169 38 169 38 169 38 169 38 169 38 169 38 170 38 169 38 23 1 + 145 38 21 4 144 38 21 4 144 38 20 6 143 32 26 7 142 34 24 8 141 38 20 + 9 140 38 20 10 140 37 20 10 1 1 138 38 19 10 1 1 138 6 3 29 19 12 138 + 7 3 26 21 10 1 1 141 1 5 29 17 11 2 1 148 28 17 11 2 1 106 5 36 2 1 + 26 17 11 109 13 4 4 18 28 20 11 109 23 1 12 4 28 18 13 107 37 4 30 15 + 14 105 39 3 31 15 14 5 4 96 39 3 3 2 26 16 15 2 9 91 41 2 4 1 1 1 24 + 14 29 90 18 1 55 14 31 89 73 14 32 88 73 13 34 87 73 13 35 86 40 2 4 + 1 26 14 35 85 40 23 3 3 4 14 36 84 40 32 2 13 36 84 39 34 1 12 38 83 + 40 46 38 83 40 46 38 83 40 46 37 83 41 46 37 83 41 45 38 83 41 44 41 + 81 43 41 42 80 43 32 1 9 8 1 32 81 43 31 3 9 7 1 31 16 6 60 43 43 6 2 + 30 17 6 60 43 43 6 7 25 15 9 60 42 43 6 9 24 14 10 59 41 44 8 8 16 4 + 2 15 9 1 2 57 41 45 14 5 12 3 2 15 14 56 42 44 15 4 12 3 2 15 15 56 + 40 46 14 4 12 1 4 15 17 54 40 48 13 3 12 20 15 56 1 1 4 3 31 49 13 4 + 9 21 17 2 1 51 1 1 4 4 8 2 21 55 6 3 10 20 22 50 8 1 9 1 22 57 1 7 12 + 1 1 14 24 15 1 33 18 2 21 65 1 4 9 14 25 14 2 32 7 2 9 2 21 71 3 19 + 26 13 24 9 3 1 38 72 1 20 28 11 31 1 4 2 37 72 2 18 30 10 36 2 37 72 + 5 15 31 9 36 2 37 72 5 15 31 9 36 2 37 72 5 15 33 7 36 3 36 72 4 16 + 34 6 36 8 9 2 20 73 2 16 36 5 36 28 12 69 5 16 37 4 36 35 5 68 6 15 + 39 3 36 36 4 66 8 15 31 2 6 3 36 33 1 1 5 66 7 16 30 3 7 2 36 33 4 70 + 6 16 41 1 36 35 1 71 6 17 30 2 7 2 36 35 2 70 6 18 27 13 36 34 4 69 2 + 2 1 18 28 9 2 2 37 32 6 91 30 7 3 1 37 31 1 3 1 93 3 4 22 9 1 2 37 + 129 3 4 23 11 37 130 2 6 22 10 37 140 20 10 37 141 19 10 4 1 27 2 1 + 142 19 11 33 144 20 2 1 2 1 4 37 140 26 4 38 127 3 4 22 2 8 3 37 126 + 16 5 9 1 10 3 37 128 15 5 18 4 37 130 1 3 1 3 5 5 18 4 38 133 2 1 7 5 + 16 4 39 130 34 5 38 132 33 4 37 134 31 5 38 134 31 4 38 135 29 5 38 + 141 23 5 38 143 10 1 9 6 38 147 16 7 37 147 16 7 37 148 4 3 7 8 37 + 148 4 3 7 7 38 142 3 2 15 8 36 145 18 8 37 144 18 7 5 17 16 146 17 6 + 4 25 9 147 15 7 5 26 7 148 13 8 5 27 6 148 13 9 3 28 6 149 12 10 1 28 + 7 149 13 8 3 27 7 152 8 10 3 187 6 202 5 203 4 204 2 10 0 + + + + 25254.0 + + + 1.69672131148 + + + 7604.0 + + + 0.183850604945 + + + 0.982468138103 + + + 0.45236155728 0.500702109807 0.481247126817 0.11086872449 + 0.000544190407196 0.102470484303 -0.00358149503667 0.110087379419 + -0.00282902838221 + + + 207.0 + + + 0.874396135266 2.09016393443 + + + 0.521739130435 0.753623188406 0.869565217391 1.27536231884 + 0.72131147541 2.32786885246 3.5737704918 1.60655737705 + + + 122.0 + + + 18.0 117.0 0.232375979112 21.0 1.0 12.0 + + + 0.0 0.991803278689 + + + 0.301100815712 + + + 0.0 0.302972802024 0.652287581699 0.529411764706 0.630128205128 + 0.62841191067 0.246153846154 0.0 0.129487179487 0.589950372208 + 0.121794871795 0.0 0.0 0.0800248138958 0.541666666667 + 0.367866004963 + + + 0.0 0.0 0.0 0.0 0.52 0.957333333333 0.96 0.3675 0.0 0.0 + 0.530769230769 0.653846153846 0.676923076923 0.461538461538 + 0.525641025641 0.300480769231 0.317948717949 0.279487179487 + 0.753846153846 0.939903846154 0.897435897436 0.0871794871795 0.0 + 0.0 0.946153846154 0.976923076923 0.841025641026 0.0 0.0 0.0 0.0 + 0.0 0.110256410256 0.197435897436 0.405128205128 0.336538461538 + 0.0487179487179 0.0 0.0 0.0 0.0 0.210256410256 0.692307692308 + 0.920673076923 0.330769230769 0.107692307692 0.0 0.0 0.0 0.0 + 0.0230769230769 0.259615384615 0.469230769231 0.392307692308 + 0.274358974359 0.0 0.0 0.0 0.0 0.0288461538462 0.576923076923 + 0.728205128205 0.774358974359 0.442307692308 + + + 0.372772540762 0.182075309808 0.205825867517 0.165447950853 + 0.0890027007178 0.256488555634 0.0682970813253 0.328559505012 + 0.187450998772 0.146374134724 0.0169039973497 0.0608823315438 + 0.170532592044 0.0846547872039 + + + + + + + + + 15 2 22 2 21 3 19 5 19 9 15 10 14 10 13 13 10 14 10 14 11 8 1 4 9 9 + 15 9 14 6 2 2 14 6 2 2 14 6 1 4 13 8 15 9 15 7 8 2 6 8 2 1 2 5 6 18 5 + 16 8 14 2 1 7 9 1 4 2 1 6 8 6 1 8 10 4 3 6 14 1 2 6 19 5 19 5 16 1 1 + 6 9 3 4 8 10 2 3 8 10 14 14 11 12 12 11 14 5 1 4 20 3 21 5 19 6 18 6 + 18 6 18 6 20 3 19 7 17 7 14 9 17 7 16 7 17 7 18 4 20 3 14 0 + + + + 1248.0 + + + 0.461538461538 + + + 502.0 + + + 0.470119521912 + + + 0.814345991561 + + + 0.492724753161 0.47789235216 0.0513382494846 0.320151031878 + -0.063214112329 0.0015247043517 0.0121067497236 -0.00538429840632 + 0.0286405630577 + + + 24.0 + + + 1.625 0.326923076923 + + + 0.166666666667 1.66666666667 3.0 1.66666666667 0.0769230769231 + 0.846153846154 0.384615384615 0.0 + + + 52.0 + + + 1.0 26.0 0.236842105263 3.0 4.0 3.0 + + + 0.0 0.980769230769 + + + 0.402243589744 + + + 0.0 0.102564102564 0.705128205128 0.0128205128205 0.153846153846 + 0.871794871795 0.858974358974 0.717948717949 0.846153846154 + 0.653846153846 0.423076923077 0.269230769231 0.435897435897 + 0.307692307692 0.0769230769231 0.0 + + + 0.0 0.0 0.0 0.0 0.611111111111 0.52380952381 0.0 0.0 0.0 0.0 0.0 + 0.380952380952 1.0 0.714285714286 0.0 0.047619047619 0.0 0.0 + 0.444444444444 1.0 1.0 0.761904761905 0.277777777778 0.761904761905 + 0.0 0.571428571429 1.0 1.0 0.833333333333 0.857142857143 + 0.944444444444 0.857142857143 0.555555555556 1.0 0.777777777778 + 0.666666666667 0.888888888889 0.190476190476 0.666666666667 + 0.428571428571 0.777777777778 1.0 0.5 0.666666666667 0.722222222222 + 0.0 0.0 0.0 0.333333333333 0.666666666667 0.0555555555556 + 0.619047619048 0.333333333333 0.0 0.0 0.0 0.0555555555556 + 0.619047619048 0.111111111111 0.380952380952 0.0 0.0 0.0 0.0 + + + 0.475196852366 0.191808006704 0.0572502956714 0.0401537109129 + 0.321347198451 0.283913522923 0.138443397798 0.10098570782 + 0.0817142394118 0.0651588308553 0.262089228271 0.169481777279 + 0.204745497408 0.105403165717 + + + + + + + + + 3 1 1 1 4 3 4 3 4 3 4 3 4 3 4 3 3 5 2 5 2 4 3 4 3 4 3 4 2 5 3 4 3 5 2 + 4 3 4 3 4 2 5 2 5 2 5 3 4 2 5 3 3 5 2 46 3 4 4 2 5 2 5 3 3 3 4 3 4 3 + 4 3 4 3 4 2 5 2 5 4 2 5 2 5 2 4 3 41 1 5 2 5 2 5 2 5 2 6 1 6 1 27 1 5 + 2 5 2 6 1 4 3 4 3 4 3 4 3 4 3 4 3 3 4 4 3 4 3 4 3 4 3 4 3 4 3 3 5 2 4 + 4 4 3 4 3 4 3 4 4 3 2 0 + + + + 609.0 + + + 0.0804597701149 + + + 245.0 + + + 0.869387755102 + + + 0.815697876784 + + + 0.474829931973 0.468296155672 0.00688733435898 3.00802461559 + -0.0668035257418 6.50796473814e-05 0.000910732996424 + -0.00172609131341 1.42148286684 + + + 7.0 + + + 2.85714285714 0.0114942528736 + + + 1.14285714286 3.42857142857 1.71428571429 0.571428571429 + 0.0459770114943 0.0 0.0 0.0 + + + 87.0 + + + 4.0 16.0 0.153846153846 6.0 14.0 2.0 + + + 0.0 0.988505747126 + + + 0.402298850575 + + + 0.0 0.0454545454545 0.0454545454545 0.136363636364 0.404761904762 + 0.568181818182 0.272727272727 0.909090909091 0.97619047619 + 0.727272727273 0.340909090909 0.636363636364 0.571428571429 + 0.136363636364 0.0 0.0 + + + 0.0 0.0 0.0 0.0909090909091 0.0909090909091 0.0 0.0909090909091 + 0.181818181818 0.0 0.0 0.0 0.0909090909091 0.0909090909091 0.0 + 0.0909090909091 0.181818181818 0.0 0.272727272727 0.181818181818 + 0.727272727273 0.181818181818 0.0 0.818181818182 0.909090909091 0.3 + 1.0 0.363636363636 1.0 0.454545454545 0.454545454545 0.909090909091 + 1.0 1.0 1.0 0.454545454545 1.0 0.545454545455 0.727272727273 1.0 + 1.0 0.9 1.0 0.454545454545 1.0 0.0909090909091 0.0 0.0 + 0.545454545455 1.0 1.0 0.272727272727 0.272727272727 0.0 0.0 0.0 + 0.0 0.2 0.0909090909091 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.293950518883 0.329305458806 0.210917706318 0.0706479108375 + 0.189719139139 0.380517445606 0.314520564603 0.0833687522971 + 0.166987339577 0.117933689513 0.337092533713 0.208865148328 + 0.42738429414 0.293057034105 + + + + + + + + + 8 1 39 3 3 1 31 9 31 10 6 3 22 11 5 2 23 7 2 2 3 4 22 7 2 11 18 27 7 + 1 4 30 5 36 5 1 7 19 2 6 15 28 12 24 1 4 11 23 2 4 11 22 4 2 12 20 21 + 18 22 18 22 18 22 18 22 16 1 1 22 15 24 16 23 15 1 5 19 22 18 21 20 + 20 19 17 2 2 15 19 5 2 12 21 5 2 13 3 2 10 2 1 1 1 4 3 15 1 2 10 4 1 + 3 5 11 1 2 12 8 5 12 16 7 4 13 16 24 1 2 13 27 14 29 11 33 6 35 5 34 + 5 35 5 35 6 35 5 36 3 21 0 + + + + 1800.0 + + + 0.888888888889 + + + 747.0 + + + 0.372155287818 + + + 0.958748156342 + + + 0.477980297257 0.446665449677 0.077037915279 0.153368851514 + -0.0150641316133 0.00580774334494 -0.0120914435471 + -0.00669436205446 0.0153114300291 + + + 40.0 + + + 0.9 0.622222222222 + + + 1.3 0.8 1.1 0.4 0.8 0.355555555556 1.15555555556 0.177777777778 + + + 45.0 + + + 5.0 35.0 0.259493670886 5.0 3.0 1.0 + + + 0.0 0.977777777778 + + + 0.415 + + + 0.363636363636 0.0 0.163636363636 0.158333333333 0.690909090909 + 0.845454545455 0.972727272727 0.708333333333 0.5 0.963636363636 + 0.663636363636 0.0416666666667 0.181818181818 0.290909090909 + 0.154545454545 0.00833333333333 + + + 0.0 0.233333333333 0.0 0.0 0.0 0.08 0.1 0.0 0.56 0.633333333333 0.0 + 0.0 0.0 0.64 0.533333333333 0.0 0.68 1.0 0.8 0.6 0.933333333333 1.0 + 0.866666666667 0.1 0.16 0.833333333333 1.0 1.0 1.0 0.96 1.0 + 0.866666666667 0.2 0.933333333333 1.0 1.0 1.0 0.52 0.0666666666667 + 0.0 0.0 0.733333333333 1.0 0.866666666667 0.8 0.24 0.1 0.0 0.0 0.6 + 0.72 0.0 0.2 0.44 0.0333333333333 0.0 0.0 0.0666666666667 0.56 0.0 + 0.0 0.0 0.0 0.0 + + + 0.417635337317 0.0956814133749 0.0549615612645 0.0944606597687 + 0.105800880952 0.162011402182 0.0133466781538 0.0573516249968 + 0.122385109569 0.0564686353999 0.025925964745 0.114983887687 + 0.11721724912 0.0406252791908 + + + + + + + + + 5 1 9 3 9 4 7 5 7 5 7 5 7 5 7 5 7 5 7 4 8 4 7 5 7 6 6 6 6 6 6 6 6 6 6 + 6 6 6 6 5 6 6 7 5 7 5 7 5 7 5 7 5 7 5 7 6 6 5 6 6 6 6 7 6 6 6 6 5 8 4 + 8 4 8 4 8 4 7 6 6 6 6 7 5 6 6 6 6 6 6 6 6 6 6 5 7 5 7 5 6 6 6 6 7 6 7 + 6 5 7 5 5 7 5 8 4 8 5 8 4 8 4 7 5 7 5 7 5 7 4 8 4 8 1 11 3 10 4 7 5 7 + 6 6 6 7 5 7 5 7 5 7 5 6 6 7 5 7 5 8 4 8 4 7 5 8 4 8 4 8 4 8 4 8 4 8 4 + 8 4 8 4 8 5 7 4 8 4 8 4 8 4 8 5 7 5 7 5 7 4 8 3 9 3 9 3 9 3 9 3 9 3 9 + 3 10 2 10 2 10 2 10 2 10 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 + 3 9 3 9 3 9 4 8 3 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 + 8 4 8 5 7 5 7 4 8 4 8 4 8 4 8 4 8 4 8 5 7 4 8 6 6 5 8 4 8 5 6 7 7 1 1 + 2 8 5 7 4 7 6 6 6 6 6 7 2 10 2 10 1 10 4 8 6 6 6 6 6 6 6 8 1 1 2 11 1 + + + + + 2040.0 + + + 0.0705882352941 + + + 752.0 + + + 0.57579787234 + + + 1.03689453591 + + + 0.457446808511 0.470665995216 0.00660514168344 3.29084257282 + 0.106596909524 9.18483019175e-05 0.0770416120594 0.00284281888255 + 1.22878175525 + + + 12.0 + + + 3.08333333333 0.0117647058824 + + + 2.33333333333 1.66666666667 5.66666666667 2.66666666667 0.0 0.0 0.0 + 0.0470588235294 + + + 170.0 + + + 6.0 17.0 0.131578947368 0.0 7.0 1.0 + + + 0.0 0.994117647059 + + + 0.36862745098 + + + 0.547619047619 0.325581395349 0.0 0.0 0.984126984127 0.922480620155 + 0.492063492063 0.193798449612 0.174603174603 0.37984496124 + 0.634920634921 0.899224806202 0.0 0.0 0.0 0.341085271318 + + + 0.047619047619 0.0952380952381 0.0952380952381 0.0 0.0 0.0 0.0 0.0 + 0.666666666667 0.904761904762 0.761904761905 0.181818181818 0.0 0.0 + 0.0 0.0 0.952380952381 1.0 1.0 0.681818181818 0.0 0.0 0.0 0.0 + 0.97619047619 1.0 1.0 0.931818181818 0.97619047619 0.5 0.5 + 0.0909090909091 0.666666666667 0.333333333333 0.619047619048 + 0.818181818182 1.0 1.0 1.0 0.636363636364 0.0 0.0238095238095 + 0.047619047619 0.363636363636 0.404761904762 0.5 1.0 0.886363636364 + 0.0 0.0 0.0 0.0 0.0 0.0 0.142857142857 0.727272727273 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.568181818182 + + + 0.377375484885 0.288225542408 0.130912131147 0.0439165260436 + 0.248122917242 0.412848702384 0.256109719576 0.0655652452825 + 0.0973041278682 0.0724059126375 0.347358907242 0.287501429485 + 0.417411996215 0.227937408566 + + + + + + + + + 2 5 33 1 38 9 2 9 2 18 38 20 2 18 38 20 2 19 37 41 37 20 1 20 37 16 2 + 23 37 41 37 41 37 41 37 41 37 41 37 41 37 40 38 40 38 40 38 40 38 40 + 38 40 38 40 39 39 39 39 39 39 39 39 38 41 36 42 37 41 37 41 38 13 3 + 24 32 3 3 41 32 1 3 41 38 39 39 7 1 31 43 1 4 8 1 21 34 1 4 2 1 3 3 + 10 1 19 33 2 4 7 1 11 1 19 33 2 4 19 1 19 33 2 4 7 1 9 4 18 33 2 4 6 + 3 10 1 19 23 4 5 3 4 44 4 26 4 20 1 53 4 19 3 52 4 18 3 53 4 18 2 54 + 4 18 2 7 7 40 5 1 34 38 41 37 41 37 41 38 40 38 40 38 40 38 40 38 40 + 38 40 38 40 38 40 38 39 39 39 39 39 36 47 23 55 2 2 21 50 37 40 5 3 + 30 48 30 47 31 39 38 40 39 39 39 38 40 39 39 39 39 39 38 40 39 39 39 + 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 16 2 1 11 9 39 3 31 5 39 + 1 115 1 77 2 232 2 77 1 + + + + 7098.0 + + + 0.857142857143 + + + 3344.0 + + + 0.15221291866 + + + 1.52383134739 + + + 0.505184707637 0.454156698565 0.138545384254 0.160889102001 + 0.105037495982 -0.000852015988144 0.001478768019 -7.25279618663e-05 + 0.00361485459 + + + 78.0 + + + 0.833333333333 0.472527472527 + + + 0.923076923077 0.461538461538 0.871794871795 0.923076923077 + 0.307692307692 1.23076923077 0.131868131868 0.131868131868 + + + 91.0 + + + 7.0 50.0 0.119496855346 7.0 2.0 5.0 + + + 0.0 0.989010989011 + + + 0.471118624965 + + + 0.901913875598 0.860411899314 0.00228832951945 0.0 0.938636363636 + 0.941304347826 0.0130434782609 0.0391304347826 0.126794258373 + 0.347826086957 0.933638443936 0.649885583524 0.0 0.278260869565 + 0.891304347826 0.619565217391 + + + 0.858585858586 0.868686868687 0.777777777778 0.747474747475 + 0.010101010101 0.0 0.0 0.0 0.872727272727 1.0 0.95 0.945454545455 + 0.0 0.0 0.0 0.0 0.845454545455 1.0 0.991666666667 0.827272727273 + 0.0 0.0 0.0 0.0 0.909090909091 1.0 1.0 0.936363636364 + 0.00909090909091 0.0416666666667 0.109090909091 0.05 0.292929292929 + 0.242424242424 0.296296296296 0.626262626263 1.0 0.731481481481 1.0 + 0.351851851852 0.0 0.0 0.0 0.527272727273 1.0 1.0 1.0 + 0.308333333333 0.0 0.0 0.0 0.581818181818 1.0 0.983333333333 1.0 + 0.25 0.0 0.0 0.0416666666667 0.536363636364 0.872727272727 + 0.716666666667 0.890909090909 0.391666666667 + + + 0.469892923784 0.171103889509 0.0107329894585 0.0064952626302 + 0.0621724453159 0.391554471511 0.0617420257068 0.0195216070209 + 0.0108288666628 0.00687552470143 0.151695893842 0.319524509372 + 0.120636930559 0.0388915740348 + + + + + + + + + 3 2 30 3 30 3 30 3 30 3 30 3 29 5 2 1 25 9 24 11 21 14 19 14 20 11 22 + 12 21 16 17 3 1 12 17 17 16 19 14 17 1 2 13 17 1 1 1 1 12 22 11 22 11 + 24 9 25 8 26 7 27 6 28 5 29 4 30 3 30 3 30 2 31 3 30 3 30 3 29 4 29 4 + 29 4 30 3 30 4 29 4 28 5 28 5 28 5 1 2 25 5 1 4 2 1 1 2 17 5 4 1 1 6 + 13 1 1 6 7 5 13 8 7 1 1 2 7 2 4 9 18 2 5 8 18 2 5 8 18 1 6 8 28 5 5 2 + 21 5 4 4 20 5 4 5 6 1 1 1 10 5 4 6 18 6 3 6 18 6 3 8 16 6 3 10 14 6 3 + 11 13 6 3 11 13 6 3 12 12 6 3 13 10 7 3 14 9 7 3 18 5 8 2 21 2 8 3 20 + 2 7 4 17 6 5 7 15 6 4 12 10 7 5 11 13 3 7 6 2 2 23 7 1 2 24 6 2 1 24 + 9 2 1 20 15 19 16 17 3 1 5 2 5 16 4 1 6 1 7 14 21 12 23 11 23 10 24 9 + 25 8 26 7 27 5 28 6 27 6 27 6 27 6 27 6 27 6 27 6 18 2 3 10 25 8 27 5 + 28 5 28 6 28 6 27 8 15 2 8 10 13 1 9 14 2 10 7 26 7 26 4 29 4 29 4 18 + 2 9 4 11 1 3 9 3 9 5 3 2 12 3 8 6 4 2 11 1 9 7 15 1 10 7 10 8 7 8 13 + 1 12 8 2 2 21 8 2 3 1 1 19 7 2 8 16 7 2 9 15 7 2 9 15 7 2 10 14 7 2 + 11 13 8 1 12 12 8 1 14 10 8 1 15 9 8 1 32 2 30 4 28 5 29 3 30 3 30 4 + 29 4 30 3 31 1 23 0 + + + + 4389.0 + + + 0.248120300752 + + + 2383.0 + + + 0.26479227864 + + + 1.17014843321 + + + 0.486571548468 0.473235290378 0.0299960037432 0.472559276283 + 0.0347283092506 0.000306911259194 -0.00170072244653 + 0.000164211501087 0.0470514723187 + + + 33.0 + + + 3.54545454545 0.548872180451 + + + 2.78787878788 4.12121212121 4.24242424242 3.0303030303 + 0.15037593985 0.932330827068 0.390977443609 0.721804511278 + + + 133.0 + + + 17.0 67.0 0.244094488189 2.0 8.0 2.0 + + + 0.0 0.992481203008 + + + 0.54294827979 + + + 0.780303030303 0.587121212121 0.549242424242 0.102941176471 + 0.712121212121 0.587121212121 0.848484848485 0.375 0.477272727273 + 0.833333333333 0.693181818182 0.338235294118 0.212121212121 + 0.579124579125 0.478114478114 0.59477124183 + + + 0.671875 0.764705882353 0.546875 0.308823529412 0.205882352941 + 0.046875 0.0 0.0 0.671875 1.0 0.921875 0.588235294118 + 0.955882352941 0.984375 0.25 0.161764705882 0.546875 1.0 0.828125 + 0.205882352941 0.823529411765 1.0 0.426470588235 0.441176470588 + 0.265625 1.0 0.90625 0.441176470588 0.588235294118 1.0 + 0.632352941176 0.0 0.0625 0.970588235294 1.0 0.632352941176 0.5 1.0 + 0.558823529412 0.0735294117647 0.0 0.823529411765 0.90625 + 0.808823529412 0.338235294118 0.96875 0.426470588235 0.294117647059 + 0.0 0.617647058824 0.90625 0.897058823529 0.397058823529 0.984375 + 0.911764705882 0.411764705882 0.0 0.247058823529 0.325 + 0.317647058824 0.0941176470588 0.55 0.670588235294 0.411764705882 + + + 0.495282230863 0.204866075204 0.0597951870693 0.0197780259081 + 0.23135384199 0.439560600508 0.120785395509 0.0694951334472 + 0.016403663348 0.0236523792075 0.0772259233053 0.402022122133 + 0.293697313113 0.0691376734189 + + + + + + + + + 0 2 79 1 79 1 79 1 319 1 79 2 37 1 40 3 19 14 2 3 39 20 2 19 39 20 2 + 19 38 21 2 19 39 20 2 18 40 20 2 19 39 41 39 40 40 40 40 41 39 41 39 + 41 39 41 39 41 39 40 40 40 40 41 39 41 39 40 40 40 40 40 41 2 4 33 41 + 3 3 33 41 4 1 35 40 40 40 40 40 40 39 42 39 41 39 42 38 41 38 42 39 + 41 40 38 42 4 2 32 37 1 4 38 37 1 5 37 35 3 5 38 21 10 2 4 5 75 5 75 + 5 75 5 75 5 75 6 15 2 6 7 44 6 2 30 42 39 41 39 41 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 36 44 33 47 33 47 + 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 + 40 40 40 40 40 40 40 40 40 40 40 41 39 41 39 41 40 22 10 3 3 1 41 3 + 10 3 64 1 39 0 + + + + 7440.0 + + + 0.860215053763 + + + 3461.0 + + + 0.12453048252 + + + 1.52048280127 + + + 0.507536052725 0.53787859754 0.138384073886 0.150989963922 + 0.101959332523 -0.00111354519766 -0.00143554115044 + -0.00230716821121 0.00043045954265 + + + 80.0 + + + 0.3 0.247311827957 + + + 0.5 0.0 0.35 0.35 0.344086021505 0.301075268817 0.215053763441 + 0.129032258065 + + + 93.0 + + + 4.0 22.0 0.161572052402 4.0 2.0 4.0 + + + 0.0 0.989247311828 + + + 0.465188172043 + + + 0.563043478261 0.886956521739 0.245652173913 0.0 0.576086956522 1.0 + 0.328260869565 0.04375 0.0565217391304 0.0913043478261 + 0.960869565217 0.93125 0.0 0.0108695652174 0.915217391304 + 0.835416666667 + + + 0.181818181818 0.908333333333 0.790909090909 0.758333333333 + 0.358333333333 0.0 0.0 0.0 0.0909090909091 1.0 1.0 1.0 + 0.583333333333 0.0 0.0 0.0 0.136363636364 0.933333333333 1.0 1.0 + 0.55 0.0 0.0 0.0 0.163636363636 1.0 1.0 1.0 0.616666666667 0.1 0.1 + 0.075 0.0454545454545 0.175 0.136363636364 0.225 0.933333333333 1.0 + 1.0 0.866666666667 0.0 0.0 0.0 0.0 0.916666666667 1.0 1.0 + 0.858333333333 0.0 0.0 0.0 0.0 0.975 1.0 1.0 0.766666666667 0.0 0.0 + 0.0 0.0416666666667 0.883333333333 0.8 0.841666666667 + 0.733333333333 + + + 0.49267576444 0.163183499691 0.00924894113325 0.0078066808614 + 0.0985299579275 0.391560121169 0.0547352373484 0.00815158776157 + 0.0126847166165 0.00700389600329 0.149850333172 0.343290901758 + 0.114008207603 0.0328148722488 + + + + + + + + + 2 2 6 1 5 1 3 3 1 5 1 5 2 4 2 4 2 4 2 4 1 18 1 4 2 4 1 5 2 4 3 3 3 3 + 3 3 3 3 3 3 4 2 4 2 5 1 5 1 1 0 + + + + 156.0 + + + 0.230769230769 + + + 89.0 + + + 0.85393258427 + + + 1.02631578947 + + + 0.525842696629 0.470112359551 0.0190334610458 0.42097737631 + 0.0151297432937 -0.000866616148652 0.0143145218506 + -0.00145645332047 0.0432532313342 + + + 6.0 + + + 0.666666666667 0.0 + + + 1.33333333333 0.0 0.666666666667 0.0 0.0 0.0 0.0 0.0 + + + 26.0 + + + 5.0 3.0 0.25 1.0 6.0 3.0 + + + 0.0 0.961538461538 + + + 0.570512820513 + + + 0.333333333333 0.428571428571 0.166666666667 0.0 0.5 1.0 + 0.833333333333 0.214285714286 0.666666666667 1.0 1.0 0.714285714286 + 0.416666666667 0.714285714286 0.5 0.5 + + + 0.0 0.666666666667 0.0 0.75 0.333333333333 0.0 0.0 0.0 0.0 + 0.666666666667 0.0 0.75 0.333333333333 0.0 0.0 0.0 0.0 + 0.666666666667 1.0 1.0 1.0 0.333333333333 0.0 0.0 0.333333333333 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 + 0.5 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.666666666667 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.75 0.0 0.0 0.0 0.0 + + + 0.54155972733 0.18933817289 0.0578596035434 0.028424014129 + 0.454528548036 0.34618265624 0.138079081387 0.0454533485915 + 0.0238718532432 0.046981904957 0.369168535148 0.343969404899 + 0.250651294856 0.108804751932 + + + + + + + + + 2 3 67 2 68 3 66 5 66 4 65 6 65 3 68 2 29 1 37 3 28 2 37 4 26 3 37 33 + 36 34 36 34 37 33 37 33 37 33 37 33 37 33 37 33 37 33 36 34 36 35 35 + 35 36 33 37 33 37 33 36 34 36 34 36 34 36 34 37 34 40 1 1 24 41 2 1 + 29 36 1 1 1 2 2 1 26 36 4 1 29 36 34 36 35 35 35 35 35 34 36 34 35 35 + 35 35 6 2 27 35 35 35 35 35 35 35 35 35 35 36 34 36 34 36 34 36 5 2 + 27 36 4 12 4 6 9 35 4 27 3 36 4 27 3 36 4 28 2 36 4 28 2 36 4 28 2 36 + 4 28 2 36 4 28 3 34 5 27 5 33 6 26 4 34 6 26 4 35 4 27 6 32 6 26 6 32 + 5 27 6 32 5 26 7 32 7 26 3 34 6 27 2 35 6 27 2 27 1 7 5 28 2 27 2 7 4 + 28 2 27 2 7 4 28 2 26 3 7 4 28 15 1 4 8 3 7 4 28 25 2 4 7 4 28 31 7 4 + 28 31 7 4 27 32 8 3 27 32 8 3 27 32 8 3 27 32 8 4 26 32 8 4 26 33 7 4 + 27 32 7 4 26 33 6 5 26 33 6 5 26 33 6 5 26 33 6 5 26 33 6 5 26 33 6 5 + 27 32 6 5 27 32 7 4 27 32 7 4 26 33 7 4 28 1 2 27 8 4 26 8 1 23 9 3 + 26 7 3 3 2 19 7 3 27 6 3 2 4 18 7 3 27 7 1 4 1 20 7 3 27 33 7 3 27 33 + 7 4 26 33 7 4 26 33 7 3 27 33 7 4 26 33 7 5 25 33 7 3 27 33 7 3 27 33 + 7 3 27 33 7 4 26 34 5 6 25 34 5 5 1 1 23 35 5 5 1 1 24 34 5 5 26 34 5 + 5 1 1 23 35 6 4 1 1 23 35 6 6 23 5 13 5 1 11 7 5 23 4 26 5 7 3 26 2 + 30 2 7 3 26 3 29 2 7 3 26 3 29 2 6 5 25 4 28 3 6 5 23 5 27 5 5 4 25 3 + 28 4 6 4 25 3 28 5 5 4 25 3 28 6 4 5 25 2 28 5 6 3 26 2 28 5 5 6 25 2 + 28 4 5 6 23 5 28 2 6 5 25 2 31 1 6 5 25 2 38 5 1 1 23 2 38 6 24 2 38 + 6 24 2 38 6 24 1 40 5 65 5 65 4 1 1 64 4 1 1 64 5 66 4 66 4 66 4 66 3 + 67 4 67 3 67 2 68 2 69 1 61 0 + + + + 10500.0 + + + 0.466666666667 + + + 3473.0 + + + 0.235531241002 + + + 1.34738617201 + + + 0.432383146175 0.45843390141 0.111441220519 0.387445482845 + 0.0992757609214 0.00533404308523 -0.0262510871652 0.0200389880724 + -0.00375107486352 + + + 70.0 + + + 1.22857142857 0.893333333333 + + + 2.68571428571 0.742857142857 1.2 0.171428571429 0.24 0.826666666667 + 1.22666666667 1.22666666667 + + + 150.0 + + + 8.0 63.0 0.197849462366 9.0 3.0 3.0 + + + 0.0 0.993333333333 + + + 0.330761904762 + + + 0.701112877583 0.547987616099 0.235294117647 0.263157894737 + 0.734234234234 0.491228070175 0.133633633634 0.062865497076 + 0.00635930047695 0.0851393188854 0.972972972973 0.145510835913 0.0 + 0.0321637426901 0.737237237237 0.182748538012 + + + 0.590277777778 0.75 0.828947368421 0.611842105263 0.527777777778 + 0.467105263158 0.506578947368 0.315789473684 0.444444444444 + 0.994152046784 0.789473684211 0.0 0.0 0.00584795321637 + 0.0701754385965 0.19298245614 0.444444444444 1.0 0.812865497076 0.0 + 0.0 0.0 0.0 0.0 0.481481481481 0.982456140351 0.883040935673 + 0.269005847953 0.296296296296 0.239766081871 0.222222222222 + 0.0292397660819 0.0 0.0263157894737 0.0263157894737 0.223684210526 + 1.0 0.934210526316 0.342105263158 0.0263157894737 0.0 0.0 0.0 + 0.0994152046784 1.0 0.959064327485 0.222222222222 0.0 0.0 0.0 0.0 + 0.046783625731 1.0 1.0 0.25730994152 0.0 0.0 0.0 0.0 + 0.0818713450292 0.401234567901 0.543859649123 0.473684210526 0.0 + + + 0.490732418124 0.158179987602 0.0344351473114 0.0457185609775 + 0.110377607893 0.40906504167 0.0318943822397 0.0618752354134 + 0.138755343138 0.0546958880635 0.211246600886 0.440954373033 + 0.164342891966 0.0305423719895 + + + + + + + + + 66 1 71 1 71 1 71 1 71 1 71 1 70 3 69 3 69 3 69 3 69 3 68 4 64 8 37 1 + 4 30 36 36 36 36 35 37 35 37 34 38 34 38 34 38 34 38 35 37 35 37 35 + 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 37 35 38 34 38 35 38 + 31 41 32 40 33 39 33 38 34 38 35 37 35 35 1 1 36 36 36 30 5 1 36 29 + 43 33 2 1 36 36 36 36 36 7 2 28 35 8 1 28 36 35 36 37 3 1 30 35 1 2 3 + 2 11 3 3 46 2 2 3 64 3 2 3 37 1 5 4 1 4 12 4 1 3 36 32 1 2 36 33 1 3 + 35 33 1 3 35 37 34 38 33 39 34 38 35 37 35 37 35 34 1 2 36 33 1 2 35 + 34 1 2 35 33 2 1 37 33 2 1 36 33 2 1 36 34 1 1 36 36 36 36 31 42 3 1 + 25 42 36 36 37 35 37 35 17 2 18 35 18 1 18 35 4 5 28 35 37 35 38 34 + 38 34 38 34 38 34 38 34 38 34 36 1 1 34 38 34 38 34 39 33 39 33 39 33 + 16 2 22 31 8 2 5 5 21 32 6 19 14 33 6 21 12 33 7 20 13 32 5 22 7 2 4 + 32 5 32 2 33 2 69 0 + + + + 7488.0 + + + 0.692307692308 + + + 3280.0 + + + 0.151829268293 + + + 0.691743119266 + + + 0.485121092408 0.540128463178 0.109985831123 0.197494030501 + -0.100587015926 4.80916518498e-05 0.00229813881789 + -0.000342260372968 0.000850173798416 + + + 72.0 + + + 0.666666666667 0.384615384615 + + + 0.555555555556 0.888888888889 0.611111111111 0.611111111111 + 0.0384615384615 0.192307692308 0.807692307692 0.5 + + + 104.0 + + + 5.0 40.0 0.199335548173 4.0 3.0 2.0 + + + 0.0 0.990384615385 + + + 0.438034188034 + + + 0.0 0.0 0.848290598291 0.771367521368 0.134615384615 0.237179487179 + 0.905982905983 0.826923076923 0.495726495726 0.99358974359 + 0.190170940171 0.168803418803 0.459401709402 0.799145299145 + 0.17735042735 0.0 + + + 0.0 0.0 0.0 0.0 0.717948717949 0.880341880342 0.854700854701 + 0.74358974359 0.0 0.0 0.0 0.0 0.794871794872 1.0 0.991452991453 + 0.495726495726 0.0 0.0 0.0 0.0 0.82905982906 1.0 0.974358974359 + 0.521367521368 0.0 0.538461538462 0.57264957265 0.376068376068 + 0.871794871795 0.923076923077 1.0 0.811965811966 0.0 0.982905982906 + 1.0 0.974358974359 0.376068376068 0.0598290598291 0.273504273504 + 0.401709401709 0.0 1.0 1.0 1.0 0.324786324786 0.0 0.0 0.0 + 0.025641025641 1.0 1.0 0.991452991453 0.384615384615 0.0 0.0 0.0 + 0.25641025641 0.555555555556 0.641025641026 0.564102564103 + 0.239316239316 0.0854700854701 0.0 0.0 + + + 0.493363228652 0.164660526454 0.00638956639522 0.0062983764376 + 0.106555218915 0.392391544772 0.0599839858215 0.0232268823237 + 0.00742910370772 0.00990202012713 0.154895914789 0.3602862654 + 0.131856188979 0.0351346840463 + + + + + + + + + 4 1 5 2 4 2 4 2 4 2 4 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 4 2 4 2 4 + 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 3 3 4 2 4 1 11 1 5 2 3 + 3 4 1 5 1 46 2 5 1 5 1 5 1 5 1 10 2 4 2 4 2 4 2 3 3 4 3 3 2 5 1 5 1 5 + 1 3 5 2 3 3 2 4 2 4 2 4 2 4 2 3 3 3 3 3 3 3 3 3 3 4 2 4 2 4 2 3 3 3 2 + 4 3 3 3 4 2 4 2 3 2 4 2 4 2 4 3 3 3 3 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 + 2 4 3 3 3 3 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 + 4 2 4 2 4 2 4 2 3 3 3 4 3 2 4 2 4 2 3 3 3 5 1 3 3 3 3 3 4 2 3 3 3 3 3 + 3 3 3 3 3 4 2 4 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 + 5 1 5 2 4 1 5 1 5 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 + 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 4 2 3 3 3 4 2 3 4 2 3 + 3 3 3 2 4 3 3 3 3 3 4 2 4 2 4 2 4 2 4 2 4 2 4 1 5 1 5 1 5 1 3 0 + + + + 1188.0 + + + 0.030303030303 + + + 399.0 + + + 1.14035087719 + + + 1.09211252068 + + + 0.434085213033 0.507283437019 0.00328145569167 8.13334279159 + -0.0966612579212 9.33723489141e-05 0.234319667777 -0.00461534701393 + -1.45457656332 + + + 6.0 + + + 5.0 0.0 + + + 1.33333333333 3.33333333333 6.66666666667 4.0 0.0 0.0 0.0 0.0 + + + 198.0 + + + 0.0 15.0 0.0625 7.0 46.0 1.0 + + + 0.0 0.994949494949 + + + 0.335858585859 + + + 0.0 0.0 0.244897959184 0.0 0.030612244898 0.73 0.857142857143 0.86 + 0.714285714286 0.7 0.0408163265306 0.32 0.469387755102 0.04 + 0.0102040816327 0.02 + + + 0.0 0.0 0.0 0.0 0.125 0.36 0.0 0.0 0.0 0.0 0.0 0.0 0.125 0.36 0.0 + 0.0 0.0 0.0 0.28 0.84 1.0 1.0 1.0 0.56 0.0 0.12 0.8 1.0 1.0 0.44 + 0.88 1.0 0.75 0.68 0.96 0.44 0.0416666666667 0.04 0.0 0.64 0.75 + 0.68 0.96 0.44 0.0416666666667 0.04 0.0 0.64 1.0 0.36 0.12 0.0 0.0 + 0.04 0.0 0.08 0.541666666667 0.0 0.04 0.0 0.0 0.0 0.0 0.0 + + + 0.346519537184 0.304045613738 0.0437323503567 0.0158117373641 + 0.369107572244 0.307556435978 0.302868219236 0.0660933829901 + 0.0756231323693 0.0349927217405 0.528833486362 0.205700666888 + 0.346715947321 0.295085976303 + + + + + + + + + 28 5 5 3 19 3 3 18 12 10 2 19 5 16 3 19 2 20 2 19 2 18 1 1 2 19 2 17 + 2 1 2 19 2 20 2 19 2 20 1 20 2 41 2 41 3 40 3 5 1 34 3 40 3 40 3 40 2 + 40 4 40 3 40 3 40 3 41 1 41 2 41 3 40 3 40 3 41 1 43 2 39 4 40 2 41 3 + 40 3 40 3 40 3 40 3 40 3 40 3 39 4 39 4 40 3 40 3 39 4 39 4 39 4 18 2 + 20 3 17 3 19 4 17 2 7 8 5 4 17 18 4 4 11 25 4 4 5 3 3 24 4 4 4 32 3 4 + 4 32 3 4 4 32 3 4 4 31 3 5 4 31 3 5 4 31 3 6 2 32 3 6 1 33 3 40 3 41 + 2 41 3 40 2 41 2 40 3 40 3 40 3 40 3 40 3 41 2 41 2 41 2 41 1 42 1 42 + 1 175 0 + + + + 3311.0 + + + 0.558441558442 + + + 1887.0 + + + 0.167461579226 + + + 1.01964636542 + + + 0.5046937694 0.332768527041 0.077385717677 0.112768577907 + 0.00496015557412 -0.000179342532179 0.00595069913337 + 0.00341069077335 0.0111104693966 + + + 43.0 + + + 0.441860465116 0.363636363636 + + + 0.46511627907 0.372093023256 0.093023255814 0.837209302326 + 0.623376623377 0.0 0.831168831169 0.0 + + + 77.0 + + + 1.0 22.0 0.175438596491 3.0 1.0 18.0 + + + 0.0 0.935064935065 + + + 0.569918453639 + + + 0.784210526316 0.863157894737 0.589473684211 0.0 0.856459330144 1.0 + 0.468899521531 0.0 0.928229665072 1.0 0.392344497608 0.0 + 0.789473684211 0.875598086124 0.511961722488 0.163636363636 + + + 0.6 0.86 0.844444444444 0.62 0.6 0.355555555556 0.0 0.0 + 0.666666666667 0.98 1.0 1.0 1.0 0.355555555556 0.0 0.0 + 0.777777777778 1.0 1.0 1.0 0.95 0.0555555555556 0.0 0.0 0.6 1.0 1.0 + 1.0 0.76 0.0 0.0 0.0 0.711111111111 1.0 1.0 1.0 0.76 0.0 0.0 0.0 + 0.962962962963 1.0 1.0 1.0 0.733333333333 0.0 0.0 0.0 + 0.911111111111 1.0 1.0 1.0 0.72 0.0 0.0 0.0 0.648148148148 0.65 + 0.740740740741 0.8 0.716666666667 0.518518518519 0.45 0.15 + + + 0.686074910208 0.0259780325275 0.038018516867 0.0146409927246 + 0.57909897051 0.0522211968145 0.0231572063413 0.0550014902017 + 0.0147743574686 0.0188179296159 0.181716318861 0.0579013302256 + 0.0851022557771 0.0211387225358 + + + + + + + + + 33 2 20 5 19 2 19 5 16 6 18 5 16 6 18 5 16 6 19 4 16 6 19 4 16 6 18 5 + 16 6 18 5 16 6 18 7 1 2 11 6 18 11 9 8 17 11 9 8 17 11 10 7 17 11 10 + 7 17 11 10 7 17 11 10 7 17 11 10 7 17 10 11 7 17 10 11 7 18 4 3 3 10 + 6 19 4 5 1 10 6 19 4 16 6 19 4 16 6 19 4 16 6 19 5 15 6 19 5 15 6 19 + 4 16 6 20 3 16 6 20 2 17 5 21 2 17 5 21 2 4 1 12 5 20 3 2 3 12 5 20 3 + 2 3 12 5 21 8 11 5 20 9 12 4 19 12 9 5 19 12 9 6 18 12 9 6 18 12 9 6 + 18 12 9 6 19 11 9 6 18 11 10 6 18 12 9 5 19 12 9 5 18 13 9 6 18 12 9 + 6 18 12 9 6 18 11 10 6 18 6 1 4 10 5 19 6 1 4 10 5 20 5 2 2 11 6 19 5 + 1 4 11 5 19 10 10 6 19 7 1 2 10 6 20 6 12 6 21 7 11 6 22 6 12 5 22 3 + 1 1 15 2 23 5 16 1 23 6 38 7 14 2 22 8 14 1 22 7 13 4 20 8 13 5 19 8 + 13 5 19 8 13 5 20 7 12 6 20 7 12 6 20 7 12 6 20 8 11 6 20 8 11 7 7 3 + 8 9 8 9 9 2 8 10 8 9 19 8 9 9 19 8 11 6 20 8 11 6 21 7 12 6 20 7 12 6 + 20 7 12 6 20 7 12 6 20 6 13 5 21 5 14 5 21 1 19 4 21 1 19 4 21 1 19 4 + 21 1 19 4 41 4 41 4 23 1 16 5 23 1 16 5 22 2 16 5 22 2 16 5 22 2 17 4 + 22 2 17 5 21 2 17 4 22 3 1 1 15 3 22 5 15 3 22 6 14 3 22 6 13 5 21 6 + 12 6 21 7 11 6 21 7 11 6 21 6 12 6 21 7 11 6 21 6 12 6 21 7 11 7 20 7 + 11 7 20 8 11 6 20 7 12 6 20 7 12 5 21 6 1 1 10 7 20 8 11 6 20 6 13 5 + 21 7 12 5 22 6 12 5 22 6 12 5 22 6 12 5 23 5 12 5 23 4 14 3 24 4 15 2 + 24 5 15 1 24 5 15 1 23 7 12 4 22 7 12 4 22 7 12 5 21 7 12 6 20 7 11 7 + 20 6 12 7 21 5 13 5 22 5 13 5 22 7 11 5 21 9 10 6 20 8 10 7 20 10 8 7 + 21 9 7 9 20 8 9 6 22 8 10 6 21 9 9 7 20 9 9 8 19 1 2 6 9 8 19 1 2 5 + 10 6 25 1 2 1 10 6 39 5 41 4 41 4 41 3 42 4 41 4 41 1 44 1 44 1 44 1 + 44 1 44 1 45 1 1 1 42 3 42 3 24 1 17 1 1 1 24 1 3 1 13 3 24 2 1 2 1 2 + 10 4 23 2 1 5 10 4 24 1 1 5 10 4 24 7 10 5 22 9 9 5 22 9 9 6 22 8 9 6 + 22 7 10 7 21 8 9 7 21 8 9 8 21 7 9 8 20 1 2 4 10 6 25 4 10 6 25 2 1 1 + 11 5 25 2 13 5 26 1 13 5 40 5 25 1 14 5 25 2 13 6 24 3 12 7 25 1 13 5 + 26 1 14 4 24 3 14 4 26 1 13 5 24 4 12 5 23 1 1 3 12 3 1 3 21 5 13 2 1 + 2 22 5 12 6 22 5 12 7 22 4 12 7 22 2 14 7 38 7 23 1 15 6 23 2 14 5 24 + 2 1 1 12 6 23 4 12 6 23 3 13 6 39 6 40 5 40 5 40 5 41 4 41 4 42 3 43 + 1 1 0 + + + + 9180.0 + + + 0.220588235294 + + + 2169.0 + + + 0.511756569848 + + + 1.12203454725 + + + 0.590207049751 0.443227111992 0.0473465920375 1.48927150814 + 0.102076544857 -0.000195000684556 0.0827223583251 0.0033584194004 + 0.453515579734 + + + 45.0 + + + 2.71111111111 1.01470588235 + + + 0.266666666667 4.35555555556 2.57777777778 3.46666666667 + 1.1568627451 1.05882352941 0.862745098039 0.980392156863 + + + 204.0 + + + 10.0 43.0 0.254672897196 17.0 1.0 2.0 + + + 0.0 0.995098039216 + + + 0.236274509804 + + + 0.0552584670232 0.00891265597148 0.0 0.0 0.661319073084 + 0.50623885918 0.429590017825 0.0713012477718 0.176470588235 + 0.101604278075 0.0588235294118 0.20320855615 0.321895424837 + 0.31862745098 0.400326797386 0.419934640523 + + + 0.0 0.0 0.04 0.0 0.0 0.0 0.0 0.0 0.106666666667 0.0961538461538 0.0 + 0.0 0.0 0.0 0.0 0.0 0.856 0.869230769231 0.832 0.369230769231 0.256 + 0.0307692307692 0.0 0.0 0.333333333333 0.647435897436 0.56 + 0.307692307692 0.846666666667 0.5 0.24 0.025641025641 0.0 0.0 0.0 + 0.0 0.0 0.166666666667 0.446666666667 0.301282051282 0.384 + 0.392307692308 0.352 0.1 0.048 0.00769230769231 0.0 0.0 0.7 + 0.589743589744 0.566666666667 0.705128205128 0.78 0.698717948718 + 0.433333333333 0.0705128205128 0.0 0.0 0.0 0.0 0.0133333333333 + 0.108974358974 0.373333333333 0.801282051282 + + + 0.477306469963 0.226329923967 0.116433267379 0.0424882468553 + 0.29988429727 0.421491212744 0.162977411985 0.0751184319209 + 0.0685105371526 0.0660025111752 0.264909111961 0.361231537447 + 0.331632277492 0.120922276541 + + + + + + + + + 1 1 2 1 1 2 1 2 1 2 1 2 1 2 1 2 1 6 1 1 2 1 2 1 2 2 1 2 + + + + 45.0 + + + 0.2 + + + 27.0 + + + 1.55555555556 + + + 1.04347826087 + + + 0.425925925926 0.510582010582 0.015648021135 0.589036224153 + 0.0392216633643 0.000305636704229 0.0225005106405 0.00282315609735 + 0.0425197147674 + + + 3.0 + + + 0.333333333333 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 15.0 + + + 1.0 5.0 0.125 0.0 3.0 1.0 + + + 0.0 0.933333333333 + + + 0.6 + + + 0.333333333333 1.0 0.75 0.0 0.333333333333 1.0 0.75 0.0 1.0 1.0 1.0 + 1.0 0.0 0.0 0.5 0.5 + + + 0.0 0.5 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.5 1.0 1.0 1.0 0.5 0.0 0.0 0.0 + 0.5 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.5 0.5 0.0 1.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 1.0 + + + 0.356962337406 0.286150251469 0.0722326501253 0.0357357575243 + 0.455328317404 0.218230278132 0.288076638149 0.0331380243713 + 0.0760664531444 0.0764924866316 0.333528079464 0.312316755819 + 0.183317441119 0.282979373196 + + + + + + + + + 380 3 5 6 10 13 1 2 36 21 1 19 35 40 36 40 36 41 35 41 35 40 36 40 36 + 40 36 40 36 40 36 40 36 40 37 40 35 40 36 40 37 39 37 39 37 16 1 22 + 36 40 36 40 37 35 41 1 4 29 42 38 38 39 37 39 37 39 37 39 37 39 37 39 + 37 39 37 39 37 39 38 38 38 38 38 38 38 38 38 17 1 20 33 1 4 38 32 2 4 + 38 32 2 4 38 32 2 4 39 30 3 5 71 5 6 4 61 5 2 31 38 5 2 31 38 5 1 32 + 38 5 1 32 38 38 38 38 38 38 38 38 38 38 38 37 39 37 40 36 41 35 41 34 + 41 37 38 38 38 38 38 38 38 38 38 38 38 38 4 1 33 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 7 2 29 39 37 39 7 1 + 29 39 37 39 37 39 37 39 37 39 37 39 37 40 37 71 4 74 2 75 1 75 1 76 1 + 75 1 1 0 + + + + 7372.0 + + + 0.783505154639 + + + 3377.0 + + + 0.119040568552 + + + 1.55085625898 + + + 0.498513473497 0.49343598855 0.127769887048 0.178318313589 + 0.10926899813 -0.00069094274413 0.000614408631863 + -0.000478181045479 0.0011337130937 + + + 76.0 + + + 0.315789473684 0.20618556701 + + + 0.368421052632 0.315789473684 0.473684210526 0.105263157895 + 0.20618556701 0.288659793814 0.247422680412 0.0824742268041 + + + 97.0 + + + 13.0 31.0 0.201465201465 3.0 1.0 3.0 + + + 0.0515463917526 0.989690721649 + + + 0.458084644601 + + + 0.758771929825 0.918859649123 0.0394736842105 0.0 0.776315789474 + 0.986842105263 0.155701754386 0.0589473684211 0.0921052631579 + 0.133771929825 0.997807017544 0.753684210526 0.0 0.0592105263158 + 0.907894736842 0.703157894737 + + + 0.537037037037 0.962962962963 0.87037037037 0.787037037037 + 0.111111111111 0.0 0.0 0.0 0.541666666667 0.991666666667 1.0 1.0 + 0.05 0.0 0.0 0.0 0.527777777778 1.0 1.0 0.990740740741 + 0.0833333333333 0.0 0.0 0.0 0.575 1.0 0.958333333333 1.0 + 0.283333333333 0.233333333333 0.183333333333 0.0461538461538 + 0.157407407407 0.231481481481 0.175925925926 0.296296296296 1.0 + 0.990740740741 0.972222222222 0.538461538462 0.0 0.0 0.0 + 0.0833333333333 1.0 1.0 1.0 0.538461538462 0.0 0.0 0.0 + 0.0833333333333 1.0 1.0 1.0 0.538461538462 0.0 0.0 0.0 0.15 + 0.808333333333 0.841666666667 0.8 0.515384615385 + + + 0.432637122075 0.191373436352 0.00212894277534 0.00387953979943 + 0.017120703202 0.404731761747 0.0759114854385 0.00480327480586 + 0.00338655766946 0.00765649195002 0.128676804526 0.291962140609 + 0.137971960241 0.0449771037717 + + + + + + + + + 41 1 139 2 138 4 137 4 137 4 136 5 136 6 135 5 100 4 32 5 101 3 32 4 + 102 8 27 4 102 17 12 10 101 40 101 19 3 18 101 18 2 20 100 19 2 20 99 + 42 99 42 99 42 99 42 99 42 99 42 99 42 99 42 99 42 99 42 17 3 79 21 1 + 20 16 5 78 42 16 7 76 42 16 9 74 42 16 10 73 42 16 9 74 42 16 9 74 4 + 1 36 17 9 74 42 16 9 74 42 16 9 75 41 16 8 76 41 15 9 76 41 12 12 76 + 41 12 13 74 42 11 15 74 41 11 16 5 2 1 1 64 41 11 16 4 8 61 41 11 16 + 2 11 60 41 11 32 57 41 11 33 56 41 11 33 56 41 11 34 55 41 10 36 54 + 41 10 38 52 4 3 34 10 38 52 4 11 26 10 38 52 4 32 5 10 39 51 4 34 3 9 + 39 18 2 32 4 34 3 9 39 17 3 32 4 34 3 9 39 17 5 29 6 33 3 9 17 2 20 + 17 6 28 5 34 2 10 39 16 7 29 4 35 1 10 39 15 9 28 3 36 2 8 8 1 32 13 + 12 26 3 35 3 8 8 1 31 14 15 22 5 35 2 8 7 2 30 16 12 24 5 45 6 3 29 + 17 12 3 2 22 1 35 3 8 6 8 1 1 22 16 13 3 2 59 4 6 6 12 20 15 16 1 2 + 59 2 8 12 2 1 5 17 17 15 1 3 58 2 8 16 5 15 18 20 58 1 8 18 2 17 16 + 16 2 4 66 7 1 8 2 1 2 16 16 15 5 3 69 3 1 4 1 3 5 15 17 13 5 1 1 4 73 + 9 4 14 17 14 2 8 72 11 3 2 1 11 17 25 72 1 3 5 3 4 1 10 16 28 70 1 11 + 4 3 8 16 29 69 3 10 2 5 8 15 30 70 1 16 5 1 2 15 32 86 8 15 33 47 2 + 36 7 16 34 46 2 30 2 4 7 16 35 45 2 29 14 16 35 45 2 30 12 16 37 44 2 + 30 13 15 38 43 2 29 13 25 30 74 11 26 31 75 9 25 33 75 8 24 27 3 2 78 + 4 1 1 25 27 3 1 80 3 1 1 26 25 85 3 29 22 87 2 31 21 121 20 121 20 + 121 20 121 21 120 22 124 16 127 10 2 2 122 1 5 8 127 1 5 9 125 3 4 10 + 123 6 3 11 118 10 3 4 2 5 120 7 2 1 1 3 1 8 1 1 121 2 3 16 121 9 1 10 + 113 5 3 15 2 2 115 6 1 19 116 24 118 23 120 1 2 18 123 18 122 18 124 + 17 126 15 134 7 134 4 136 7 130 11 129 11 132 10 132 9 132 8 134 8 + 134 6 135 6 136 5 9 0 + + + + 17625.0 + + + 1.128 + + + 4452.0 + + + 0.231132075472 + + + 1.88060965284 + + + 0.466843152355 0.443637147494 0.401082308431 0.162176748686 + 0.214580838718 0.0310354137247 0.0304976440778 0.0362432277062 + 0.0244331728579 + + + 141.0 + + + 0.900709219858 1.376 + + + 0.340425531915 0.964539007092 0.539007092199 1.75886524823 0.448 + 2.048 2.464 0.544 + + + 125.0 + + + 26.0 90.0 0.220216606498 22.0 2.0 4.0 + + + 0.0 0.992 + + + 0.252595744681 + + + 0.63133640553 0.660829493088 0.000921658986175 0.0 0.209216589862 + 0.599078341014 0.135483870968 0.0 0.0 0.354838709677 0.329953917051 + 0.0 0.0 0.0743727598566 0.6729390681 0.388888888889 + + + 0.290196078431 0.996323529412 0.956862745098 0.415441176471 + 0.00367647058824 0.0 0.0 0.0 0.203703703704 0.989583333333 1.0 + 0.3125 0.0 0.0 0.0 0.0 0.282352941176 0.411764705882 0.407843137255 + 0.279411764706 0.102941176471 0.0313725490196 0.0 0.0 0.0 + 0.149305555556 0.711111111111 0.965277777778 0.385416666667 0.0 0.0 + 0.0 0.0 0.0 0.255555555556 0.996527777778 0.729166666667 + 0.348148148148 0.0 0.0 0.0 0.0 0.0 0.106617647059 0.147058823529 + 0.0549019607843 0.0 0.0 0.0 0.0 0.0 0.288194444444 0.923611111111 + 0.811111111111 0.465277777778 0.0902777777778 0.0 0.0 0.0 0.0 + 0.309027777778 0.655555555556 0.534722222222 0.465277777778 + + + 0.437211029918 0.225732621267 0.110206753828 0.0440974063209 + 0.158848500741 0.432899434133 0.132283698044 0.0937327005105 + 0.0345035607272 0.057637502732 0.169480123969 0.264918105268 + 0.313038953254 0.0756489726975 + + + + + + + + + 34 19 7 9 67 36 66 35 67 35 67 35 67 35 67 35 67 35 67 35 68 34 68 34 + 68 35 67 35 67 35 67 35 67 35 67 35 67 35 67 35 67 35 67 29 73 3 2 23 + 74 31 71 36 66 3 4 29 66 36 66 36 66 36 66 36 66 36 66 36 66 36 66 36 + 66 36 25 1 40 36 25 1 40 36 25 1 40 36 25 1 40 37 24 1 41 36 24 1 10 + 1 30 36 24 1 10 3 4 5 19 35 25 2 8 28 4 35 25 2 8 34 2 34 2 1 2 20 7 + 34 9 1 16 35 7 34 29 32 7 34 29 32 8 33 29 32 8 33 29 32 7 17 2 15 29 + 32 8 16 2 15 29 32 8 16 2 15 29 32 8 33 29 32 7 34 29 32 7 35 28 32 7 + 34 30 31 6 36 29 32 5 37 26 77 26 35 1 39 27 34 3 38 27 35 2 38 27 35 + 2 38 27 34 2 39 27 33 6 35 29 16 4 10 8 35 29 31 8 35 28 31 8 34 29 + 31 8 34 29 30 9 35 28 30 9 35 28 31 8 35 28 31 8 35 29 30 8 35 29 31 + 7 35 29 31 7 35 29 31 7 35 29 31 7 35 29 31 7 35 29 30 8 35 29 29 9 + 35 29 29 10 34 29 29 10 34 29 29 10 6 1 28 28 29 10 4 16 14 29 30 9 4 + 24 6 29 17 3 2 2 6 9 3 27 4 29 3 24 4 8 3 28 3 30 1 26 3 8 3 28 3 57 + 3 8 3 28 3 58 2 8 3 29 3 57 2 8 3 29 3 67 4 28 3 67 4 29 2 67 4 29 2 + 67 4 98 4 99 3 99 3 99 3 99 3 99 3 99 3 100 1 101 2 100 2 100 2 100 1 + 93 0 + + + + 10914.0 + + + 0.953271028037 + + + 4446.0 + + + 0.14799820063 + + + 0.991704374057 + + + 0.500570097496 0.463798283808 0.167788984359 0.126941675025 + -0.00595151667713 0.00269501108298 -0.00204371726601 + 0.0306501072782 -0.0152036981556 + + + 102.0 + + + 0.43137254902 0.81308411215 + + + 0.274509803922 0.627450980392 0.43137254902 0.352941176471 + 0.11214953271 1.08411214953 1.00934579439 0.971962616822 + + + 107.0 + + + 6.0 32.0 0.15503875969 4.0 3.0 4.0 + + + 0.0 0.990654205607 + + + 0.407366684992 + + + 0.0 0.37037037037 0.844444444444 0.18962962963 0.619822485207 + 0.589743589744 0.566951566952 0.131054131054 0.712307692308 + 0.65037037037 0.32 0.0577777777778 0.0 0.373219373219 + 0.904558404558 0.172364672365 + + + 0.0 0.0 0.00595238095238 0.602564102564 0.775641025641 + 0.583333333333 0.333333333333 0.22619047619 0.0 0.0 0.0 + 0.917159763314 1.0 1.0 0.224852071006 0.0 0.284023668639 + 0.230769230769 0.21978021978 0.91124260355 1.0 1.0 0.355029585799 + 0.0 1.0 0.96449704142 1.0 0.224852071006 0.12426035503 + 0.142857142857 0.177514792899 0.010989010989 0.955128205128 1.0 1.0 + 0.230769230769 0.0 0.0 0.0 0.0 0.479289940828 0.455621301775 + 0.631868131868 0.710059171598 0.668639053254 0.565934065934 + 0.230769230769 0.0 0.0 0.0 0.0 0.834319526627 0.976331360947 1.0 + 0.366863905325 0.0 0.0 0.0 0.0384615384615 0.674556213018 + 0.869822485207 0.774725274725 0.349112426036 0.0 + + + 0.468318623926 0.0351227173271 0.0474654401088 0.110032192717 + 0.0053540065625 0.0907348827992 0.0133996953757 0.109882289266 + 0.312968302811 0.00954087519353 0.32458289965 0.0929349464135 + 0.0425869677377 0.0156229784902 + + + + + + + + + 3 1 3 1 2 1 3 1 3 1 3 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 + 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 + 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 44 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 + 2 2 2 2 2 3 1 1 0 + + + + 332.0 + + + 0.0481927710843 + + + 227.0 + + + 0.784140969163 + + + 0.987316176471 + + + 0.441997063142 0.551950145052 0.00368485031696 2.07773613302 + 0.00820443866219 8.2972230534e-06 0.0399084431426 0.00121430688779 + -0.633982502039 + + + 4.0 + + + 0.25 0.0 + + + 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 + + + 83.0 + + + 2.0 7.0 0.0813953488372 0.0 22.0 1.0 + + + 0.0 0.987951807229 + + + 0.683734939759 + + + 0.0 0.904761904762 1.0 0.428571428571 0.7 1.0 1.0 0.952380952381 + 0.9 1.0 1.0 1.0 0.1 0.0 0.0952380952381 0.809523809524 + + + 0.0 0.0 0.818181818182 1.0 1.0 1.0 0.9 0.0 0.0 0.0 0.818181818182 + 1.0 1.0 1.0 0.9 0.0 0.4 1.0 1.0 1.0 1.0 1.0 1.0 0.909090909091 0.4 + 1.0 1.0 1.0 1.0 1.0 1.0 0.909090909091 0.8 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 0.8 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.2 0.0 0.0 0.0 0.0 + 0.181818181818 1.0 0.636363636364 0.2 0.0 0.0 0.0 0.0 + 0.181818181818 1.0 0.636363636364 + + + 0.523685429984 0.21486538379 0.0865329296476 0.0295149270058 + 0.381740100178 0.444537162152 0.156653034447 0.0461486131618 + 0.0635290335463 0.0483514743741 0.321236209399 0.467483175922 + 0.352406944352 0.123332007064 + + + + + + + + + 11 2 10 1 12 1 12 1 12 1 12 1 64 1 11 2 11 2 11 2 11 2 11 1 11 3 10 3 + 10 3 9 3 9 4 9 4 9 4 8 5 8 5 8 4 8 5 8 5 8 4 9 4 9 4 99 2 10 5 8 6 5 + 8 5 8 5 8 5 8 5 8 5 8 5 8 5 1 3 4 5 1 4 3 10 3 11 1 12 1 399 3 10 3 + 10 2 52 1 12 1 12 1 12 1 11 3 9 4 10 3 9 4 9 4 8 4 9 5 8 4 9 5 7 6 7 + 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 8 5 8 4 9 4 9 4 10 2 11 + 2 11 2 12 1 11 3 9 4 9 4 9 4 9 4 10 2 12 1 8 0 + + + + 1690.0 + + + 0.1 + + + 332.0 + + + 0.774096385542 + + + 0.658143939394 + + + 0.388303212851 0.554730550107 0.0175328345608 4.69997273897 + -0.152885875772 0.000932781136932 0.19951866078 -0.024188970157 + -1.30041755579 + + + 13.0 + + + 1.61538461538 0.0153846153846 + + + 0.923076923077 3.38461538462 1.53846153846 0.615384615385 0.0 + 0.0615384615385 0.0 0.0 + + + 130.0 + + + 1.0 3.0 0.270588235294 6.0 7.0 0.0 + + + 0.0 0.992307692308 + + + 0.196449704142 + + + 0.0 0.252525252525 0.0 0.383838383838 0.135416666667 0.333333333333 + 0.229166666667 0.919191919192 0.364583333333 0.252525252525 + 0.0416666666667 0.171717171717 0.2265625 0.0 0.0 0.0 + + + 0.0 0.0 0.4375 0.117647058824 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 + 0.0 0.8125 0.352941176471 0.0 0.0 0.625 0.0 0.0 0.3125 1.0 + 0.882352941176 0.0 0.40625 0.59375 0.117647058824 0.0 0.53125 1.0 + 0.823529411765 0.0 0.71875 0.53125 0.235294117647 0.0 0.125 0.4375 + 0.0882352941176 0.0 0.75 0.0 0.0 0.0 0.0 0.0 0.0 0.46875 0.375 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0625 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.388273194778 0.281821199712 0.0807130996758 0.027424069946 + 0.0654299924034 0.62827318151 0.193244159929 0.0371799753429 + 0.0659166430277 0.0469939262787 0.33334651776 0.617864375131 + 0.504879202104 0.139716551921 + + + + + + + + + 36 1 80 1 79 2 79 2 80 1 79 2 79 2 78 3 64 6 2 2 4 3 46 35 45 36 45 + 36 45 36 45 36 46 35 46 35 45 36 45 36 45 36 45 36 45 36 45 36 45 36 + 45 36 45 36 46 35 46 35 46 35 45 36 44 38 43 37 45 36 45 37 44 37 33 + 4 7 36 34 4 7 36 33 6 7 35 33 6 7 34 33 7 7 34 32 8 7 34 33 6 8 34 32 + 8 7 34 31 8 8 35 30 8 8 35 29 9 8 35 20 1 2 15 8 35 17 1 3 17 8 35 9 + 9 1 20 8 37 1 36 7 51 2 20 8 51 2 19 9 19 2 51 9 3 18 31 1 19 9 2 29 + 37 13 2 29 20 1 13 16 2 29 20 1 13 17 1 29 36 15 1 30 35 15 1 30 35 + 46 37 43 39 43 40 41 40 41 41 40 41 40 41 40 41 39 41 40 42 40 41 40 + 41 40 42 39 41 40 42 39 42 39 42 39 42 39 42 39 42 39 43 38 43 38 43 + 38 43 38 42 39 42 39 20 2 21 38 20 2 21 38 16 7 20 38 7 18 1 6 11 38 + 5 29 9 38 6 28 9 38 7 26 10 37 6 27 11 37 6 30 8 38 3 34 6 76 6 75 6 + 76 5 76 5 75 6 76 5 76 5 76 6 75 6 76 5 77 3 79 2 78 4 77 5 76 4 77 4 + 77 4 78 3 78 3 77 5 77 4 77 4 77 4 77 1 2 1 77 1 3 0 + + + + 9639.0 + + + 0.680672268908 + + + 3474.0 + + + 0.158031088083 + + + 1.38514331853 + + + 0.503353483017 0.43397197584 0.14460028294 0.17118080703 + 0.111021250217 1.30798192131e-06 0.0050187146539 -9.23303437033e-06 + 0.00944324162049 + + + 81.0 + + + 0.469135802469 0.378151260504 + + + 0.0987654320988 0.345679012346 0.345679012346 1.03703703704 + 0.0672268907563 1.04201680672 0.168067226891 0.201680672269 + + + 119.0 + + + 2.0 22.0 0.280575539568 5.0 3.0 3.0 + + + 0.0 0.991596638655 + + + 0.360410830999 + + + 0.644827586207 0.688333333333 0.0 0.0 0.629310344828 0.728333333333 + 0.255 0.0416666666667 0.0 0.415 0.918333333333 0.005 0.0 + 0.42380952381 0.771428571429 0.239682539683 + + + 0.314285714286 0.866666666667 0.86 0.426666666667 0.0 0.0 0.0 0.0 + 0.357142857143 1.0 1.0 0.466666666667 0.0 0.0 0.0 0.0 + 0.414285714286 1.0 1.0 0.493333333333 0.0 0.0 0.0 0.0 + 0.371428571429 0.7 0.686666666667 0.733333333333 0.52 0.5 + 0.166666666667 0.0 0.0 0.0 0.0 0.82 1.0 0.88 0.02 0.0 0.0 0.0 0.0 + 0.84 1.0 0.793333333333 0.0 0.0 0.0 0.0 0.106666666667 + 0.973333333333 1.0 0.9 0.04 0.0 0.0 0.0 0.351515151515 + 0.284848484848 0.527272727273 0.690909090909 0.563636363636 + 0.315151515152 + + + 0.607233559062 0.123114586107 0.017868376112 0.0099131191692 + 0.380829486749 0.329569572394 0.0510150463524 0.0524700866689 + 0.0539618421129 0.0225946497732 0.00188675082635 0.424094497525 + 0.122547309392 0.032986268943 + + + + + + + + + 35 3 133 6 133 4 134 4 133 5 134 3 101 1 32 5 100 3 30 5 128 2 1 7 + 121 17 115 23 110 28 103 35 102 36 101 37 101 37 101 37 101 37 101 37 + 101 37 101 37 101 37 101 37 19 2 80 37 18 4 79 37 17 6 78 37 17 8 76 + 37 17 9 75 37 18 8 75 37 18 9 74 35 19 12 72 33 21 12 72 33 22 11 73 + 33 20 12 73 33 2 1 17 13 72 37 17 12 72 37 16 13 72 36 16 14 72 37 14 + 15 72 37 15 14 72 37 16 13 4 4 64 32 23 12 2 6 63 32 23 22 61 37 19 + 22 61 36 12 2 6 18 1 5 58 36 12 2 4 33 51 36 12 3 2 34 50 37 12 40 50 + 35 13 4 1 35 50 35 13 40 50 35 13 20 1 19 50 32 16 40 50 26 22 40 50 + 19 29 40 50 11 36 41 13 2 36 1 45 40 14 4 33 1 46 40 14 5 79 40 13 5 + 80 40 12 9 76 41 11 13 73 41 11 12 73 42 11 11 75 41 11 12 62 3 9 40 + 12 12 63 1 10 41 10 15 3 2 68 7 4 22 2 4 11 16 2 2 68 7 5 21 2 3 12 + 16 2 1 1 1 67 9 2 21 3 3 13 15 72 32 3 2 13 14 74 32 2 3 12 20 70 2 1 + 5 2 6 2 13 3 2 14 25 63 3 8 4 5 11 4 1 13 28 62 1 8 5 6 3 1 6 4 1 12 + 30 71 4 5 12 2 1 12 32 72 2 5 6 1 8 12 33 79 3 3 8 13 34 83 5 1 1 13 + 35 83 8 12 36 82 8 12 37 81 7 12 39 79 7 13 40 77 8 13 40 77 8 13 41 + 75 9 12 2 1 29 3 4 79 8 12 2 2 28 3 2 82 7 12 3 1 30 88 4 13 2 5 26 + 89 1 16 1 7 22 117 21 117 23 116 22 117 21 116 23 1 1 103 1 9 27 101 + 2 8 27 111 28 111 5 1 12 1 8 112 4 2 10 3 7 118 11 5 4 112 3 4 13 3 4 + 110 6 4 17 108 11 3 16 108 30 106 1 1 30 106 2 1 4 2 23 107 30 109 29 + 112 26 117 21 117 20 117 20 118 20 120 9 1 8 122 3 1 1 4 8 130 4 2 2 + 128 9 124 14 124 15 123 14 127 11 128 9 129 10 129 9 129 9 131 6 135 + 2 137 1 7 0 + + + + 17388.0 + + + 1.09523809524 + + + 4520.0 + + + 0.209955752212 + + + 1.90962837838 + + + 0.496539306246 0.455515044248 0.385250507648 0.171252711169 + 0.220252030919 0.000313510018616 0.0229680670735 0.0202334052592 + 0.0200236496525 + + + 138.0 + + + 0.855072463768 1.0873015873 + + + 0.173913043478 0.898550724638 0.63768115942 1.71014492754 + 0.380952380952 1.36507936508 2.03174603175 0.507936507937 + + + 126.0 + + + 13.0 61.0 0.300683371298 13.0 3.0 5.0 + + + 0.0 0.992063492063 + + + 0.259949390384 + + + 0.657495256167 0.636029411765 0.0 0.0 0.172350230415 0.525 + 0.126267281106 0.0 0.0 0.422794117647 0.343453510436 0.0 0.0 + 0.0660714285714 0.707834101382 0.499107142857 + + + 0.227450980392 0.941176470588 0.875 0.356617647059 0.0 0.0 0.0 0.0 + 0.419607843137 1.0 1.0 0.3125 0.0 0.0 0.0 0.0 0.23137254902 + 0.213235294118 0.209558823529 0.117647058824 0.0313725490196 0.0 + 0.0 0.0 0.0 0.243055555556 0.736111111111 0.996527777778 + 0.477777777778 0.0 0.0 0.0 0.0 0.0 0.349264705882 0.996323529412 + 0.721568627451 0.216911764706 0.0 0.0 0.0 0.0 0.0477941176471 + 0.297794117647 0.282352941176 0.172794117647 0.0 0.0 0.0 0.0 0.0 + 0.272058823529 0.925490196078 0.860294117647 0.584558823529 + 0.0661764705882 0.0 0.0 0.0 0.0 0.37037037037 0.6875 0.819444444444 + 0.506944444444 + + + 0.399120693625 0.244561263665 0.0671754310747 0.0383970930583 + 0.114528810583 0.432560967202 0.152607620672 0.0581196893989 + 0.029866059298 0.0576129239103 0.224047252572 0.189349073415 + 0.340794033875 0.0880366195355 + + + + + + + + + 10 4 14 4 13 6 12 6 11 8 10 8 10 10 8 10 8 6 1 3 7 7 1 2 8 6 12 5 13 + 6 11 7 11 7 11 7 11 5 1 1 10 9 9 10 8 6 1 2 8 8 9 9 8 10 8 8 10 9 8 + 10 10 7 9 1 2 5 11 7 11 7 3 4 3 8 1 5 4 7 2 5 4 14 4 2 1 10 8 5 1 4 8 + 4 3 2 5 1 1 6 2 1 8 7 12 6 4 1 7 12 7 3 3 6 6 2 4 7 6 1 7 4 15 3 10 7 + 11 7 11 7 11 7 12 6 14 4 16 1 4 0 + + + + 918.0 + + + 0.352941176471 + + + 395.0 + + + 0.564556962025 + + + 0.891819660702 + + + 0.515860014892 0.496607594937 0.0349433452526 0.45851392689 + -0.0228901486495 -0.00110742532595 0.0413876147648 0.00257172674068 + -0.0192397933696 + + + 18.0 + + + 1.94444444444 0.333333333333 + + + 1.55555555556 0.0 3.77777777778 1.77777777778 0.156862745098 + 0.156862745098 0.705882352941 0.313725490196 + + + 51.0 + + + 5.0 14.0 0.380434782609 4.0 6.0 1.0 + + + 0.0 0.980392156863 + + + 0.430283224401 + + + 0.0 0.134615384615 0.5 0.115384615385 0.183333333333 0.784615384615 + 0.938461538462 0.261538461538 0.9375 0.807692307692 0.461538461538 + 0.692307692308 0.483333333333 0.0615384615385 0.169230769231 + 0.384615384615 + + + 0.0 0.0 0.0 0.0 0.25 0.357142857143 0.0 0.0 0.0 0.0 0.0 + 0.583333333333 0.75 0.642857142857 0.5 0.0 0.0 0.0 0.142857142857 + 0.916666666667 1.0 1.0 0.666666666667 0.0 0.111111111111 0.5 + 0.952380952381 1.0 1.0 0.809523809524 0.277777777778 0.190476190476 + 0.833333333333 1.0 1.0 0.916666666667 0.333333333333 0.5 0.5 + 0.714285714286 1.0 0.916666666667 0.928571428571 0.333333333333 + 0.25 0.714285714286 0.666666666667 0.857142857143 0.833333333333 + 0.5 0.214285714286 0.0833333333333 0.333333333333 0.428571428571 + 0.75 0.928571428571 0.111111111111 0.611111111111 0.0 0.0 + 0.0555555555556 0.0 0.166666666667 0.0 + + + 0.394716128005 0.241836460934 0.0763129988863 0.0747722165702 + 0.268116613762 0.30572171125 0.178161414337 0.151611367175 + 0.0527136554627 0.117161320371 0.269768145817 0.176674327666 + 0.230156427686 0.119289683567 + + + + + + + + + 11 4 20 2 10 32 10 32 10 32 10 32 10 32 9 33 9 33 9 33 8 34 9 33 9 34 + 8 33 9 33 9 33 9 33 9 33 8 34 9 33 9 33 9 33 9 33 9 32 9 34 7 36 7 35 + 7 35 7 36 6 35 8 34 8 34 8 34 7 1 2 5 1 9 1 14 9 29 5 1 7 7 2 26 7 35 + 8 34 8 7 1 26 8 34 8 34 8 34 8 33 9 33 9 33 9 1 22 9 9 2 28 1 42 1 41 + 1 220 1 41 2 40 1 503 1 41 1 41 2 40 4 38 9 33 16 3 3 12 1 7 32 2 1 7 + 33 1 1 7 35 7 35 7 35 7 36 6 17 1 18 6 36 6 36 6 36 6 36 6 36 6 37 3 + 40 1 41 2 39 3 39 5 37 6 36 6 36 6 36 6 6 2 28 5 2 7 28 6 3 6 27 6 3 + 6 27 6 5 3 29 5 37 5 37 5 37 5 37 5 37 5 37 5 37 5 37 5 37 5 29 2 6 6 + 29 1 7 5 37 5 6 1 30 5 37 5 37 6 1 4 31 15 27 30 2 3 7 37 5 37 5 38 4 + 39 3 39 3 40 2 40 2 40 2 41 1 + + + + 5292.0 + + + 0.333333333333 + + + 3061.0 + + + 0.152237830774 + + + 1.07279441165 + + + 0.511549708767 0.479082652728 0.0352888689624 0.47187389586 + 0.0149059627132 4.71684115971e-05 0.00623089855539 0.00299711121004 + -0.0225331640482 + + + 42.0 + + + 1.7380952381 0.190476190476 + + + 2.09523809524 1.71428571429 1.04761904762 1.90476190476 + 0.031746031746 0.253968253968 0.15873015873 0.31746031746 + + + 126.0 + + + 9.0 48.0 0.203278688525 5.0 8.0 0.0 + + + 0.0 0.992063492063 + + + 0.578420256992 + + + 0.593548387097 0.271875 0.564516129032 0.328125 0.979472140762 + 0.394886363636 0.706744868035 0.633522727273 0.967741935484 + 0.415625 0.687096774194 0.690625 0.557184750733 0.252840909091 + 0.504398826979 0.724431818182 + + + 0.133333333333 0.3 0.2375 0.05 0.266666666667 0.475 0.2 0.0 + 0.933333333333 1.0 0.8 0.0 0.493333333333 1.0 0.85 0.2625 + 0.986666666667 1.0 0.7625 0.0 0.426666666667 1.0 0.85 0.2875 + 0.933333333333 1.0 0.8125 0.0 0.377777777778 0.989583333333 1.0 + 0.375 0.933333333333 1.0 0.8 0.0 0.373333333333 1.0 1.0 0.375 + 0.933333333333 1.0 0.8625 0.0 0.333333333333 1.0 1.0 0.3875 + 0.946666666667 1.0 0.85 0.0125 0.32 1.0 0.9625 0.4 0.177777777778 + 0.239583333333 0.208333333333 0.0 0.1 0.614583333333 0.802083333333 + 0.71875 + + + 0.328662415321 0.270185058192 0.0407498230074 0.0242445285051 + 0.129744191726 0.51015008897 0.148334276495 0.07502561184 + 0.0188778178141 0.0332788045915 0.177486637138 0.284452543405 + 0.337300702097 0.0633339002374 + + + + + + + + + 11 4 11 4 13 1 147 1 13 2 12 3 13 2 13 2 14 1 266 2 11 4 13 2 340 1 + 14 1 12 4 11 3 12 3 13 2 12 2 56 4 11 4 11 4 11 4 11 4 11 4 11 4 12 3 + 12 2 12 3 14 1 73 2 12 3 12 4 11 4 13 2 13 2 13 2 13 2 13 2 14 1 40 3 + 12 4 12 3 13 2 12 4 10 0 + + + + 1530.0 + + + 0.147058823529 + + + 121.0 + + + 1.45454545455 + + + 0.710801393728 + + + 0.326446280992 0.648801243761 0.103111323855 7.37546265694 + -0.803257691945 0.0387574933697 2.61369264277 -0.325726067178 + -19.7509276765 + + + 15.0 + + + 1.06666666667 0.0 + + + 1.6 1.86666666667 0.266666666667 0.266666666667 0.0 0.0 0.0 0.0 + + + 102.0 + + + 0.0 0.0 0.289473684211 11.0 2.0 1.0 + + + 0.0 0.990196078431 + + + 0.0790849673203 + + + 0.0 0.0 0.16 0.307692307692 0.0 0.00961538461538 0.28 + 0.278846153846 0.05 0.0673076923077 0.0 0.0 0.15 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.153846153846 0.0 0.0 0.0 0.0 0.0 + 0.461538461538 0.5 0.346153846154 0.0 0.0 0.0 0.0 0.0833333333333 + 0.730769230769 0.5 0.615384615385 0.0 0.0 0.0384615384615 0.0 + 0.166666666667 0.115384615385 0.0 0.0 0.0 0.0 0.153846153846 0.0 + 0.0 0.0 0.0 0.0 0.0 0.192307692308 0.115384615385 0.0 0.0 0.0 0.0 + 0.0 0.166666666667 0.230769230769 0.0 0.0 0.0 0.0 0.0 0.0 + 0.208333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.568388934286 0.192472046122 0.344383919552 0.115244747962 + 0.750829099977 0.23551876358 0.18110543666 0.410398646042 + 0.137714204388 0.165525075247 0.577538892226 0.514875569944 + 0.107980571823 0.192887417116 + + + + + + + + + 35 3 74 9 4 4 21 1 38 20 1 13 4 1 38 40 37 40 37 40 37 19 2 19 37 40 + 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 40 37 + 40 38 39 38 39 36 42 35 43 34 43 35 42 35 41 36 42 34 43 35 42 36 40 + 37 6 2 31 38 2 1 2 7 4 3 20 41 2 7 1 1 2 3 15 1 1 2 1 36 7 6 28 4 3 + 30 6 4 30 4 8 10 1 5 6 5 1 8 29 3 24 3 10 8 30 3 20 7 3 3 2 6 2 3 28 + 3 20 5 49 3 74 3 74 3 74 2 41 1 33 3 40 12 2 3 17 3 39 30 5 3 39 32 3 + 3 38 33 3 2 39 33 3 2 39 33 2 3 37 35 3 2 39 33 3 2 39 33 3 2 38 34 2 + 2 41 32 2 3 40 32 2 4 40 31 3 3 39 32 3 3 4 1 34 32 3 3 3 5 31 32 2 4 + 5 1 33 31 3 3 40 32 2 4 39 32 2 3 40 32 2 4 39 32 3 4 38 32 3 4 38 32 + 3 4 39 30 3 5 39 30 4 5 38 31 3 5 38 31 3 5 38 30 4 5 38 30 4 5 38 30 + 4 5 38 30 4 5 38 30 4 5 38 30 4 5 38 30 3 10 4 2 10 1 18 29 3 11 1 17 + 1 6 1 1 6 30 4 40 3 30 4 41 2 31 3 74 3 73 4 73 4 73 4 74 3 74 2 75 3 + 74 3 74 3 42 2 30 3 43 1 30 3 74 3 1 0 + + + + 7238.0 + + + 0.81914893617 + + + 3406.0 + + + 0.172930123312 + + + 0.749158764148 + + + 0.525751769323 0.44160210634 0.134814916928 0.145526993569 + -0.0672737660114 -0.000876442719176 0.00784799750332 + 0.00883723643817 0.000759286477491 + + + 77.0 + + + 0.935064935065 0.829787234043 + + + 0.467532467532 0.987012987013 1.50649350649 0.727272727273 + 0.212765957447 1.14893617021 1.10638297872 0.808510638298 + + + 94.0 + + + 10.0 50.0 0.227748691099 5.0 4.0 5.0 + + + 0.0 0.989361702128 + + + 0.47057198121 + + + 0.0 0.401315789474 0.890160183066 0.285087719298 0.155606407323 + 0.473684210526 1.0 0.381578947368 0.929061784897 0.769736842105 + 0.144164759725 0.107456140351 0.815217391304 0.877083333333 + 0.134782608696 0.170833333333 + + + 0.0 0.0 0.0 0.759259259259 0.868686868687 0.685185185185 + 0.37962962963 0.0 0.0 0.0 0.0 0.841666666667 1.0 0.991666666667 + 0.741666666667 0.0 0.0 0.0 0.0 0.731481481481 1.0 1.0 0.75 0.0 0.3 + 0.291666666667 0.283333333333 0.858333333333 1.0 1.0 0.775 0.0 + 0.872727272727 1.0 0.8 0.591666666667 0.218181818182 0.325 + 0.383333333333 0.025 0.828282828283 1.0 0.935185185185 + 0.768518518519 0.0 0.0 0.0 0.0 0.818181818182 1.0 1.0 + 0.816666666667 0.0 0.0 0.0 0.0 0.618181818182 0.808333333333 + 0.891666666667 0.8 0.263636363636 0.275 0.366666666667 + 0.316666666667 + + + 0.499448650094 0.109647834441 0.0355503011635 0.0354558787002 + 0.101446530683 0.333443604013 0.044355192099 0.0447599571068 + 0.0687402109926 0.0133703566582 0.205271051878 0.351866621746 + 0.087176493998 0.0141306031362 + + + + + + + + + 32 1 94 1 71 2 93 1 69 5 92 2 66 2 1 5 91 2 67 1 2 6 89 2 67 1 2 6 89 + 3 66 2 1 7 88 6 63 2 2 7 87 20 48 3 1 10 85 31 5 1 32 15 83 25 2 10 + 32 16 82 25 1 11 32 10 4 1 83 37 32 10 3 4 81 38 31 17 81 38 31 17 81 + 38 31 18 80 38 31 18 4 1 76 37 31 18 2 6 73 37 31 18 2 7 72 37 32 17 + 3 7 71 37 32 19 2 8 69 37 32 21 1 9 67 37 32 34 8 1 55 37 32 36 5 4 + 53 37 32 37 5 5 51 37 4 1 27 49 50 37 2 2 27 51 47 39 1 2 27 52 1 5 + 40 43 24 58 42 44 24 57 43 38 1 3 25 29 2 26 43 37 1 5 24 24 4 2 3 24 + 43 43 22 22 2 3 5 3 3 23 41 43 24 27 4 36 33 37 1 6 24 30 1 38 30 36 + 3 3 27 25 1 43 29 36 4 1 28 25 3 4 3 2 6 29 28 5 1 28 4 2 27 33 2 6 5 + 28 26 4 3 27 4 2 27 20 4 11 2 40 26 1 3 27 5 1 27 16 3 1 4 56 22 3 2 + 28 4 1 27 6 2 8 8 60 14 1 1 6 3 26 4 1 28 4 4 7 9 12 1 4 11 33 11 1 + 12 25 4 2 27 4 4 3 2 2 9 12 2 3 11 35 9 2 9 27 4 2 26 6 2 4 14 15 9 + 41 7 3 2 32 4 2 24 8 2 5 1 1 13 15 7 46 1 37 5 33 2 7 1 1 9 1 4 13 4 + 87 5 32 5 5 8 6 4 12 3 87 5 31 8 3 8 8 4 67 2 5 1 25 5 31 19 7 8 69 4 + 24 5 31 21 3 12 28 5 34 18 10 5 32 22 1 14 28 4 33 22 6 5 31 27 3 9 4 + 2 54 1 3 23 5 5 17 1 13 28 2 1 2 8 58 28 4 5 17 1 12 30 5 8 35 7 15 + 28 4 4 31 32 9 2 1 2 32 8 17 25 4 4 32 32 8 7 34 4 18 23 5 4 34 34 8 + 5 33 1 21 22 5 4 36 33 67 23 4 5 33 40 15 2 45 23 4 5 33 43 9 9 41 23 + 4 5 32 43 12 10 38 26 1 5 36 41 8 14 36 26 1 5 34 46 1 1 6 14 11 1 21 + 32 33 51 5 17 29 32 32 54 6 18 25 31 31 60 3 22 15 1 5 23 3 4 32 62 2 + 20 21 22 4 5 1 6 24 84 21 22 3 6 32 3 1 79 21 22 3 5 38 78 21 22 4 4 + 38 78 21 22 3 5 38 78 21 22 3 5 38 78 21 31 38 71 5 1 21 32 37 60 3 8 + 27 32 37 59 39 31 38 60 38 31 38 62 36 31 38 67 31 32 37 68 30 32 37 + 70 29 31 37 73 26 30 39 74 24 31 38 77 21 32 37 80 18 32 37 82 16 31 + 12 13 13 86 12 31 4 27 7 88 10 31 3 30 6 88 9 32 3 29 6 88 9 31 5 29 + 5 88 9 31 4 30 4 92 6 31 3 31 5 91 6 31 3 31 5 128 4 29 6 127 6 30 5 + 128 2 33 3 165 2 165 2 166 1 166 1 166 1 124 0 + + + + 17034.0 + + + 1.63725490196 + + + 6576.0 + + + 0.209701946472 + + + 0.728065065424 + + + 0.510031915985 0.463681313387 0.39535008046 0.0702039984851 + -0.0430382670642 -0.014749525905 -0.0024150769187 0.00485923240879 + 0.00241101300425 + + + 167.0 + + + 1.46706586826 2.53921568627 + + + 1.4371257485 2.22754491018 1.1497005988 0.982035928144 + 1.76470588235 4.19607843137 2.94117647059 1.09803921569 + + + 102.0 + + + 27.0 143.0 0.246927374302 20.0 5.0 16.0 + + + 0.0 0.990196078431 + + + 0.386051426559 + + + 0.23512195122 0.425891181989 0.820487804878 0.437148217636 + 0.18380952381 0.742673992674 0.0933333333333 0.0283882783883 0.0 + 0.537545787546 0.558095238095 0.112637362637 0.630476190476 + 0.81684981685 0.365714285714 0.18956043956 + + + 0.0 0.0 0.169230769231 0.434615384615 0.866666666667 0.842307692308 + 0.696153846154 0.115384615385 0.369047619048 0.542124542125 + 0.545787545788 0.542124542125 0.72619047619 0.846153846154 + 0.849816849817 0.0842490842491 0.0357142857143 0.59706959707 + 0.908424908425 0.435897435897 0.00396825396825 0.0 0.029304029304 + 0.0842490842491 0.0 0.0769230769231 0.904761904762 0.721611721612 + 0.384920634921 0.0 0.0 0.0 0.0 0.0 0.399267399267 0.959706959707 + 0.805555555556 0.0842490842491 0.014652014652 0.0 0.0 0.0 + 0.003663003663 0.787545787546 0.912698412698 0.47619047619 + 0.435897435897 0.0 0.444444444444 0.871794871795 0.791208791209 + 0.673992673993 0.559523809524 0.655677655678 0.648351648352 + 0.10989010989 0.257936507937 0.904761904762 0.959706959707 + 0.842490842491 0.162698412698 0.0842490842491 0.0 0.0 + + + 0.317312349565 0.230328255097 0.0432393535854 0.0110528049581 + 0.0345606273959 0.353444229274 0.12461146361 0.0490197871655 + 0.0164482501169 0.00943830445409 0.113131146839 0.250532370044 + 0.179577238006 0.0857851904493 + + + + + + + + + 34 2 74 3 35 3 36 3 32 5 36 2 34 4 72 4 73 2 75 1 39 3 72 7 11 9 4 7 + 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 38 38 38 38 38 39 37 39 37 39 37 39 37 39 30 46 30 46 37 + 39 37 39 37 39 37 39 37 39 37 40 36 40 36 40 36 40 36 40 36 40 36 40 + 37 5 1 33 37 4 3 32 37 4 13 22 37 4 17 1 10 6 38 4 31 2 39 4 72 4 72 + 4 72 4 41 28 3 4 40 30 2 4 39 31 2 4 38 33 1 4 38 32 2 4 39 31 2 4 38 + 33 1 3 39 33 1 2 42 31 1 1 43 30 46 30 3 1 42 31 1 2 42 35 41 36 39 + 37 39 37 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 + 38 38 38 38 39 37 39 37 39 37 39 37 39 38 6 2 30 38 5 2 31 38 38 38 + 38 38 1 10 5 2 20 39 1 16 20 67 9 69 7 70 6 71 5 72 4 72 4 73 4 72 4 + 72 3 74 2 74 2 75 1 33 0 + + + + 7828.0 + + + 0.73786407767 + + + 3388.0 + + + 0.139315230224 + + + 0.74030566377 + + + 0.515478158205 0.484776141862 0.116278800716 0.166380643991 + -0.0883720274737 -0.00062764237401 0.00473079146986 + -0.0020378242527 -0.00202649383083 + + + 76.0 + + + 0.381578947368 0.271844660194 + + + 0.210526315789 0.315789473684 0.263157894737 0.736842105263 + 0.194174757282 0.233009708738 0.466019417476 0.194174757282 + + + 103.0 + + + 1.0 9.0 0.183673469388 3.0 4.0 2.0 + + + 0.0 0.990291262136 + + + 0.432805314257 + + + 0.0 0.163967611336 0.854251012146 0.358299595142 0.0947368421053 + 0.15991902834 1.0 0.54048582996 0.661052631579 1.0 0.251012145749 + 0.224696356275 0.64 0.882591093117 0.080971659919 0.0 + + + 0.0 0.0 0.0 0.290598290598 0.760683760684 0.623931623932 + 0.487179487179 0.00854700854701 0.0 0.0 0.0 0.361538461538 1.0 1.0 + 0.915384615385 0.0 0.0 0.0 0.0 0.299145299145 1.0 1.0 + 0.982905982906 0.042735042735 0.158333333333 0.2 0.0923076923077 + 0.246153846154 1.0 1.0 1.0 0.130769230769 0.314814814815 1.0 1.0 + 1.0 0.512820512821 0.461538461538 0.529914529915 0.418803418803 + 0.275 1.0 1.0 1.0 0.0769230769231 0.0 0.0 0.0 0.305555555556 1.0 + 1.0 1.0 0.0769230769231 0.0 0.0 0.0 0.416666666667 0.8 + 0.692307692308 0.861538461538 0.238461538462 0.0 0.0 0.0 + + + 0.456334624342 0.16202524642 0.0195809287127 0.0173740046686 + 0.0447897399345 0.36354526584 0.0457433888931 0.00825918562925 + 0.0133605753713 0.0235698799352 0.153701284652 0.303715635049 + 0.0818148517959 0.03180445493 + + + + + + + + + 7 6 26 7 26 6 28 5 28 5 28 5 28 6 27 6 27 7 26 8 25 9 24 10 23 10 23 + 11 22 12 20 14 18 16 16 18 14 19 14 16 2 2 13 16 16 17 16 16 18 15 18 + 12 1 1 19 14 19 15 18 3 1 11 18 16 16 10 2 5 16 10 3 4 16 10 3 6 3 2 + 9 11 1 13 8 25 8 11 1 13 8 25 8 19 2 4 8 19 2 5 7 12 2 5 2 5 8 11 2 5 + 2 5 7 13 1 5 2 5 7 18 3 5 8 27 6 4 3 21 5 27 6 27 6 27 5 28 6 27 6 27 + 6 6 1 20 6 5 3 19 6 5 4 18 6 5 6 5 2 9 6 5 5 6 3 8 6 5 6 6 1 9 6 6 5 + 17 5 6 6 16 5 6 7 15 5 7 8 13 4 7 9 13 4 8 9 12 4 8 10 12 3 8 10 11 4 + 7 11 11 5 3 16 10 4 4 22 1 6 5 16 6 6 8 13 2 3 1 6 10 12 2 9 12 10 4 + 7 13 10 2 8 13 11 3 6 17 7 2 7 18 15 20 13 22 11 23 10 24 9 25 7 27 6 + 28 5 29 4 27 6 26 7 25 8 17 1 8 7 16 3 7 7 10 2 4 4 7 6 4 1 12 2 6 8 + 28 5 29 4 29 4 29 4 30 3 30 3 29 4 29 5 3 1 24 4 25 3 1 4 27 1 2 3 30 + 3 30 3 30 3 30 3 29 4 29 4 30 3 30 3 30 3 30 3 6 4 20 3 5 6 1 2 2 2 + 12 3 5 9 1 4 11 3 5 9 2 4 10 3 5 9 2 5 9 2 7 9 1 5 9 2 7 11 13 3 6 12 + 12 1 8 14 10 2 7 15 10 1 7 15 10 1 7 16 9 1 7 17 7 1 9 21 3 1 7 26 7 + 27 6 27 6 27 6 27 6 27 4 29 4 29 6 27 6 27 6 27 6 27 5 28 6 27 7 26 7 + 26 7 27 3 1 1 25 0 + + + + 4719.0 + + + 0.230769230769 + + + 2611.0 + + + 0.245116813481 + + + 1.12956895296 + + + 0.454698870165 0.504223733824 0.0274439368711 0.454772594669 + 0.00822289726687 0.00109586049341 -0.016851489676 0.00504088394237 + -0.0322786738129 + + + 33.0 + + + 3.21212121212 0.538461538462 + + + 2.30303030303 3.15151515152 3.51515151515 3.75757575758 + 0.251748251748 0.951048951049 0.335664335664 0.559440559441 + + + 143.0 + + + 25.0 67.0 0.241706161137 4.0 6.0 2.0 + + + 0.0 0.993006993007 + + + 0.553295189659 + + + 0.421428571429 0.652777777778 0.708333333333 0.753472222222 0.85 + 0.579861111111 0.993055555556 0.142361111111 0.310714285714 + 0.708333333333 0.881944444444 0.25 0.0349206349206 0.614197530864 + 0.567901234568 0.435185185185 + + + 0.0 0.347222222222 0.347222222222 0.319444444444 0.375 + 0.486111111111 0.638888888889 0.513888888889 0.323529411765 + 0.986111111111 0.986111111111 0.958333333333 1.0 0.972222222222 + 0.944444444444 0.916666666667 1.0 1.0 0.861111111111 0.333333333333 + 1.0 1.0 0.236111111111 0.0416666666667 0.544117647059 + 0.847222222222 0.930555555556 0.194444444444 0.972222222222 1.0 + 0.291666666667 0.0 0.220588235294 0.722222222222 1.0 0.375 + 0.819444444444 0.986111111111 0.402777777778 0.0 0.0147058823529 + 0.263888888889 0.819444444444 0.638888888889 0.736111111111 + 0.986111111111 0.597222222222 0.0 0.0 0.152777777778 0.972222222222 + 0.875 0.680555555556 0.972222222222 0.930555555556 0.0 0.0 0.0 + 0.255555555556 0.477777777778 0.122222222222 0.6 0.822222222222 0.0 + + + 0.500170395232 0.201647509359 0.0417048104089 0.030971568098 + 0.324048572176 0.380108448464 0.129419081074 0.07452901055 + 0.0201590511532 0.0572036854504 0.156599158307 0.389276592774 + 0.22934650811 0.088165617799 + + + + + + + + + 2 1 70 1 70 1 69 3 69 2 68 3 10 18 6 1 33 3 5 26 1 4 32 39 32 38 33 + 38 33 39 32 39 32 39 32 39 32 38 33 39 32 39 32 39 32 39 32 38 33 38 + 33 38 33 38 33 38 33 38 33 38 33 39 32 38 33 3 1 34 33 38 32 39 32 39 + 32 40 31 39 33 38 33 38 29 1 3 38 29 1 2 40 28 1 2 39 28 2 3 38 28 2 + 3 39 26 3 3 39 7 3 1 3 1 14 3 68 3 68 3 68 3 68 3 68 3 19 1 5 1 42 3 + 8 25 35 3 6 28 34 3 4 32 32 3 3 33 33 1 6 30 35 1 5 30 35 1 4 30 35 1 + 5 30 35 1 5 31 35 2 1 33 34 37 33 38 33 38 33 38 33 38 33 38 33 38 26 + 3 1 1 2 37 20 1 4 7 2 38 33 38 33 38 29 1 3 38 33 37 34 38 19 1 13 38 + 33 38 33 38 33 38 33 37 34 38 33 38 34 37 34 37 34 36 31 1 3 36 30 1 + 4 36 18 15 2 37 5 27 2 37 4 27 4 36 3 28 4 36 2 29 4 36 2 30 2 37 1 + 31 2 69 2 69 2 1 0 + + + + 6532.0 + + + 0.771739130435 + + + 3116.0 + + + 0.143453145058 + + + 1.45735707591 + + + 0.490977443609 0.47578608811 0.124592464566 0.155237945624 + 0.0916250693085 5.5885683519e-05 0.00486637707354 0.00401959378705 + 0.0054286001767 + + + 71.0 + + + 0.478873239437 0.445652173913 + + + 0.394366197183 0.0 0.676056338028 0.732394366197 0.173913043478 + 0.434782608696 0.739130434783 0.434782608696 + + + 92.0 + + + 6.0 37.0 0.192592592593 2.0 2.0 3.0 + + + 0.0 0.989130434783 + + + 0.477036129822 + + + 0.718670076726 0.953964194373 0.202046035806 0.0 0.775362318841 1.0 + 0.0845410628019 0.0 0.188405797101 0.381642512077 0.95652173913 + 0.669082125604 0.0 0.214975845411 0.881642512077 0.6038647343 + + + 0.477272727273 0.875 0.909090909091 0.895833333333 0.670454545455 + 0.0104166666667 0.0 0.0 0.474747474747 1.0 1.0 1.0 0.191919191919 + 0.0 0.0 0.0 0.545454545455 1.0 1.0 1.0 0.171717171717 0.0 0.0 0.0 + 0.515151515152 1.0 1.0 1.0 0.181818181818 0.0 0.0 0.0 + 0.232323232323 0.509259259259 0.464646464646 0.657407407407 + 0.929292929293 0.898148148148 0.909090909091 0.481481481481 0.0 0.0 + 0.0 0.37962962963 1.0 1.0 1.0 0.333333333333 0.0 0.0 0.0 + 0.407407407407 1.0 0.972222222222 0.989898989899 0.25 0.0 0.0 0.0 + 0.416666666667 0.868686868687 0.694444444444 0.79797979798 + 0.425925925926 + + + 0.485143396407 0.155958584289 0.0335374222983 0.0167718940692 + 0.096950023871 0.355870319947 0.0568019864062 0.0532021703037 + 0.0257900636093 0.0100184493147 0.149818462149 0.312493874576 + 0.107235479143 0.036935500453 + + + + + + + + + 0 3 75 2 74 3 3 3 3 23 42 40 37 31 6 2 39 39 38 38 39 38 39 38 39 38 + 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 38 39 37 40 + 37 40 34 47 3 2 18 59 19 2 2 45 7 1 28 41 37 40 4 5 28 40 4 1 32 40 + 37 40 37 40 37 40 37 40 37 40 37 40 25 1 11 40 5 4 28 40 37 40 37 37 + 1 2 8 1 28 36 2 2 7 2 27 36 3 2 8 1 28 34 4 2 37 12 5 1 3 1 4 7 5 2 + 37 3 35 2 54 2 19 3 53 2 19 3 5 27 22 1 19 3 2 31 21 1 19 37 40 37 40 + 37 19 1 20 37 19 1 20 37 40 37 40 37 19 1 19 37 20 1 13 43 20 1 19 36 + 21 1 20 35 42 35 43 37 39 34 43 35 42 35 20 1 21 40 3 1 19 2 11 41 1 + 3 32 41 15 1 20 36 3 7 10 1 21 35 42 35 42 35 42 35 42 35 41 36 41 36 + 2 1 17 1 21 35 20 2 19 36 20 2 19 36 20 2 19 35 21 2 19 36 7 2 11 2 + 19 38 18 1 20 36 19 2 17 1 2 36 7 1 11 3 15 2 1 37 19 2 16 3 2 35 19 + 2 15 4 2 34 20 3 14 4 1 35 16 8 4 1 8 40 7 70 5 72 4 73 4 73 3 74 3 + 74 3 74 3 74 3 74 3 74 2 42 0 + + + + 7546.0 + + + 0.785714285714 + + + 3352.0 + + + 0.162887828162 + + + 1.50022573363 + + + 0.494904848637 0.463785276677 0.132134750663 0.176682930754 + 0.103823274838 0.00140006091291 -0.00686087875065 -0.00358078461239 + -0.00255364675027 + + + 77.0 + + + 1.16883116883 0.642857142857 + + + 1.09090909091 1.71428571429 1.19480519481 0.675324675325 + 0.163265306122 0.979591836735 0.530612244898 0.897959183673 + + + 98.0 + + + 26.0 73.0 0.185520361991 5.0 9.0 7.0 + + + 0.0 0.989795918367 + + + 0.444208852372 + + + 0.859649122807 0.795789473684 0.0 0.0 0.868421052632 0.877894736842 + 0.146929824561 0.197894736842 0.0416666666667 0.233684210526 + 0.951754385965 0.490526315789 0.0 0.27 0.920833333333 0.468 + + + 0.787037037037 0.842592592593 0.759259259259 0.700854700855 0.0 0.0 + 0.0 0.0 0.808333333333 0.991666666667 0.983333333333 0.738461538462 + 0.0 0.0 0.0 0.0 0.833333333333 1.0 0.990740740741 0.769230769231 + 0.0 0.0 0.0 0.0 0.758333333333 0.891666666667 0.933333333333 + 0.830769230769 0.258333333333 0.3 0.383333333333 0.369230769231 + 0.0916666666667 0.0666666666667 0.0 0.438461538462 1.0 + 0.891666666667 0.975 0.169230769231 0.0 0.0 0.0 0.461538461538 + 0.944444444444 0.972222222222 0.805555555556 0.0598290598291 0.0 + 0.0 0.0 0.507692307692 1.0 0.983333333333 1.0 0.146153846154 0.0 + 0.0 0.0 0.530769230769 0.833333333333 0.866666666667 0.733333333333 + 0.0538461538462 + + + 0.391308309025 0.193798941403 0.0293058234682 0.027901870393 + 0.0351663014745 0.378343552015 0.0674519995264 0.0294034922383 + 0.0339169552962 0.0262077131845 0.115218820034 0.246631385443 + 0.0944818666485 0.0474076349372 + + + + + + + + + 187 4 33 3 36 4 32 5 35 11 24 5 36 40 36 40 36 40 37 39 37 39 37 39 + 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 + 39 37 39 37 39 37 38 38 1 7 23 46 2 3 24 3 1 43 36 40 38 38 1 1 1 5 + 30 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 3 1 34 38 2 2 34 + 38 2 2 35 37 3 1 35 37 2 3 34 37 2 6 31 37 2 14 23 37 2 18 18 38 2 18 + 1 1 1 2 13 38 2 28 9 38 1 39 31 4 2 39 32 3 2 39 32 3 2 20 1 18 32 3 + 3 17 4 17 33 2 3 17 5 17 32 2 3 19 1 19 32 2 3 39 32 3 2 39 32 3 2 39 + 32 3 1 40 32 45 30 46 30 46 31 44 32 3 1 40 33 2 2 40 31 3 2 39 31 4 + 3 38 32 3 3 38 33 2 3 4 1 33 33 1 4 4 1 33 33 1 4 3 5 30 33 1 4 3 6 7 + 1 22 32 1 4 4 1 2 3 6 1 12 2 8 37 4 1 2 3 18 4 7 37 39 37 39 38 38 38 + 2 1 35 38 38 38 38 38 7 1 30 38 30 1 7 38 29 2 7 38 38 38 7 1 30 39 + 37 39 37 39 2 3 32 50 4 2 20 57 19 61 15 68 7 73 3 74 3 74 1 35 0 + + + + 7296.0 + + + 0.791666666667 + + + 3424.0 + + + 0.155081775701 + + + 0.67789034565 + + + 0.520700934579 0.494672282341 0.125001581179 0.176849069037 + -0.0934569967925 -0.00144341690301 0.00211757163948 + 0.000682478029409 -0.00144205120915 + + + 76.0 + + + 0.789473684211 0.697916666667 + + + 0.631578947368 0.894736842105 0.894736842105 0.736842105263 0.125 + 0.666666666667 1.29166666667 0.708333333333 + + + 96.0 + + + 13.0 64.0 0.157360406091 3.0 4.0 5.0 + + + 0.0208333333333 0.989583333333 + + + 0.469298245614 + + + 0.0 0.142543859649 0.901315789474 0.526315789474 0.109649122807 + 0.0526315789474 0.956140350877 0.787280701754 0.813596491228 + 0.967105263158 0.190789473684 0.197368421053 0.77850877193 + 0.905701754386 0.177631578947 0.00219298245614 + + + 0.0 0.0 0.0 0.361111111111 0.833333333333 0.768518518519 + 0.546296296296 0.185185185185 0.0 0.0 0.0 0.216666666667 1.0 + 0.983333333333 0.916666666667 0.425 0.0 0.0 0.0 0.0277777777778 + 0.898148148148 1.0 0.981481481481 0.537037037037 0.216666666667 0.2 + 0.116666666667 0.0583333333333 0.925 1.0 0.925 0.7 0.675925925926 + 1.0 0.861111111111 1.0 0.342592592593 0.37037037037 0.444444444444 + 0.388888888889 0.583333333333 1.0 1.0 1.0 0.0833333333333 0.0 0.0 + 0.0 0.583333333333 1.0 1.0 1.0 0.0833333333333 0.0 0.0 0.0 + 0.633333333333 0.9 0.741666666667 0.9 0.341666666667 0.258333333333 + 0.00833333333333 0.0 + + + 0.358764435111 0.191550283296 0.00407954979648 0.011436703876 + 0.0860367131232 0.351951957682 0.0714353545378 0.0247000417443 + 0.0270041826617 0.0212905464136 0.12285066493 0.220844708541 + 0.103401866909 0.0418121951974 + + + + + + + + + 3 2 26 4 24 5 24 6 24 5 24 5 24 7 22 9 21 8 21 6 22 10 1 1 18 12 16 + 14 15 6 2 7 14 15 14 16 13 17 12 18 11 18 11 19 10 20 9 21 8 21 8 22 + 7 23 6 24 5 24 5 25 4 4 1 14 1 5 5 2 2 12 3 5 4 10 1 7 2 5 4 4 1 5 1 + 8 1 4 5 10 1 13 5 9 2 12 6 10 1 12 6 9 2 12 6 10 1 13 5 24 5 24 5 23 + 6 17 1 5 6 4 1 4 1 7 2 4 6 4 2 1 4 6 3 2 7 4 7 5 4 2 7 2 9 4 5 2 7 9 + 2 4 4 5 5 17 1 7 3 6 1 19 3 5 3 18 3 5 4 7 1 1 1 7 3 5 5 7 1 8 3 5 6 + 15 3 5 7 14 3 4 9 13 3 4 9 13 3 4 10 12 3 4 11 11 3 4 12 10 3 3 14 9 + 4 2 14 9 4 2 16 7 4 2 18 1 2 2 3 3 21 1 4 4 16 6 2 6 15 6 4 3 16 6 4 + 3 18 4 3 4 18 4 4 4 17 4 3 6 16 3 4 6 16 4 3 6 23 9 20 11 18 13 17 13 + 15 15 14 16 13 17 12 19 10 20 9 21 8 22 8 22 7 24 5 25 4 25 4 25 4 26 + 3 26 3 3 5 9 3 6 3 3 8 4 14 3 4 9 13 4 1 13 2 4 5 26 3 26 3 26 3 11 1 + 14 3 10 2 7 1 6 3 10 3 5 2 6 3 10 3 5 2 6 3 10 3 5 2 6 4 5 1 3 3 5 2 + 6 3 5 2 3 4 3 3 6 3 5 2 3 4 2 4 6 3 6 1 11 2 6 3 26 3 26 3 26 3 10 3 + 13 3 26 3 26 3 27 3 4 2 19 4 4 3 18 4 4 5 16 4 4 6 15 4 4 7 14 4 4 9 + 13 3 4 10 11 4 4 11 10 4 4 13 1 2 5 4 4 14 1 3 3 4 4 17 4 4 5 15 6 3 + 5 16 5 3 5 17 4 3 5 17 4 3 5 17 3 5 4 24 5 25 4 25 4 25 4 25 4 25 4 + 25 5 24 4 25 5 24 5 24 5 24 5 25 4 24 6 23 6 24 5 24 5 24 5 24 3 1 1 + 25 2 28 1 28 1 28 1 28 1 21 0 + + + + 4466.0 + + + 0.188311688312 + + + 2268.0 + + + 0.310405643739 + + + 1.05914548023 + + + 0.461089065256 0.457706539406 0.0262320075972 0.624352248321 + 0.0106282616605 0.00087266680549 -0.0163960084999 0.00239860628625 + 0.0129659812112 + + + 29.0 + + + 4.0 0.675324675325 + + + 3.1724137931 4.96551724138 3.58620689655 4.0 0.415584415584 + 1.09090909091 0.753246753247 0.441558441558 + + + 154.0 + + + 19.0 65.0 0.237209302326 4.0 12.0 1.0 + + + 0.0 0.993506493506 + + + 0.507836990596 + + + 0.672932330827 0.6336996337 0.699248120301 0.413919413919 + 0.736842105263 0.340659340659 0.853383458647 0.18315018315 + 0.601503759398 0.454212454212 0.860902255639 0.124542124542 + 0.243421052632 0.509615384615 0.634868421053 0.25 + + + 0.298245614035 0.315789473684 0.508771929825 0.566666666667 + 0.438596491228 0.280701754386 0.0 0.0 0.947368421053 0.947368421053 + 0.75 0.6625 0.907894736842 1.0 0.947368421053 0.5125 0.614035087719 + 1.0 0.385964912281 0.25 0.859649122807 0.80701754386 0.175438596491 + 0.616666666667 0.486842105263 0.881578947368 0.552631578947 0.175 + 0.960526315789 0.776315789474 0.0394736842105 0.0 0.328947368421 + 1.0 0.921052631579 0.05 0.973684210526 0.881578947368 + 0.197368421053 0.0 0.0877192982456 0.947368421053 0.701754385965 + 0.166666666667 0.719298245614 0.824561403509 0.333333333333 0.0 0.0 + 0.789473684211 0.921052631579 0.4875 0.578947368421 0.894736842105 + 0.407894736842 0.0 0.0 0.184210526316 0.315789473684 0.325 + 0.302631578947 0.763157894737 0.618421052632 0.0 + + + 0.555670060679 0.183647240133 0.0151962546267 0.0116868796133 + 0.327244228593 0.452443464684 0.101379707798 0.0625765715258 + 0.0478762477061 0.0262511917451 0.10404024244 0.511221504456 + 0.278953325673 0.0601214645397 + + + + + + + + + 64 29 91 33 89 34 89 34 89 34 89 34 89 34 89 33 90 17 1 16 89 35 88 + 35 88 35 88 35 88 35 88 35 88 35 88 35 88 35 89 34 89 35 88 35 88 35 + 88 35 88 35 88 35 87 36 87 36 88 36 86 36 87 36 87 36 88 35 88 7 2 9 + 1 1 3 13 88 17 6 11 89 15 8 11 89 34 57 8 23 35 57 25 5 36 57 66 57 + 69 1 11 42 34 8 42 2 1 2 2 32 33 27 32 31 34 27 31 31 34 27 31 31 34 + 27 31 31 34 27 31 31 34 27 31 31 34 27 30 33 33 27 31 32 33 27 31 32 + 33 27 31 32 34 26 31 32 34 26 31 32 34 26 31 32 34 26 31 32 34 26 31 + 32 34 26 31 32 34 26 31 32 34 26 31 32 34 26 31 32 34 26 31 32 35 25 + 31 32 35 33 2 3 18 32 35 25 10 3 18 33 34 25 31 33 34 25 31 33 34 25 + 31 33 34 25 32 32 34 25 32 32 34 25 32 32 34 25 31 33 34 25 32 32 35 + 24 19 1 12 3 1 5 1 2 3 3 2 12 35 24 32 3 22 7 35 24 32 3 64 24 32 3 + 64 24 32 3 34 1 29 24 32 3 15 1 17 10 4 1 16 24 32 3 13 2 1 2 15 29 2 + 24 32 2 15 1 1 2 15 30 1 24 13 1 18 2 34 56 3 20 8 1 35 56 2 27 2 2 + 36 54 2 27 2 2 36 54 2 28 1 2 36 54 2 30 36 55 4 27 37 55 3 28 38 54 + 3 30 36 55 1 32 35 88 34 89 33 90 33 90 33 90 33 90 4 1 28 90 33 90 + 26 1 6 90 33 90 33 90 34 89 34 89 34 89 34 90 33 90 7 1 25 90 33 90 + 33 90 33 90 33 90 33 90 33 90 33 90 1 10 3 3 16 111 13 116 7 120 3 + 121 2 122 1 85 0 + + + + 14760.0 + + + 1.025 + + + 5486.0 + + + 0.1306963179 + + + 0.71190926276 + + + 0.508683803183 0.486975249451 0.205768749904 0.153901918867 + -0.0907099261922 0.00160718316656 -0.0200350879184 0.0371996482517 + -0.00423939670618 + + + 123.0 + + + 0.439024390244 0.741666666667 + + + 0.292682926829 0.227642276423 0.520325203252 0.552845528455 + 0.0333333333333 1.0 1.76666666667 0.166666666667 + + + 120.0 + + + 15.0 53.0 0.159144893112 3.0 2.0 4.0 + + + 0.0 0.991666666667 + + + 0.371680216802 + + + 0.0 0.0 0.491111111111 0.726666666667 0.0215053763441 + 0.758064516129 0.676344086022 0.202150537634 0.995698924731 + 0.424731182796 0.133333333333 0.0 0.0978494623656 0.697849462366 + 0.712903225806 0.0 + + + 0.0 0.0 0.0 0.0 0.0755555555556 0.871111111111 0.795555555556 0.44 + 0.0 0.0 0.0 0.0 0.0533333333333 0.964444444444 0.995555555556 + 0.675555555556 0.0 0.0 0.566666666667 0.95 0.891666666667 + 0.545833333333 0.404166666667 0.379166666667 0.0577777777778 + 0.0311111111111 0.515555555556 1.0 1.0 0.262222222222 0.0 0.0 + 0.986666666667 1.0 0.724444444444 0.24 0.342222222222 0.12 0.0 0.0 + 0.995833333333 1.0 0.679166666667 0.0625 0.0583333333333 0.025 0.0 + 0.0 0.151111111111 0.253333333333 0.56 1.0 0.942222222222 + 0.493333333333 0.0 0.0 0.0 0.0 0.308333333333 0.933333333333 0.9625 + 0.454166666667 0.0 0.0 + + + 0.387682693764 0.148792992594 0.108239208432 0.125404451828 + 0.00599637298663 0.239052192159 0.0547645264728 0.136560185565 + 0.219118335515 0.0904739130791 0.0481845140808 0.0978373587968 + 0.0772008669057 0.0445709719625 + + + + + + + + + 27 1 69 1 69 1 69 1 69 1 69 1 69 1 32 1 36 2 31 2 35 8 4 9 2 1 2 2 4 + 3 35 35 35 35 35 35 35 35 35 35 35 35 36 3 1 12 1 16 37 3 1 12 1 14 + 41 1 2 27 38 3 2 28 37 1 1 1 2 4 2 23 36 3 1 5 1 24 36 35 34 36 34 36 + 34 36 34 36 35 35 34 36 35 36 34 35 35 35 34 36 35 35 35 36 34 35 35 + 35 34 37 33 37 34 37 33 37 33 9 1 27 33 36 33 7 4 26 34 36 34 23 1 13 + 33 19 2 16 34 35 35 7 2 26 35 8 1 25 36 35 35 35 36 3 1 2 2 4 1 22 35 + 2 6 2 1 1 11 12 35 2 7 3 15 8 35 3 6 3 16 7 35 3 25 7 35 3 26 7 34 3 + 26 7 34 3 25 8 34 3 27 6 35 2 27 6 35 2 27 6 35 2 27 6 35 2 27 6 35 2 + 28 5 35 2 28 5 35 2 28 5 35 3 27 6 34 3 27 6 35 1 28 6 35 2 27 6 35 2 + 28 5 35 2 27 6 35 2 27 6 35 2 27 6 35 2 28 5 3 2 30 2 28 4 5 1 30 2 + 28 5 4 1 30 2 28 5 4 2 29 3 26 6 3 3 29 3 26 7 2 3 29 3 26 7 2 3 29 3 + 26 7 2 3 29 3 26 7 3 3 29 1 27 7 3 3 28 3 27 5 3 6 26 3 26 7 2 18 14 + 3 26 7 2 28 1 7 25 7 2 36 25 7 3 35 25 7 3 35 25 7 3 35 25 7 3 18 1 + 16 25 7 3 17 3 15 26 6 3 17 4 14 25 6 4 18 2 14 27 6 2 36 26 6 2 40 + 22 6 3 37 24 6 3 37 24 6 2 38 25 4 3 38 25 5 2 38 25 5 4 36 25 6 3 36 + 24 8 2 36 25 7 2 35 26 7 2 35 27 6 2 4 2 29 26 7 2 35 26 7 2 19 2 15 + 25 6 3 4 2 14 1 4 3 8 26 6 2 5 1 19 3 8 25 7 2 10 1 25 25 7 3 36 24 7 + 3 36 24 7 3 36 25 5 4 17 4 14 26 5 4 18 3 13 27 5 4 8 2 8 3 14 26 6 3 + 7 3 7 5 1 2 1 1 8 27 4 4 17 5 4 3 3 31 3 4 17 4 5 4 1 33 2 4 35 36 35 + 35 35 35 35 35 35 35 4 2 29 35 3 8 24 35 3 9 1 6 16 35 3 25 7 35 3 27 + 6 34 3 28 5 35 2 29 4 35 2 30 2 36 2 30 3 67 3 68 2 68 2 68 2 68 2 30 + 0 + + + + 10010.0 + + + 0.48951048951 + + + 3631.0 + + + 0.227210134949 + + + 0.684575479786 + + + 0.519001033771 0.506157850435 0.096634165415 0.432212920726 + -0.0984905411481 -0.00113711273551 -0.00380560006816 + 0.0194445442133 -0.029224285936 + + + 70.0 + + + 1.51428571429 1.04195804196 + + + 0.685714285714 2.28571428571 1.6 1.14285714286 0.475524475524 + 0.867132867133 1.45454545455 1.31468531469 + + + 143.0 + + + 20.0 118.0 0.176565008026 3.0 17.0 3.0 + + + 0.0 0.993006993007 + + + 0.362737262737 + + + 0.0 0.0 0.580065359477 0.549019607843 0.315873015873 0.243827160494 + 0.575617283951 0.623456790123 0.751260504202 0.46568627451 + 0.062091503268 0.176470588235 0.439682539683 0.513888888889 + 0.341049382716 0.149691358025 + + + 0.0 0.0 0.0 0.0 0.319444444444 0.895833333333 0.645833333333 + 0.284722222222 0.0 0.0 0.0 0.0 0.111111111111 1.0 0.962962962963 + 0.283950617284 0.0 0.0 0.0 0.0 0.0617283950617 0.938271604938 + 0.833333333333 0.351851851852 0.503267973856 0.753086419753 + 0.70987654321 0.265432098765 0.302469135802 1.0 0.895061728395 + 0.413580246914 0.5 0.979166666667 0.895833333333 0.0416666666667 + 0.00694444444444 0.256944444444 0.319444444444 0.430555555556 + 0.496732026144 1.0 0.925925925926 0.0 0.0 0.0 0.0 0.0 + 0.496732026144 0.993827160494 0.993827160494 0.135802469136 0.0 0.0 + 0.0 0.0 0.0522875816993 0.197530864198 0.364197530864 + 0.561728395062 0.672839506173 0.691358024691 0.598765432099 0.0 + + + 0.269302177164 0.252238892312 0.0234094122474 0.0627788427769 + 0.212231023876 0.400292422773 0.139675904416 0.0256321234715 + 0.131676742163 0.0589870616573 0.233737668029 0.185338114811 + 0.264421363029 0.0729559983993 + + + + + + + + + 14 1 29 1 26 6 6 3 14 7 6 4 16 4 4 3 19 4 4 7 16 1 7 8 15 2 5 2 1 4 + 272 1 28 3 28 1 29 3 26 6 24 6 24 6 24 5 25 4 26 5 26 1 1 2 26 3 27 4 + 25 0 + + + + 900.0 + + + 1.0 + + + 107.0 + + + 1.14018691589 + + + 0.315789473684 + + + 0.395101514663 0.458266194006 0.880999279209 0.921479490924 + -0.75763789516 0.263190495809 -0.161136202973 -0.00719572081503 + 0.192492404554 + + + 30.0 + + + 0.333333333333 0.266666666667 + + + 0.666666666667 0.0 0.266666666667 0.4 0.666666666667 0.266666666667 + 0.0 0.133333333333 + + + 30.0 + + + 5.0 4.0 0.263157894737 3.0 1.0 0.0 + + + 0.0 0.966666666667 + + + 0.118888888889 + + + 0.0 0.0 0.285714285714 0.642857142857 0.285714285714 0.0 0.0 0.0 + 0.204081632653 0.0357142857143 0.0 0.0 0.410714285714 0.09375 0.0 + 0.0 + + + 0.0 0.0 0.0 0.0 0.111111111111 0.75 1.0 0.666666666667 0.0 0.0 0.0 + 0.0 0.0 0.25 0.5625 0.4375 0.0 0.0625 0.0 0.0 0.0 0.0 0.0 0.0 0.5 + 0.5625 0.0 0.0 0.0 0.0 0.0 0.0 0.222222222222 0.5 0.166666666667 + 0.0 0.0 0.0 0.0 0.0 0.0 0.125 0.0 0.0 0.0 0.0 0.0 0.0 0.25 0.8125 + 0.1875 0.0 0.0 0.0 0.0 0.0 0.0 0.4375 0.1875 0.0 0.0 0.0 0.0 0.0 + + + 0.0456906565768 0.420741900598 0.126626403061 0.154971542775 + 0.374287097603 0.371370291029 0.283137460281 0.116975767754 + 0.209831187161 0.291407096625 0.0836624760276 0.191215761531 + 0.334683804127 0.113384078242 + + + + + + + + + 324 4 105 1 396 1 107 2 70 27 8 3 70 33 1 4 71 37 70 38 70 38 70 38 + 70 38 70 38 70 38 70 38 70 38 70 38 70 38 70 38 70 38 70 38 70 38 70 + 38 70 38 71 37 71 36 72 33 75 36 72 36 72 36 72 36 72 36 72 36 72 36 + 72 36 72 36 72 36 72 36 71 37 71 37 35 3 33 37 35 8 18 1 8 38 35 33 1 + 39 35 73 35 21 1 51 35 21 1 51 35 73 35 45 13 15 35 40 23 6 1 3 36 39 + 30 2 37 39 30 2 36 40 29 3 36 40 28 4 36 41 27 5 33 43 28 4 34 42 28 + 5 33 42 27 5 34 42 26 7 33 42 28 1 37 41 30 1 37 40 68 40 68 40 68 40 + 68 40 69 39 69 39 69 39 69 39 61 2 6 39 62 1 6 39 43 2 15 3 6 39 29 2 + 2 21 2 1 2 4 6 39 29 34 6 39 29 34 6 39 29 34 6 39 29 34 6 39 29 34 6 + 39 29 33 7 39 29 3 1 13 1 13 9 39 29 3 1 28 9 38 29 33 8 38 29 33 7 + 39 29 34 6 39 29 34 6 3 7 1 17 11 29 34 7 2 27 9 29 34 7 1 30 6 30 34 + 7 1 31 4 31 34 74 34 74 34 74 34 74 33 82 23 83 1 2 23 79 1 2 28 75 + 33 75 3 2 30 73 4 5 1 1 24 73 5 5 25 73 4 6 25 73 35 73 35 73 35 73 + 35 73 35 73 35 73 35 73 7 1 27 73 6 3 26 73 35 73 35 73 36 72 36 72 + 12 5 19 71 6 18 13 72 5 21 10 72 5 25 6 72 4 22 11 71 2 35 0 + + + + 13284.0 + + + 0.878048780488 + + + 4801.0 + + + 0.140387419288 + + + 1.24051324051 + + + 0.504452927447 0.523379692072 0.177758926948 0.184658220184 + 0.0616927951349 -0.00279867424042 0.037908792719 0.0378185239041 + -0.00364886129686 + + + 108.0 + + + 0.564814814815 0.552845528455 + + + 0.259259259259 0.111111111111 1.37037037037 0.518518518519 + 0.0650406504065 0.520325203252 1.07317073171 0.455284552846 + + + 123.0 + + + 6.0 34.0 0.219653179191 6.0 2.0 2.0 + + + 0.0243902439024 0.991869918699 + + + 0.361412225233 + + + 0.00617283950617 0.461170848268 0.794504181601 0.0 0.411111111111 + 0.643966547192 0.522102747909 0.0 0.561728395062 0.587813620072 + 0.20908004779 0.289127837515 0.0 0.0 0.481481481481 0.799283154122 + + + 0.025641025641 0.0 0.0528846153846 0.85641025641 0.825641025641 + 0.600961538462 0.0 0.0 0.0 0.0 0.0 0.990476190476 1.0 + 0.754464285714 0.0 0.0 0.0564102564103 0.14358974359 0.105769230769 + 0.994871794872 1.0 0.870192307692 0.0 0.0 0.4 1.0 1.0 + 0.471428571429 0.152380952381 0.129464285714 0.0 0.0 0.389743589744 + 1.0 1.0 0.379487179487 0.0 0.0 0.0 0.0 0.238095238095 + 0.638095238095 0.558035714286 0.404761904762 0.0809523809524 + 0.705357142857 0.542857142857 0.571428571429 0.0 0.0 0.0 0.0 + 0.0769230769231 0.995192307692 0.994871794872 0.663461538462 0.0 + 0.0 0.0 0.0 0.0619047619048 0.75 0.771428571429 0.78125 + + + 0.462580571001 0.0839415014848 0.112268372416 0.126188169987 + 0.0151648630308 0.134467914001 0.0327978930132 0.247833822656 + 0.345369266589 0.0503059770597 0.298989906191 0.0510033570848 + 0.0167508475848 0.0391775849421 + + + + + + + + + 41 1 44 1 16 3 11 6 1 3 44 3 3 14 3 18 44 41 45 39 45 40 45 41 44 41 + 44 41 44 41 44 41 44 42 43 42 43 41 43 42 43 42 43 42 43 42 44 40 45 + 41 44 41 44 41 44 35 50 3 3 31 49 40 45 3 2 35 45 40 45 41 44 41 44 + 41 43 42 44 40 45 40 45 20 1 19 45 7 1 32 45 40 45 40 45 40 45 39 46 + 39 39 1 6 39 38 2 6 40 24 7 3 5 6 55 6 18 6 28 1 26 6 18 7 2 1 5 24 + 23 4 19 40 22 5 18 40 21 6 18 41 19 6 19 41 20 4 20 41 21 3 20 41 21 + 3 20 41 21 3 20 41 21 3 20 41 21 3 21 40 22 1 20 42 22 2 22 39 22 2 + 24 36 23 2 24 35 24 2 24 37 21 3 23 39 20 3 23 39 20 3 23 39 20 3 22 + 40 20 3 21 40 21 3 21 41 7 2 11 3 21 41 4 1 15 3 21 41 20 3 21 40 21 + 3 21 40 21 4 20 40 22 2 21 40 22 2 21 41 21 3 20 41 20 4 20 41 20 4 + 20 41 21 3 20 41 21 2 21 41 21 2 21 40 45 40 45 41 20 4 20 41 20 3 20 + 42 43 42 19 3 20 43 18 18 5 45 4 42 0 + + + + 7310.0 + + + 0.988372093023 + + + 3485.0 + + + 0.144906743185 + + + 1.6328934967 + + + 0.483948213432 0.50646636847 0.149683608415 0.1608578196 + 0.109961591042 0.0043710866021 -0.0020769957768 -6.15375578445e-05 + -0.00172901283258 + + + 85.0 + + + 0.494117647059 0.674418604651 + + + 0.376470588235 0.705882352941 0.8 0.0941176470588 0.232558139535 + 0.372093023256 1.11627906977 0.93023255814 + + + 86.0 + + + 7.0 40.0 0.184668989547 2.0 2.0 2.0 + + + 0.0 0.988372093023 + + + 0.476744186047 + + + 0.87074829932 0.900432900433 0.0589569160998 0.0 0.913832199546 + 0.969696969697 0.278911564626 0.203463203463 0.00453514739229 + 0.0411255411255 0.84126984127 0.824675324675 0.0 0.0681818181818 + 0.874458874459 0.787190082645 + + + 0.69 0.936363636364 0.790909090909 0.790909090909 0.14 0.0 0.0 0.0 + 0.827272727273 1.0 1.0 1.0 0.109090909091 0.0 0.0 0.0 0.77 1.0 1.0 + 0.990909090909 0.09 0.0 0.0 0.0 0.872727272727 0.99173553719 + 0.917355371901 0.97520661157 0.545454545455 0.446280991736 + 0.404958677686 0.371900826446 0.0 0.0165289256198 0.0330578512397 + 0.0909090909091 1.0 1.0 0.97520661157 0.917355371901 0.0 0.0 0.0 + 0.0363636363636 0.57 0.754545454545 0.690909090909 0.690909090909 + 0.0 0.0 0.0 0.148760330579 1.0 1.0 1.0 0.818181818182 0.0 0.0 0.0 + 0.123966942149 0.636363636364 0.851239669421 0.727272727273 + 0.603305785124 + + + 0.348362147456 0.215060416614 0.0114969543883 0.0141090527975 + 0.0655018058075 0.366710525869 0.085867166846 0.0304115876201 + 0.0306819998998 0.0123570166513 0.0687966434533 0.180709019233 + 0.0752940102798 0.0596555052263 + + + + + + + + + 122 2 81 2 68 1 10 3 43 1 22 16 42 2 12 25 43 8 2 29 43 39 43 39 42 + 40 41 41 41 41 40 42 40 42 40 42 40 42 40 41 41 41 41 41 41 41 41 41 + 41 41 41 41 41 41 41 41 41 40 42 3 2 34 49 35 41 3 2 36 41 4 2 35 42 + 2 4 34 41 41 42 40 42 40 42 40 42 40 42 40 42 40 42 40 38 1 3 40 37 2 + 3 17 2 21 37 2 3 40 37 2 3 39 23 2 12 3 4 39 10 5 5 5 3 11 4 53 6 5 3 + 11 4 54 5 19 4 53 6 19 4 31 1 21 6 19 4 19 16 19 5 19 4 5 30 19 4 20 + 4 3 32 20 3 20 4 3 32 17 6 20 5 1 33 20 3 20 5 1 33 20 3 20 5 1 33 43 + 4 4 29 45 4 3 31 22 1 22 4 1 32 21 3 22 36 21 3 21 36 46 35 23 3 21 + 35 24 1 22 36 23 1 22 37 22 1 15 5 1 38 22 1 18 2 1 38 21 2 21 38 20 + 3 21 38 6 1 13 3 21 39 1 1 1 2 15 2 21 41 18 1 22 38 21 2 21 37 22 1 + 22 37 44 39 1 2 18 2 20 39 21 2 20 38 21 4 20 38 22 1 21 37 22 3 20 + 37 22 3 20 37 23 1 21 39 21 1 21 40 20 1 21 40 20 2 20 42 41 40 15 5 + 22 40 15 6 21 40 8 21 1 2 9 41 3 36 3 41 1 37 3 79 3 79 3 79 2 80 2 + 80 2 80 2 81 1 2 0 + + + + 7872.0 + + + 0.854166666667 + + + 3542.0 + + + 0.158949745906 + + + 1.49181703735 + + + 0.488644206036 0.480858272163 0.144631664416 0.151438268123 + 0.100871293595 0.00413520567824 0.00138955784761 0.00277365834374 + -0.0013455931601 + + + 82.0 + + + 0.80487804878 0.802083333333 + + + 0.731707317073 0.682926829268 1.21951219512 0.390243902439 + 0.166666666667 0.833333333333 1.5 0.708333333333 + + + 96.0 + + + 14.0 52.0 0.205063291139 7.0 8.0 4.0 + + + 0.0104166666667 0.989583333333 + + + 0.449949186992 + + + 0.73125 0.916666666667 0.0833333333333 0.0 0.825396825397 + 0.990079365079 0.230158730159 0.125 0.0375 0.129166666667 0.8875 + 0.533333333333 0.0 0.200396825397 0.906746031746 0.589285714286 + + + 0.416666666667 1.0 0.825 0.858333333333 0.25 0.0 0.0 0.0 + 0.508333333333 1.0 1.0 0.983333333333 0.0833333333333 0.0 0.0 0.0 + 0.616666666667 1.0 1.0 1.0 0.00833333333333 0.0 0.0 0.0 + 0.681818181818 1.0 0.977272727273 0.984848484848 0.416666666667 + 0.454545454545 0.409090909091 0.0681818181818 0.116666666667 + 0.0333333333333 0.0 0.333333333333 1.0 0.983333333333 1.0 0.225 0.0 + 0.0 0.0 0.183333333333 0.741666666667 0.825 0.833333333333 0.075 + 0.0 0.0 0.0 0.383333333333 1.0 1.0 1.0 0.175 0.0 0.0 0.0 + 0.416666666667 0.856060606061 0.787878787879 0.80303030303 + 0.378787878788 + + + 0.4623927218 0.167903262108 0.0177196093017 0.0100057517712 + 0.0486896636122 0.377095375009 0.0561147463537 0.0319357968988 + 0.0252392225878 0.0119835210111 0.16351428253 0.302547185695 + 0.0894011324313 0.0394716888207 + + + + + + + + + 2 1 1 1 1 1 1 5 1 1 3 1 3 1 1 36 2 2 2 1 1 0 + + + + 68.0 + + + 0.235294117647 + + + 50.0 + + + 1.08 + + + 0.994708994709 + + + 0.513333333333 0.53875 0.023368 0.363112 0.008504 -0.00053817048588 + 0.00209629442036 0.000440058005777 -0.0666030778562 + + + 4.0 + + + 0.75 0.117647058824 + + + 1.0 1.0 0.0 1.0 0.470588235294 0.0 0.0 0.0 + + + 17.0 + + + 8.0 2.0 0.0869565217391 0.0 5.0 1.0 + + + 0.0 0.941176470588 + + + 0.735294117647 + + + 0.75 0.5 1.0 0.6 0.25 0.5 1.0 0.6 1.0 1.0 1.0 1.0 0.25 0.5 1.0 0.8 + + + 0.5 1.0 0.0 1.0 1.0 1.0 1.0 0.333333333333 0.5 1.0 0.0 1.0 1.0 1.0 + 1.0 0.333333333333 0.0 0.5 0.0 1.0 1.0 1.0 1.0 0.333333333333 0.0 + 0.5 0.0 1.0 1.0 1.0 1.0 0.333333333333 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.0 1.0 1.0 1.0 1.0 + 0.666666666667 0.0 0.5 0.0 1.0 1.0 1.0 1.0 0.666666666667 + + + 0.469410776027 0.213670427051 0.134860160266 0.0463690181404 + 0.373945859882 0.308300008973 0.160361903459 0.0735977863328 + 0.0737566798764 0.0636967585577 0.347923240584 0.227063530747 + 0.225666156833 0.119745739146 + + + + + + + + + 130 1 231 1 230 2 230 2 194 1 35 2 194 6 4 2 13 3 7 3 110 1 1 1 81 32 + 1 5 110 3 81 38 110 5 79 38 110 5 80 37 110 6 79 37 110 7 78 37 110 8 + 77 37 110 9 76 37 110 9 76 37 110 9 76 37 110 9 76 37 110 10 75 37 + 110 10 75 37 110 10 75 37 110 10 75 37 110 9 77 36 110 10 3 2 71 36 + 109 17 70 36 109 16 12 2 57 37 108 15 13 3 56 37 108 15 13 4 54 39 + 108 20 7 4 1 2 51 39 25 3 73 3 3 20 8 13 1 1 43 38 25 4 71 28 5 18 44 + 37 24 8 69 3 2 22 2 20 45 38 23 8 69 4 2 22 2 12 3 6 44 38 21 10 68 4 + 1 22 9 3 2 1 52 37 23 11 67 27 10 21 36 37 23 13 65 17 1 8 7 2 3 25 + 32 36 23 14 64 5 3 9 1 9 8 2 3 23 32 36 22 16 64 3 3 10 1 10 13 24 30 + 29 4 1 23 18 63 3 3 21 13 28 27 28 4 3 22 18 63 2 3 21 13 34 21 20 1 + 14 22 20 61 2 4 29 4 36 18 37 20 22 60 2 4 15 2 13 6 36 15 36 20 23 + 60 2 3 4 1 23 9 40 11 7 2 27 20 25 58 2 3 3 2 16 1 8 8 41 9 36 20 26 + 57 2 3 2 3 27 5 45 5 37 20 27 56 2 3 3 1 28 2 51 1 38 20 28 55 2 3 + 125 19 29 54 2 3 124 19 31 53 1 4 50 2 6 2 62 21 32 52 2 3 19 3 36 2 + 33 1 11 1 2 7 1 2 3 22 33 51 2 3 2 3 2 1 12 3 11 1 17 1 1 1 2 10 26 + 50 34 50 2 3 2 7 1 2 8 5 8 3 20 10 27 50 34 50 2 3 2 14 3 8 7 2 22 13 + 22 49 36 49 2 21 1 9 5 3 24 12 18 52 30 3 3 49 2 23 4 5 29 15 17 52 + 29 4 3 49 1 25 38 5 3 7 19 50 28 5 2 75 8 4 38 2 20 50 28 5 3 74 16 5 + 30 2 19 51 27 4 3 49 2 26 15 1 2 3 49 51 28 3 3 49 2 28 9 6 2 6 45 52 + 26 4 3 49 4 31 7 16 40 56 22 3 2 51 5 31 15 8 39 57 22 21 3 33 3 32 + 16 10 35 58 23 19 5 31 3 36 14 12 31 59 21 20 6 28 5 36 9 2 9 10 27 + 60 18 22 6 28 1 1 3 37 12 1 4 15 24 60 17 23 7 30 1 45 7 21 21 59 16 + 23 11 28 1 48 8 1 12 4 21 47 1 2 3 3 20 22 12 26 2 43 4 6 4 16 21 47 + 30 21 12 24 5 42 6 5 5 14 21 47 34 17 12 24 4 46 3 2 3 20 20 47 37 13 + 13 24 5 45 1 27 20 50 34 13 15 22 4 47 6 21 21 51 31 14 15 22 4 51 18 + 1 25 52 29 14 13 1 3 21 4 46 49 53 29 13 18 3 1 17 3 47 47 55 28 13 + 18 3 2 15 4 52 42 56 26 14 18 4 2 14 3 54 42 56 25 14 17 22 2 57 39 + 58 23 14 18 3 5 13 2 60 36 58 21 15 20 1 7 12 2 65 31 65 14 15 20 1 5 + 14 2 67 29 66 3 1 9 15 30 10 2 72 24 72 7 15 32 8 2 76 20 72 3 2 2 15 + 32 8 2 78 18 65 13 15 34 7 2 81 16 65 13 13 36 5 3 83 14 64 14 13 38 + 3 4 83 13 67 11 11 40 4 3 85 11 68 10 11 40 4 2 87 10 69 10 10 39 5 2 + 87 1 1 7 71 7 12 39 5 2 89 7 71 7 12 39 6 1 170 2 15 37 6 3 186 37 5 + 4 186 37 6 2 187 37 6 2 186 38 6 2 186 38 7 1 186 37 8 1 186 26 2 9 7 + 2 186 17 1 9 1 8 9 1 189 3 3 7 3 17 9 1 189 2 5 6 3 7 1 9 9 1 188 4 4 + 6 4 15 9 2 189 3 6 3 6 13 11 2 195 8 1 15 11 2 195 8 1 15 11 1 200 3 + 2 4 9 2 11 1 219 1 11 1 908 2 230 3 229 3 229 3 229 4 226 7 225 7 225 + 7 225 7 225 7 225 7 226 6 227 4 229 4 230 2 230 1 10 0 + + + + 29464.0 + + + 1.82677165354 + + + 7444.0 + + + 0.242880171951 + + + 1.42224833529 + + + 0.490763356293 0.426832518786 0.550832820644 0.0824798950849 + 0.10838264943 0.0361715211257 0.0244354822641 0.0642501638487 + 0.00516156871929 + + + 232.0 + + + 1.2974137931 2.77952755906 + + + 2.27586206897 1.56896551724 0.51724137931 0.827586206897 + 1.48031496063 4.88188976378 3.68503937008 0.913385826772 + + + 127.0 + + + 23.0 151.0 0.250797024442 35.0 2.0 11.0 + + + 0.0 0.992125984252 + + + 0.252647298398 + + + 0.199666295884 0.613685344828 0.0813577586207 0.010775862069 + 0.308676307008 0.653556034483 0.39224137931 0.0 0.234149054505 + 0.484913793103 0.185344827586 0.0 0.0 0.100754310345 0.549568965517 + 0.219288793103 + + + 0.124137931034 0.512931034483 0.797413793103 0.230603448276 + 0.114224137931 0.0818965517241 0.0431034482759 0.0 0.0 + 0.144396551724 0.70474137931 0.721982758621 0.129310344828 0.0 0.0 + 0.0 0.0 0.0 0.573275862069 0.760775862069 0.640086206897 + 0.101293103448 0.0 0.0 0.48275862069 0.743534482759 0.75 + 0.530172413793 0.495689655172 0.331896551724 0.0 0.0 0.340229885057 + 0.538793103448 0.536637931034 0.0387931034483 0.0 0.0 0.0 0.0 0.0 + 0.0495689655172 0.637931034483 0.726293103448 0.648706896552 + 0.0926724137931 0.0 0.0 0.0 0.0 0.0754310344828 0.310344827586 + 0.428879310345 0.497844827586 0.157327586207 0.0 0.0 0.0 0.0 + 0.0172413793103 0.359913793103 0.911637931034 0.560344827586 + 0.159482758621 + + + 0.431835664686 0.213133187038 0.100105068197 0.0692475714569 + 0.269941018615 0.294952473565 0.15688155564 0.166334443659 + 0.061512673865 0.0822161174994 0.250657845926 0.145490756073 + 0.290975582732 0.108007060205 + + + + + + + + + 2 1 65 2 64 2 63 4 62 5 61 4 62 5 61 5 60 7 59 7 60 5 62 4 61 7 27 2 + 30 17 3 4 1 11 30 36 30 36 30 36 30 36 30 35 31 36 30 36 30 36 30 36 + 30 35 31 35 31 35 31 35 32 34 32 34 31 35 31 35 31 36 30 36 31 35 31 + 25 1 3 36 7 2 26 32 5 3 26 32 7 1 26 31 35 31 35 31 35 31 34 32 34 32 + 34 32 34 32 34 32 34 32 34 32 34 32 34 32 34 32 34 32 34 33 33 33 33 + 33 5 10 6 3 9 33 4 27 2 33 3 28 2 32 4 28 1 33 4 28 1 33 4 28 2 33 3 + 28 2 32 4 28 2 31 5 28 2 31 7 26 3 31 5 26 4 31 4 27 4 31 5 26 5 30 5 + 26 5 30 5 26 5 30 5 26 3 2 1 30 4 26 2 29 1 4 4 26 2 29 1 4 3 27 2 29 + 1 4 3 28 1 29 1 34 2 28 2 34 2 28 2 34 26 4 2 34 32 34 32 34 32 34 32 + 34 32 34 32 34 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 33 33 33 33 33 39 22 38 27 39 33 34 32 33 33 33 33 33 34 + 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 + 33 33 33 33 34 31 34 33 33 32 22 2 10 1 1 30 7 3 2 1 1 2 1 1 2 4 4 3 + 5 30 7 3 1 12 5 3 4 31 7 18 3 3 3 33 5 25 4 32 4 27 2 34 2 28 2 34 2 + 27 5 32 3 26 4 33 2 27 4 62 4 62 3 64 2 2 0 + + + + 8844.0 + + + 0.492537313433 + + + 3226.0 + + + 0.18319900806 + + + 1.65451664025 + + + 0.489961371548 0.504118324329 0.102115422686 0.401219386548 + 0.152424224313 -0.00112060952341 0.00185869484676 0.00106361556643 + 0.00385959014107 + + + 66.0 + + + 0.848484848485 0.410447761194 + + + 0.909090909091 0.424242424242 1.0303030303 0.727272727273 + 0.089552238806 0.477611940299 0.477611940299 0.567164179104 + + + 134.0 + + + 8.0 38.0 0.180602006689 6.0 1.0 2.0 + + + 0.0 0.992537313433 + + + 0.364767073722 + + + 0.674242424242 0.680147058824 0.0643939393939 0.0 0.598930481283 + 0.667820069204 0.0802139037433 0.107266435986 0.138257575758 + 0.137867647059 0.729166666667 0.698529411765 0.0 0.0 0.602495543672 + 0.667820069204 + + + 0.6171875 0.860294117647 0.838235294118 0.625 0.265625 0.0 0.0 0.0 + 0.1875 1.0 0.963235294118 0.294117647059 0.0 0.0 0.0 0.0 0.1640625 + 1.0 1.0 0.338235294118 0.0 0.0 0.0 0.0 0.180555555556 1.0 + 0.980392156863 0.352941176471 0.104166666667 0.196078431373 + 0.21568627451 0.18954248366 0.109375 0.433823529412 0.294117647059 + 0.257352941176 0.5390625 0.970588235294 1.0 0.470588235294 0.0 0.0 + 0.0 0.0 0.375 1.0 1.0 0.323529411765 0.0 0.0 0.0 0.0 0.375 1.0 1.0 + 0.352941176471 0.0 0.0 0.0 0.0 0.319444444444 0.705882352941 + 0.78431372549 0.535947712418 + + + 0.390523550117 0.239448494218 0.00855472275516 0.00385500872394 + 0.0486357854409 0.493632102819 0.13049684143 0.0129800066139 + 0.0185548599912 0.00307499720348 0.22538158463 0.391148104194 + 0.292407914993 0.0737628783333 + + + + + + + + + 37 1 39 1 39 1 39 1 38 2 6 4 2 1 4 4 5 2 2 3 4 4 4 36 4 36 4 36 4 35 + 5 35 4 36 4 36 4 36 4 36 4 36 5 35 5 35 5 36 4 28 1 7 4 37 2 78 1 39 + 2 38 2 38 2 37 3 37 3 37 4 36 4 36 4 36 4 35 5 35 6 35 5 35 5 35 5 35 + 5 35 5 35 5 35 4 36 4 36 5 35 5 35 5 35 5 35 5 35 17 23 36 4 38 2 1 0 + + + + + 2040.0 + + + 0.78431372549 + + + 1563.0 + + + 0.131158029431 + + + 0.999199679872 + + + 0.528503699329 0.529110684581 0.0700939177182 0.100101826764 + 0.00372641211453 -0.000401279946392 0.00156912582157 + -0.000650367978133 0.000390232007515 + + + 40.0 + + + 0.125 0.117647058824 + + + 0.2 0.0 0.0 0.3 0.392156862745 0.078431372549 0.0 0.0 + + + 51.0 + + + 1.0 6.0 0.141414141414 0.0 3.0 10.0 + + + 0.0 0.980392156863 + + + 0.766176470588 + + + 0.391666666667 0.784615384615 0.7 0.476923076923 0.541666666667 1.0 + 1.0 0.8 0.533333333333 1.0 1.0 0.846153846154 0.516666666667 + 0.884615384615 0.892307692308 0.807692307692 + + + 0.0333333333333 0.433333333333 0.514285714286 0.633333333333 + 0.533333333333 0.285714285714 0.266666666667 0.114285714286 0.1 1.0 + 1.0 1.0 1.0 1.0 1.0 0.571428571429 0.0333333333333 1.0 1.0 1.0 1.0 + 1.0 1.0 0.571428571429 0.133333333333 1.0 1.0 1.0 1.0 1.0 1.0 + 0.685714285714 0.0333333333333 1.0 1.0 1.0 1.0 1.0 1.0 + 0.714285714286 0.1 1.0 1.0 1.0 1.0 1.0 1.0 0.714285714286 + 0.0333333333333 1.0 1.0 0.966666666667 1.0 1.0 1.0 0.714285714286 + 0.333333333333 0.7 0.628571428571 0.966666666667 0.833333333333 + 0.742857142857 0.8 0.742857142857 + + + 0.440674607977 0.0467125073274 0.00909442093132 0.0142383784042 + 0.00829896691737 0.0764006576427 0.0590161438351 0.00264814505825 + 0.0149360095882 0.00481980069701 0.186784992682 0.0136954008325 + 0.113409915547 0.0363689818523 + + + + + + + + + 160 1 165 1 165 1 165 2 164 2 164 2 164 2 164 2 36 1 3 1 123 2 36 1 3 + 4 120 2 36 2 2 5 119 2 36 2 2 6 85 4 29 2 37 1 2 7 84 30 2 3 37 2 2 7 + 83 35 37 13 81 35 37 13 81 35 37 16 78 35 37 10 4 1 79 35 37 10 3 3 + 78 35 7 1 29 10 1 6 77 36 6 1 29 19 4 2 69 36 6 2 28 21 1 5 67 36 6 2 + 28 25 70 35 5 3 28 18 4 5 68 35 5 3 28 18 4 7 66 35 5 3 28 19 4 7 65 + 35 5 3 29 19 2 11 7 1 54 35 5 4 28 20 1 7 1 5 3 2 55 35 5 3 29 28 2 + 10 3 2 49 35 5 3 29 48 46 35 5 3 29 20 1 28 45 35 4 5 28 20 2 3 3 24 + 42 35 4 5 28 19 11 24 41 34 4 5 29 18 13 23 40 16 1 18 2 6 29 19 1 5 + 9 25 35 36 1 6 27 28 8 28 31 37 2 5 28 21 1 7 6 26 34 35 3 6 28 30 3 + 27 34 36 2 6 27 33 2 27 32 37 1 8 26 23 1 40 30 37 1 6 1 1 27 7 2 58 + 26 38 2 4 29 70 24 36 3 3 30 70 25 35 4 2 31 19 2 50 23 20 2 13 4 2 + 31 15 2 2 2 53 20 35 4 2 31 15 2 2 2 9 4 43 17 35 4 6 26 5 1 10 6 4 2 + 2 1 49 15 35 3 28 3 20 6 2 4 52 13 35 3 38 1 13 7 58 11 35 3 37 4 3 3 + 2 2 2 9 20 7 30 10 34 3 36 11 1 3 6 6 20 4 34 8 34 3 36 11 1 3 8 6 18 + 4 36 6 34 3 36 8 3 6 8 5 20 1 38 4 34 3 36 18 2 1 10 1 95 3 36 20 20 + 1 55 16 4 1 10 4 35 23 13 1 5 2 5 3 43 31 2 3 35 25 11 5 5 9 40 31 1 + 4 35 27 10 5 5 4 2 1 41 36 35 30 8 7 24 5 21 35 36 32 9 5 49 35 36 35 + 7 6 47 35 36 37 6 5 48 34 37 37 8 4 46 35 36 40 6 5 21 1 22 35 36 41 + 7 6 19 1 21 35 36 43 6 1 2 3 40 35 36 45 7 4 18 1 20 35 36 48 5 7 14 + 1 20 35 36 50 4 8 33 35 36 53 5 1 2 3 31 35 5 1 30 54 41 35 36 54 42 + 34 36 56 12 1 18 1 8 33 38 58 11 3 10 1 3 3 6 33 38 58 28 4 5 33 38 + 60 11 2 22 33 38 62 9 3 21 34 37 62 33 34 37 63 10 2 21 33 37 76 20 + 33 37 76 20 33 37 70 3 3 20 33 37 69 5 2 20 33 38 68 27 33 38 68 7 1 + 19 33 38 69 26 33 38 72 1 5 18 32 38 78 18 32 8 6 4 4 16 76 20 32 4 + 29 5 78 18 32 3 31 4 81 15 32 3 31 4 83 13 32 3 31 4 86 10 32 3 31 4 + 87 10 30 5 30 6 86 9 30 6 28 8 87 8 29 5 30 6 89 8 29 3 31 6 89 8 29 + 3 31 7 88 8 29 3 31 7 88 9 62 6 89 9 64 4 90 7 65 3 94 3 66 3 95 2 67 + 2 96 1 67 2 124 0 + + + + 17596.0 + + + 1.56603773585 + + + 6659.0 + + + 0.192371226911 + + + 0.73977311791 + + + 0.503373424893 0.491711182145 0.376544356302 0.0673175738612 + -0.0404058687722 -0.0144288599501 0.00211255341586 + -6.4354788844e-05 0.00271549909207 + + + 166.0 + + + 1.17469879518 2.43396226415 + + + 0.602409638554 1.97590361446 1.5421686747 0.530120481928 + 1.54716981132 3.7358490566 2.64150943396 1.62264150943 + + + 106.0 + + + 29.0 155.0 0.238702201622 13.0 5.0 14.0 + + + 0.0 0.990566037736 + + + 0.378438281428 + + + 0.135084427767 0.40379403794 0.883677298311 0.420054200542 + 0.126373626374 0.813051146384 0.129120879121 0.0202821869489 0.0 + 0.43450767841 0.771106941839 0.0975609756098 0.472527472527 + 0.840388007055 0.277472527473 0.223985890653 + + + 0.0 0.0576923076923 0.230769230769 0.507142857143 0.873076923077 + 0.861538461538 0.669230769231 0.110714285714 0.0989010989011 + 0.373626373626 0.326007326007 0.530612244898 0.871794871795 + 0.92673992674 0.787545787546 0.15306122449 0.010989010989 + 0.490842490842 0.882783882784 0.710884353741 0.03663003663 0.0 0.0 + 0.078231292517 0.0 0.003663003663 0.739926739927 0.918367346939 + 0.479853479853 0.0 0.0 0.0 0.0 0.0 0.292307692308 0.921428571429 + 0.834615384615 0.307692307692 0.0 0.0 0.0 0.0 0.0 0.5 + 0.974358974359 0.948717948718 0.395604395604 0.0 0.0805860805861 + 0.842490842491 0.791208791209 0.731292517007 0.494505494505 + 0.479853479853 0.593406593407 0.312925170068 0.131868131868 + 0.835164835165 0.89010989011 0.948979591837 0.135531135531 0.0 0.0 + 0.0 + + + 0.315418145996 0.230246670169 0.0315315849664 0.0174940752747 + 0.00431627970918 0.330536663582 0.130929550387 0.0502270009667 + 0.0124186923842 0.0241274692211 0.143486677934 0.246030556432 + 0.189624784529 0.0877734970725 + + + + + + + + + 2 1 2 3 3 2 3 2 3 3 2 3 2 3 2 4 + + + + 40.0 + + + 0.625 + + + 21.0 + + + 1.42857142857 + + + 1.05 + + + 0.464285714286 0.585034013605 0.0421120829284 0.2353957456 + 0.0414642047295 0.00248422421204 -0.00129933678299 0.00465876193695 + -0.0285405271263 + + + 5.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 8.0 + + + 1.0 3.0 0.363636363636 0.0 2.0 1.0 + + + 0.0 0.875 + + + 0.525 + + + 0.5 0.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.5 0.75 + + + 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 + + + 0.305149133671 0.246233923395 0.123984326017 0.0743095539199 + 0.184239926015 0.234553539097 0.116833857633 0.0513615419865 + 0.088579101281 0.112129776061 0.13600041917 0.128526586991 + 0.13780457073 0.0421605158417 + + + + + + + + + 30 2 169 3 168 5 167 6 167 5 167 5 167 7 165 8 164 9 163 11 161 12 + 160 13 159 15 157 16 156 17 155 18 154 19 153 20 152 20 152 20 152 18 + 154 18 154 18 154 17 156 16 156 3 3 11 155 3 3 11 155 3 3 12 6 1 147 + 3 2 13 4 5 145 3 2 14 3 5 145 3 2 14 3 6 144 3 3 14 3 5 144 4 2 14 4 + 4 144 20 152 20 2 1 112 3 34 20 1 5 107 5 34 9 1 9 2 6 77 8 1 25 34 + 20 1 7 5 2 69 34 35 19 2 8 3 3 68 34 35 19 2 9 3 2 68 34 35 16 5 11 1 + 7 63 34 35 1 3 12 6 18 63 34 35 17 5 12 2 4 63 34 35 34 69 34 35 35 + 69 33 35 35 69 34 34 37 67 34 34 20 1 2 2 4 7 1 67 34 36 2 1 23 9 1 + 66 34 37 30 2 5 64 34 38 11 17 2 2 6 62 34 38 11 17 3 1 7 61 34 39 4 + 1 5 18 11 17 1 42 34 39 3 3 5 16 13 11 8 40 34 40 3 3 5 1 4 1 1 9 13 + 11 8 39 34 41 1 5 13 8 13 12 7 38 34 35 2 4 2 4 14 8 5 2 7 10 15 30 + 35 1 1 31 7 7 2 1 3 7 25 7 16 29 36 33 5 16 2 3 6 3 8 1 2 1 4 7 13 32 + 36 33 4 17 5 11 7 2 6 9 9 33 36 32 5 17 5 13 14 10 9 2 1 28 36 32 5 + 18 3 16 12 11 12 28 35 31 5 20 1 18 12 11 13 25 19 2 9 4 2 30 2 1 2 + 22 1 19 10 12 12 26 19 3 7 4 2 56 2 20 11 11 12 25 29 4 1 80 34 24 21 + 1 4 89 35 23 17 99 32 24 18 4 2 93 35 20 7 1 10 3 5 4 1 1 1 85 35 19 + 17 2 14 88 16 2 16 17 7 3 7 3 13 3 1 89 31 15 34 1 26 8 1 52 37 13 34 + 1 31 1 3 53 37 12 32 1 1 2 34 52 40 10 31 5 34 52 42 8 31 5 34 56 40 + 7 30 5 34 58 6 6 27 6 28 7 34 59 8 1 32 2 3 33 34 59 26 1 18 34 34 60 + 25 1 18 34 34 61 22 3 18 34 34 65 8 2 5 6 18 34 35 65 8 12 18 34 35 + 67 8 10 6 2 10 34 35 68 9 8 6 2 11 33 35 69 10 5 7 1 12 33 35 70 11 4 + 4 4 11 33 35 71 11 3 5 3 11 33 35 72 10 3 6 1 11 34 35 73 7 1 2 1 20 + 34 34 74 7 3 20 34 34 76 6 3 20 33 34 77 6 2 20 33 34 79 26 33 4 1 29 + 80 25 33 35 80 14 2 8 33 35 71 5 5 23 33 35 71 8 4 21 33 35 72 9 3 20 + 33 35 72 10 2 20 33 35 73 9 2 20 33 35 78 5 1 20 33 35 74 31 32 35 73 + 32 32 36 73 31 32 36 75 29 32 36 76 7 1 20 32 36 80 3 2 19 32 36 79 + 25 33 35 81 23 33 35 82 7 1 15 32 35 87 2 1 15 32 2 20 13 90 15 32 2 + 27 6 88 17 65 2 90 15 65 2 91 14 65 3 91 14 63 4 94 12 63 3 95 10 64 + 3 95 10 64 4 96 9 63 3 97 8 64 4 101 4 169 1 29 0 + + + + 21500.0 + + + 1.376 + + + 5864.0 + + + 0.232605729877 + + + 0.851600052312 + + + 0.496484646131 0.565220261409 0.496840708416 0.121770630425 + -0.012097400786 -0.00964708148935 -0.0252428154182 0.0136576711585 + -0.00912377036562 + + + 172.0 + + + 1.3023255814 1.968 + + + 0.837209302326 1.60465116279 1.76744186047 1.0 0.32 3.2 2.88 1.472 + + + 125.0 + + + 24.0 116.0 0.272608125819 20.0 1.0 7.0 + + + 0.0 0.992 + + + 0.272744186047 + + + 0.247561890473 0.210052513128 0.543885971493 0.546511627907 + 0.0735183795949 0.423105776444 0.046511627907 0.0 0.0 + 0.0742685671418 0.585896474119 0.205668604651 0.0 0.675918979745 + 0.461365341335 0.271802325581 + + + 0.0 0.0 0.0 0.0 0.366071428571 0.946031746032 0.901785714286 + 0.229166666667 0.387878787879 0.573863636364 0.539393939394 + 0.289772727273 0.238636363636 0.666666666667 0.730113636364 + 0.326704545455 0.0190476190476 0.27380952381 0.692063492063 + 0.467261904762 0.0119047619048 0.0 0.0 0.0 0.0 0.0 0.0878787878788 + 0.454545454545 0.164772727273 0.0 0.0 0.0 0.0 0.0 0.0 + 0.291666666667 0.809523809524 0.225396825397 0.0 0.0 0.0 0.0 0.0 + 0.00284090909091 0.5625 0.727272727273 0.696022727273 + 0.107954545455 0.0 0.0 0.498412698413 0.71130952381 0.630952380952 + 0.498412698413 0.583333333333 0.529761904762 0.0 0.0 0.572727272727 + 0.897727272727 0.698863636364 0.0 0.0 0.0 + + + 0.16848092388 0.238911296303 0.0729867605493 0.0573414302014 + 0.192418767874 0.31598706973 0.167512440076 0.104873654614 + 0.0970594420259 0.0716058159474 0.10066310568 0.240232615404 + 0.166269476789 0.179566726307 + + + + + + + + + 4 1 20 2 3 2 14 4 1 2 3 5 7 8 1 6 9 1 3 6 16 6 16 5 41 1 19 5 17 4 18 + 4 17 6 16 5 14 7 14 2 1 1 1 3 13 3 1 5 13 3 1 1 17 6 16 3 1 3 15 3 1 + 5 13 3 1 5 4 7 2 3 1 6 3 6 3 6 1 13 3 3 4 12 3 4 8 1 1 4 4 4 9 4 5 4 + 9 3 6 4 7 4 7 4 7 4 7 3 19 4 17 5 17 5 17 4 19 3 18 4 18 5 17 5 17 5 + 18 5 17 5 17 5 17 4 20 1 21 1 19 3 19 3 19 3 19 1 1 1 17 5 16 2 1 3 + 16 1 2 3 19 3 19 3 19 3 19 3 19 3 19 3 19 3 18 4 18 4 19 3 19 3 19 3 + 18 6 16 7 16 5 18 3 17 5 18 4 18 4 18 3 19 1 18 0 + + + + 1628.0 + + + 0.297297297297 + + + 387.0 + + + 0.801033591731 + + + 0.91732718894 + + + 0.343423157377 0.429577714063 0.0605373964105 1.03796563331 + -0.105472108356 0.016974845019 -0.0586806773689 -0.0133447321931 + 0.480595240002 + + + 22.0 + + + 2.13636363636 0.351351351351 + + + 2.36363636364 3.45454545455 1.81818181818 0.363636363636 + 0.486486486486 0.756756756757 0.162162162162 0.0 + + + 74.0 + + + 9.0 27.0 0.204918032787 4.0 5.0 1.0 + + + 0.0 0.986486486486 + + + 0.237714987715 + + + 0.211111111111 0.505263157895 0.433333333333 0.431578947368 + 0.490740740741 0.421052631579 0.259259259259 0.254385964912 + 0.266666666667 0.189473684211 0.0 0.0 0.0185185185185 + 0.333333333333 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.222222222222 0.0 0.0 0.37037037037 + 0.333333333333 0.888888888889 0.8 0.62962962963 0.666666666667 + 0.740740740741 0.7 0.185185185185 0.333333333333 0.703703703704 + 0.533333333333 0.703703703704 0.333333333333 0.333333333333 + 0.633333333333 0.555555555556 0.888888888889 0.481481481481 0.0 0.0 + 0.0 0.0 0.0333333333333 0.5 0.388888888889 0.277777777778 0.0 0.0 + 0.0 0.0 0.0 0.296296296296 0.0 0.333333333333 0.133333333333 0.0 + 0.0 0.0 0.0 0.0740740740741 0.0 0.62962962963 0.233333333333 0.0 + 0.0 0.0 0.0 0.0 0.0 0.518518518519 0.0 0.0 0.0 0.0 0.0 + + + 0.500557712946 0.206800028487 0.180599946471 0.0712553704262 + 0.401206454191 0.334876490586 0.165978779036 0.206895082198 + 0.0434010439199 0.0942108301966 0.351703571004 0.284766302717 + 0.278543723234 0.140240454915 + + + + + + + + + 36 1 35 1 34 2 35 1 144 1 35 2 34 2 34 2 34 3 18 3 12 4 18 4 11 3 19 + 4 10 4 19 5 9 4 18 6 8 4 19 7 7 4 19 7 8 3 20 5 1 1 7 2 21 5 1 1 7 2 + 20 2 2 1 2 2 5 2 21 2 4 3 5 1 21 3 2 1 1 4 1 4 20 18 18 8 1 2 2 5 19 + 7 6 5 19 6 6 6 19 6 6 5 20 17 19 18 19 17 19 18 20 17 20 9 4 4 20 16 + 20 17 20 17 19 18 19 17 20 17 20 17 20 17 18 20 17 20 17 19 18 8 2 9 + 18 8 3 8 18 19 21 9 1 7 21 3 2 1 3 4 23 4 3 7 19 5 1 3 2 7 20 4 1 11 + 22 3 1 5 2 4 26 6 4 1 23 2 2 8 25 2 2 9 23 14 25 12 25 12 26 11 26 1 + 1 9 27 10 28 9 28 9 28 9 29 7 31 6 32 5 32 5 33 4 33 4 34 2 35 2 35 2 + 35 2 23 0 + + + + 2849.0 + + + 0.480519480519 + + + 773.0 + + + 0.43596377749 + + + 0.840848806366 + + + 0.345838723588 0.532511745081 0.0476484529971 0.326063831352 + -0.0541846013062 0.0070966360111 0.026657120086 -0.0174707468573 + 0.00190318069378 + + + 37.0 + + + 1.24324324324 0.519480519481 + + + 1.2972972973 3.13513513514 0.540540540541 0.0 0.363636363636 + 0.935064935065 0.675324675325 0.103896103896 + + + 77.0 + + + 8.0 43.0 0.294444444444 6.0 6.0 2.0 + + + 0.0 0.987012987013 + + + 0.271323271323 + + + 0.0 0.309941520468 0.690058479532 0.211111111111 0.210526315789 + 0.766081871345 0.847953216374 0.6 0.12865497076 0.438596491228 + 0.163742690058 0.0 0.1 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.5 0.361111111111 0.075 0.0 0.0 0.0 0.266666666667 + 0.82 1.0 0.777777777778 0.68 0.02 0.0 0.6 0.75 0.975 0.875 + 0.722222222222 1.0 0.55 0.0 0.24 0.533333333333 0.82 1.0 + 0.755555555556 0.6 0.32 0.0 0.0 0.488888888889 0.8 0.46 + 0.111111111111 0.0 0.0 0.0 0.55 0.361111111111 0.0 0.0 0.0 0.0 0.0 + 0.0666666666667 0.22 0.0 0.0 0.0 0.0 0.0 0.0 0.111111111111 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 + + + 0.708247029731 0.098604610947 0.0288491154923 0.0235138245804 + 0.705002060136 0.293334743213 0.0316058164877 0.0673935654087 + 0.0484731375838 0.0273928937824 0.52439113331 0.417239478985 + 0.119312206859 0.00817979691994 + + + + + + + + + 2 1 118 3 118 3 117 4 114 7 113 7 113 7 113 8 113 7 106 2 5 9 104 1 6 + 12 107 15 99 1 5 15 99 1 5 16 61 1 35 3 4 16 61 19 1 18 5 17 60 5 1 + 32 5 17 60 38 5 17 61 37 5 24 54 37 5 25 53 38 4 26 52 38 4 28 50 38 + 4 29 49 38 4 31 47 38 4 32 46 38 4 30 3 1 44 38 4 31 2 1 44 38 4 34 + 44 38 5 33 44 38 4 5 3 27 44 37 6 2 3 28 44 37 5 4 2 29 43 37 5 36 42 + 37 5 39 39 38 4 19 1 3 4 13 38 38 4 23 3 14 40 2 1 21 1 3 12 24 1 15 + 2 1 35 4 4 22 14 1 3 5 1 11 2 19 34 4 4 28 12 10 3 4 8 13 34 38 11 10 + 2 5 1 5 2 2 2 9 1 2 31 6 2 29 14 25 2 3 1 9 28 38 15 40 27 38 16 11 6 + 24 25 7 2 29 17 10 4 27 24 7 2 29 16 12 5 26 23 8 1 29 10 2 4 10 1 3 + 3 26 34 27 9 17 1 7 1 25 33 27 9 16 3 8 2 2 5 19 20 1 8 20 3 4 6 19 4 + 8 2 1 6 18 18 5 3 30 6 19 6 6 10 16 8 6 4 6 3 30 7 3 2 12 8 9 8 14 6 + 9 2 7 2 32 5 3 5 11 3 17 4 16 4 8 4 7 1 3 3 26 6 2 6 50 3 8 6 5 2 1 4 + 27 6 2 7 49 3 10 3 6 1 5 1 27 6 2 8 48 3 53 6 2 9 44 6 3 1 49 6 2 9 + 28 6 12 6 1 2 48 7 1 10 30 6 8 12 12 3 31 7 1 12 16 1 26 12 11 17 4 9 + 4 7 1 13 7 1 7 8 20 11 11 31 3 7 1 14 3 6 8 5 21 8 12 33 2 7 2 14 2 9 + 4 6 14 1 9 6 11 34 1 7 2 16 2 8 1 9 12 4 9 5 10 34 1 7 1 18 7 1 5 9 + 10 3 11 2 11 34 1 7 1 19 13 12 11 1 21 34 1 7 2 22 10 11 33 34 1 6 4 + 22 6 11 36 34 2 5 3 26 3 15 12 2 18 33 3 6 3 26 5 1 5 9 9 3 19 31 3 6 + 3 28 11 9 4 6 19 31 3 6 3 35 4 11 1 6 6 3 11 31 4 5 3 51 3 2 7 3 11 + 32 3 5 3 53 24 32 3 5 3 55 21 32 4 5 3 55 21 33 3 5 3 56 21 33 1 6 3 + 57 20 33 1 7 2 58 19 33 1 7 2 59 18 33 1 7 2 61 16 41 2 62 15 41 1 64 + 15 108 12 112 8 112 8 113 7 114 6 114 6 116 4 117 3 110 2 6 2 109 7 3 + 2 107 8 113 9 2 1 109 11 109 11 111 9 113 7 115 6 116 4 117 3 117 3 + 118 2 119 1 119 1 119 1 32 0 + + + + 12720.0 + + + 1.1320754717 + + + 4309.0 + + + 0.268971919239 + + + 1.02605210421 + + + 0.514555230307 0.419054249688 0.30171340569 0.0877862214003 + 0.0208775925923 -0.0283382261403 0.00180929748226 -0.0329912033913 + 0.00894799133408 + + + 120.0 + + + 1.825 2.03773584906 + + + 2.06666666667 2.1 2.5 0.633333333333 0.792452830189 3.28301886792 + 3.66037735849 0.22641509434 + + + 106.0 + + + 19.0 133.0 0.255747126437 14.0 3.0 10.0 + + + 0.0 0.990566037736 + + + 0.338757861635 + + + 0.516666666667 0.725925925926 0.226923076923 0.00617283950617 + 0.00512820512821 0.52962962963 0.474358974359 0.0 0.188461538462 + 0.33950617284 0.664102564103 0.234567901235 0.402564102564 + 0.864197530864 0.242307692308 0.0 + + + 0.502564102564 1.0 0.841025641026 0.409523809524 0.117948717949 + 0.194871794872 0.025641025641 0.0 0.0 0.564102564103 0.897435897436 + 0.77619047619 0.594871794872 0.0 0.0 0.0 0.0 0.0205128205128 + 0.538461538462 0.795238095238 0.702564102564 0.153846153846 0.0 0.0 + 0.0 0.0 0.0 0.747619047619 0.846153846154 0.194871794872 0.0 0.0 + 0.0 0.0 0.0 0.17619047619 0.605128205128 0.728205128205 + 0.0820512820513 0.0047619047619 0.0 0.753846153846 0.692307692308 + 0.490476190476 0.687179487179 0.635897435897 0.497435897436 + 0.361904761905 0.0 0.917948717949 1.0 0.985714285714 0.4 0.0 0.0 + 0.0 0.025641025641 0.666666666667 0.666666666667 0.8 0.405128205128 + 0.164102564103 0.0 0.0 + + + 0.381206462267 0.160527808026 0.0926280809459 0.0975189942086 + 0.022864640937 0.305436042747 0.0284214217661 0.144044931071 + 0.178843700575 0.0672164339545 0.141335881394 0.182742737135 + 0.107998957986 0.0575875104237 + + + + + + + + + 155 1 162 2 161 2 161 3 159 4 159 4 159 4 159 4 159 3 161 2 161 2 161 + 3 160 3 159 4 159 4 159 5 157 5 158 5 35 3 120 5 34 6 118 5 33 9 116 + 5 33 11 91 15 8 5 33 13 89 28 34 15 86 16 2 2 1 8 33 16 85 15 3 11 33 + 10 1 6 1 2 81 29 33 17 1 2 81 29 33 19 82 29 33 19 82 29 33 20 81 29 + 33 21 80 29 33 23 81 26 33 19 3 3 79 26 33 19 4 7 11 3 60 26 33 20 7 + 6 10 1 60 26 33 23 6 7 5 3 4 1 48 34 32 21 1 2 8 7 3 3 3 3 46 31 1 2 + 33 25 7 7 3 11 43 34 33 17 5 8 6 7 12 1 40 34 33 17 9 7 6 6 5 1 4 4 + 37 34 33 19 7 10 5 20 34 35 31 21 1 1 7 11 5 8 4 11 29 34 32 26 7 1 1 + 9 2 9 3 10 29 34 32 29 9 4 1 5 3 7 1 9 29 34 32 32 8 2 3 4 7 2 1 2 1 + 1 34 35 32 33 6 4 2 9 4 4 4 1 29 36 30 37 9 32 19 35 32 41 12 26 18 + 34 32 43 11 26 17 34 2 2 28 45 11 26 15 33 3 3 27 19 2 26 13 25 12 33 + 3 13 17 16 1 2 3 25 14 25 11 3 3 6 5 11 1 2 1 1 3 17 1 17 2 9 2 1 4 + 28 5 3 1 28 9 3 4 4 5 18 2 46 2 1 8 26 5 30 2 1 6 3 3 2 1 2 3 20 2 34 + 3 10 12 24 7 34 2 5 5 25 2 34 2 4 2 4 16 19 12 38 5 2 1 21 3 34 3 2 + 26 19 5 42 5 1 3 19 4 35 3 2 27 2 1 61 2 5 2 17 1 1 4 33 1 1 3 2 32 + 67 2 16 1 2 3 33 3 7 31 65 1 22 1 33 4 7 33 85 1 32 7 5 36 1 1 75 1 4 + 1 32 7 6 40 26 1 21 1 23 1 4 1 33 9 4 41 22 3 20 4 21 2 2 2 33 11 2 + 42 44 11 1 7 6 2 2 2 34 55 27 2 14 20 1 6 2 2 33 59 25 2 8 32 3 1 34 + 57 27 2 8 31 3 1 34 60 14 2 9 1 9 30 3 1 34 65 30 30 3 1 34 67 18 1 9 + 1 1 28 3 1 34 67 31 28 2 1 34 65 10 2 8 3 11 27 2 1 4 1 29 67 10 1 3 + 1 2 4 11 27 2 3 1 2 13 2 14 66 18 1 14 28 1 8 9 4 14 68 5 6 7 1 12 28 + 2 7 9 5 13 63 11 7 5 1 13 27 1 6 11 6 12 64 5 1 8 3 6 1 12 27 1 6 11 + 6 5 1 2 1 3 66 21 2 11 27 2 8 9 5 5 5 1 67 8 3 9 4 9 28 2 8 11 2 5 73 + 21 4 8 30 1 5 13 83 18 8 1 34 1 6 12 90 11 43 1 6 12 92 2 50 1 6 1 2 + 8 93 1 51 1 2 2 1 12 145 1 2 15 152 11 150 13 149 14 152 10 153 11 + 152 11 152 11 154 9 155 8 158 2 161 2 149 0 + + + + 15974.0 + + + 1.66326530612 + + + 4963.0 + + + 0.261938343744 + + + 0.763789989777 + + + 0.519835672868 0.544439159055 0.530405558523 0.056907675839 + -0.0500123003206 -0.0419351192024 -0.00134329716966 + 0.00681121427176 -0.00110648830547 + + + 163.0 + + + 1.52760736196 2.5612244898 + + + 0.858895705521 2.08588957055 1.93865030675 1.10429447853 + 0.367346938776 3.0612244898 4.48979591837 2.24489795918 + + + 98.0 + + + 37.0 156.0 0.257614213198 16.0 4.0 15.0 + + + 0.0 0.989795918367 + + + 0.31069237511 + + + 0.0541666666667 0.268 0.817708333333 0.358 0.00508130081301 + 0.494634146341 0.297764227642 0.0 0.0 0.144390243902 0.752032520325 + 0.171707317073 0.151422764228 0.76487804878 0.604674796748 + 0.100487804878 + + + 0.0 0.0 0.0 0.0 0.820833333333 1.0 0.579166666667 0.503846153846 + 0.0 0.216666666667 0.545833333333 0.526923076923 0.770833333333 + 0.679166666667 0.366666666667 0.0 0.0 0.0198412698413 + 0.488095238095 0.802197802198 0.40873015873 0.0595238095238 0.0 0.0 + 0.0 0.0 0.0541666666667 0.584615384615 0.725 0.00416666666667 0.0 + 0.0 0.0 0.0 0.0 0.480769230769 0.754166666667 0.433333333333 0.05 + 0.0 0.0 0.0 0.0 0.0842490842491 0.880952380952 0.924603174603 + 0.650793650794 0.0 0.0 0.15 0.566666666667 0.796153846154 + 0.691666666667 0.5375 0.358333333333 0.0 0.134920634921 + 0.313492063492 0.801587301587 0.875457875458 0.849206349206 + 0.34126984127 0.0634920634921 0.003663003663 + + + 0.264602242438 0.284415704819 0.0805043258163 0.0268010855071 + 0.0238518108576 0.371734955248 0.185687216285 0.0489841813677 + 0.0771400654084 0.0523128402938 0.148739828942 0.259546229519 + 0.256572989727 0.111141142879 + + + + + + + + + 96 4 1 3 102 36 102 36 102 36 102 36 101 37 102 36 102 37 100 38 100 + 39 100 37 101 37 101 37 101 37 101 37 101 37 100 38 100 39 99 39 100 + 38 100 37 100 39 100 6 2 28 102 6 2 28 102 36 101 37 102 6 2 28 111 + 27 111 27 112 26 111 27 101 2 9 26 69 13 8 1 10 5 3 29 66 72 66 72 30 + 1 34 72 29 3 35 31 3 6 3 3 2 2 2 19 19 8 1 4 35 71 6 27 34 72 2 29 35 + 103 36 102 35 103 35 39 3 2 4 1 11 1 7 35 35 39 30 34 35 38 31 34 35 + 38 31 34 36 36 32 34 36 37 31 34 36 36 32 35 34 37 32 37 31 39 30 38 + 31 40 29 38 32 39 29 37 33 39 28 38 33 38 30 38 33 37 29 37 35 37 31 + 35 35 36 32 35 36 35 32 35 36 35 32 35 36 35 32 35 36 35 32 35 36 35 + 32 35 3 1 32 7 3 25 32 35 2 4 30 7 4 24 32 35 2 20 14 35 32 35 2 28 5 + 36 32 35 2 70 31 35 2 23 2 5 1 38 32 36 1 69 32 35 2 69 32 35 2 69 32 + 35 2 69 32 35 2 37 1 31 32 35 2 36 12 5 3 2 1 2 2 6 32 36 1 36 28 6 + 31 36 1 37 28 4 32 36 1 36 30 3 32 36 1 36 31 2 32 24 8 4 1 37 30 1 + 33 8 26 2 1 37 64 6 31 37 64 4 33 37 65 2 34 37 65 1 35 37 65 1 35 37 + 65 1 35 38 64 1 37 1 5 30 100 4 2 1 1 30 100 38 100 38 101 37 101 37 + 101 37 101 37 101 38 100 38 100 38 100 38 100 38 100 38 100 38 101 37 + 101 38 100 15 5 18 102 35 116 1 5 17 123 15 125 13 127 11 128 11 129 + 9 131 6 132 6 137 1 98 0 + + + + 15870.0 + + + 1.2 + + + 6029.0 + + + 0.130038148947 + + + 0.707667789766 + + + 0.495036762703 0.483647749329 0.249788699992 0.116478534879 + -0.0825090574383 0.00254361563036 -0.0144305737816 0.0364500436005 + -0.00290363277562 + + + 138.0 + + + 0.557971014493 0.791304347826 + + + 0.608695652174 0.550724637681 0.782608695652 0.231884057971 + 0.139130434783 1.07826086957 1.66956521739 0.208695652174 + + + 115.0 + + + 17.0 65.0 0.170873786408 4.0 3.0 3.0 + + + 0.0 0.991304347826 + + + 0.379899180844 + + + 0.0 0.0456389452333 0.707910750507 0.692697768763 0.034693877551 + 0.84236453202 0.639408866995 0.141871921182 0.955882352941 + 0.498985801217 0.0567951318458 0.00101419878296 0.0489795918367 + 0.665024630542 0.728078817734 0.0 + + + 0.0 0.0 0.0 0.0 0.449579831933 1.0 0.920168067227 0.352941176471 + 0.0 0.0 0.078431372549 0.105042016807 0.340336134454 1.0 1.0 + 0.533333333333 0.0 0.0 0.717647058824 1.0 0.970588235294 + 0.333333333333 0.256302521008 0.325490196078 0.0634920634921 + 0.0714285714286 0.674074074074 1.0 1.0 0.3 0.0 0.0 0.928571428571 + 0.941176470588 0.780392156863 0.063025210084 0.00420168067227 + 0.00392156862745 0.0 0.0 0.953781512605 1.0 0.949019607843 + 0.151260504202 0.117647058824 0.101960784314 0.00420168067227 0.0 + 0.0924369747899 0.109243697479 0.396078431373 1.0 1.0 0.58431372549 + 0.0 0.0 0.0 0.0 0.396296296296 0.90873015873 0.892857142857 + 0.47037037037 0.0 0.0 + + + 0.339704893249 0.178165841013 0.112127772144 0.127334680568 + 0.0424115963306 0.260252967784 0.0390495522485 0.17703533706 + 0.178330368684 0.109712737979 0.0123010799111 0.0594710322201 + 0.0173988054154 0.0315473259696 + + + + + + + + + 1 2 39 3 40 1 41 1 41 2 33 2 5 5 17 1 12 2 5 24 11 2 5 37 5 37 5 37 5 + 37 5 37 5 37 5 37 5 37 6 36 6 37 5 37 5 37 5 37 5 37 5 37 5 37 5 37 5 + 37 5 37 5 37 5 2 4 31 14 21 12 34 9 4 3 30 5 3 4 30 5 37 5 37 5 37 5 + 37 5 37 5 37 5 37 6 36 6 36 6 36 6 36 6 36 7 35 7 35 7 35 7 35 7 35 8 + 1 2 31 8 1 25 9 40 2 41 1 41 1 41 1 41 1 40 2 40 2 40 3 39 3 39 3 41 + 1 + + + + 2604.0 + + + 0.677419354839 + + + 1615.0 + + + 0.159752321981 + + + 1.0868285504 + + + 0.503798233029 0.452925950363 0.0725392113488 0.108856057197 + 0.016230362232 -0.000245385260212 0.0016584958116 3.7688509982e-05 + 0.00220095585991 + + + 42.0 + + + 0.52380952381 0.145161290323 + + + 1.2380952381 0.0952380952381 0.0 0.761904761905 0.258064516129 + 0.0645161290323 0.0645161290323 0.129032258065 + + + 62.0 + + + 4.0 12.0 0.202797202797 2.0 3.0 8.0 + + + 0.0 0.983870967742 + + + 0.62019969278 + + + 0.633333333333 0.7 0.613333333333 0.1125 0.6 0.994318181818 1.0 + 0.25 0.566666666667 1.0 1.0 0.25 0.375757575758 0.670454545455 + 0.818181818182 0.369318181818 + + + 0.485714285714 0.8 0.6 0.475 0.4 0.175 0.0 0.0 0.171428571429 1.0 + 1.0 0.725 0.885714285714 1.0 0.45 0.0 0.142857142857 1.0 1.0 0.975 + 1.0 1.0 0.5 0.0 0.142857142857 1.0 1.0 1.0 1.0 1.0 0.5 0.0 + 0.142857142857 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 1.0 1.0 1.0 1.0 1.0 + 0.5 0.0 0.0 1.0 1.0 0.9 1.0 1.0 0.6 0.0 0.142857142857 + 0.333333333333 0.479166666667 0.395833333333 0.666666666667 + 0.666666666667 0.520833333333 0.333333333333 + + + 0.595873510085 0.0482080729902 0.0106694904291 0.00755390662479 + 0.319680102872 0.101123535198 0.0414661947436 0.00659977283493 + 0.010536081374 0.00843795250967 0.103309775432 0.097182528572 + 0.110094622819 0.0275251024755 + + + + + + + + + 8 1 24 2 25 1 23 4 22 6 20 6 19 4 1 1 3 1 16 4 4 3 2 1 12 6 3 2 1 3 + 11 6 2 8 10 17 3 1 5 21 4 22 4 22 4 22 4 22 3 23 3 23 3 2 1 20 3 23 2 + 24 2 24 2 24 2 50 1 25 1 25 1 24 1 5 2 6 1 11 3 3 4 3 3 10 10 2 4 9 6 + 1 4 3 4 7 3 24 2 23 3 1 2 15 13 1 2 11 14 10 9 1 4 11 10 2 2 7 1 4 10 + 1 3 7 2 3 14 7 4 5 7 13 2 4 9 11 1 5 8 18 11 3 4 8 11 3 4 8 11 3 5 7 + 19 6 17 9 16 9 17 9 17 9 18 8 18 8 20 6 21 5 8 0 + + + + 1456.0 + + + 0.464285714286 + + + 818.0 + + + 0.345965770171 + + + 1.0027700831 + + + 0.509926650367 0.482596132474 0.0468435181661 0.20252898184 + -0.0061007912122 0.000617198700521 -0.00175363491322 + -0.00362271583558 0.0297515882949 + + + 26.0 + + + 1.76923076923 0.517857142857 + + + 2.46153846154 2.15384615385 1.69230769231 0.307692307692 + 0.571428571429 0.0714285714286 1.14285714286 0.285714285714 + + + 56.0 + + + 3.0 23.0 0.254901960784 3.0 11.0 3.0 + + + 0.0 0.982142857143 + + + 0.561813186813 + + + 0.119047619048 0.619047619048 0.5 0.119047619048 0.663265306122 1.0 + 0.775510204082 0.448979591837 0.464285714286 1.0 0.714285714286 + 0.904761904762 0.285714285714 0.989795918367 0.326530612245 + 0.0510204081633 + + + 0.0 0.0 0.047619047619 0.571428571429 0.52380952381 0.285714285714 + 0.047619047619 0.0 0.047619047619 0.428571428571 0.857142857143 1.0 + 0.666666666667 0.52380952381 0.428571428571 0.0 0.761904761905 1.0 + 1.0 1.0 0.52380952381 0.857142857143 0.571428571429 0.0 + 0.285714285714 0.714285714286 1.0 1.0 0.857142857143 0.821428571429 + 0.464285714286 0.678571428571 0.047619047619 0.952380952381 1.0 1.0 + 0.619047619048 0.809523809524 0.952380952381 1.0 0.0 0.857142857143 + 1.0 1.0 0.952380952381 0.47619047619 1.0 0.666666666667 0.0 + 0.714285714286 1.0 1.0 0.857142857143 0.0952380952381 + 0.238095238095 0.0 0.0 0.464285714286 1.0 0.964285714286 + 0.428571428571 0.0 0.0 0.0 + + + 0.493625565891 0.144439686442 0.0952288379141 0.0498142528462 + 0.254109174881 0.214265238444 0.0893461596676 0.0907982716116 + 0.0312759089889 0.0576638815157 0.0184922839503 0.122325153658 + 0.0895510041348 0.0737745659325 + + + + + + + + + 36 2 73 2 73 1 74 3 6 2 4 21 39 36 39 36 40 35 39 35 40 36 39 36 39 + 36 39 35 41 35 39 36 39 35 40 35 40 36 39 36 39 36 39 35 40 36 39 36 + 39 36 39 36 40 34 40 35 40 35 40 36 40 35 40 34 41 35 39 35 41 35 40 + 34 40 7 2 23 43 35 8 1 31 36 6 4 5 1 4 1 2 3 13 36 5 24 9 37 5 69 6 + 69 6 69 6 69 6 69 6 69 6 18 1 31 10 9 6 18 1 19 29 2 6 39 28 2 6 38 + 28 3 6 37 30 2 6 37 30 2 6 38 29 2 4 40 29 2 5 41 26 3 5 41 27 2 5 40 + 28 2 5 39 29 3 4 38 31 1 5 39 29 3 5 37 29 5 3 39 29 3 4 39 29 2 5 39 + 36 38 37 38 38 37 37 38 37 38 37 38 38 37 37 39 36 39 33 1 2 39 33 2 + 1 39 33 2 2 38 33 2 2 38 33 2 2 38 34 1 2 38 37 38 37 5 1 7 1 2 7 15 + 36 7 8 1 13 10 36 6 25 8 37 5 27 7 36 5 28 5 37 5 28 5 37 5 29 4 36 6 + 30 3 36 6 30 3 37 5 31 2 37 5 31 2 37 5 71 3 72 1 74 1 74 2 73 1 71 0 + + + + + 7200.0 + + + 0.78125 + + + 3236.0 + + + 0.153275648949 + + + 0.717262830482 + + + 0.486461430528 0.457592219114 0.127989772514 0.153773593815 + -0.0915563412493 -0.000202881668317 0.00229038547124 + 0.00126985723469 -0.000634324498076 + + + 75.0 + + + 0.546666666667 0.5 + + + 0.373333333333 0.0533333333333 0.586666666667 0.906666666667 + 0.0833333333333 0.5 0.625 0.791666666667 + + + 96.0 + + + 1.0 24.0 0.188 5.0 2.0 3.0 + + + 0.0 0.989583333333 + + + 0.449444444444 + + + 0.0 0.386574074074 0.930555555556 0.456018518519 0.0482456140351 + 0.416666666667 1.0 0.361842105263 0.857456140351 0.918859649123 + 0.144736842105 0.116228070175 0.725877192982 0.728070175439 + 0.0789473684211 0.0197368421053 + + + 0.0 0.0 0.0 0.694444444444 0.851851851852 0.87037037037 + 0.740740740741 0.416666666667 0.0 0.0 0.0 0.851851851852 1.0 1.0 + 0.666666666667 0.0 0.0 0.0 0.0 0.825 1.0 1.0 0.608333333333 0.0 + 0.101851851852 0.101851851852 0.0555555555556 0.787037037037 1.0 + 1.0 0.824074074074 0.0277777777778 0.712962962963 1.0 + 0.981481481481 0.898148148148 0.342592592593 0.268518518519 + 0.342592592593 0.148148148148 0.716666666667 1.0 1.0 0.8 0.0 0.0 + 0.0 0.0 0.75 1.0 1.0 0.777777777778 0.0 0.0 0.0 0.0 0.508333333333 + 0.675 0.608333333333 0.558333333333 0.25 0.05 0.075 0.0 + + + 0.498991906149 0.149614165865 0.00650034063279 0.00829539176938 + 0.133514657582 0.34913698171 0.0593278609464 0.0501216109795 + 0.0442188436546 0.00499432583457 0.123239885305 0.325170329524 + 0.110482464486 0.0381790280134 + + + + + + + + + 77 2 120 4 36 3 81 3 36 3 81 4 35 3 81 1 38 3 81 2 37 3 81 11 28 3 81 + 36 2 4 81 42 81 42 81 42 81 42 81 42 80 43 81 42 81 42 81 42 81 42 82 + 42 81 41 82 41 82 41 82 41 82 41 82 41 82 41 82 41 82 42 81 36 87 34 + 90 40 83 6 2 33 82 41 82 41 82 41 82 41 82 41 41 2 39 1 2 38 41 2 1 1 + 41 37 41 8 33 2 1 3 2 34 40 11 29 2 10 7 2 20 42 18 21 5 3 36 40 20 5 + 58 40 20 4 27 3 29 40 20 5 31 1 3 1 22 40 19 6 19 10 2 5 22 40 19 5 + 21 2 4 1 31 40 20 4 59 40 20 4 23 1 35 40 21 3 22 1 36 40 21 3 21 6 + 32 40 21 3 20 31 8 40 21 2 21 36 3 41 43 37 2 41 20 2 21 37 2 41 20 3 + 20 37 2 41 20 3 20 38 1 41 21 1 21 38 1 41 43 38 1 4 1 36 18 2 23 38 + 2 1 3 36 43 38 2 1 4 33 47 35 4 1 2 35 22 1 23 35 3 1 4 35 20 3 21 36 + 3 1 4 35 44 37 7 35 20 1 22 38 7 35 20 1 22 39 1 2 2 36 7 3 33 38 2 3 + 1 37 42 39 1 3 1 37 42 43 2 35 20 3 20 43 2 34 21 3 21 42 3 35 3 4 14 + 1 21 42 13 23 4 5 1 4 3 3 2 2 21 42 34 3 3 5 3 1 3 8 21 42 38 8 1 14 + 20 43 39 10 7 4 20 43 40 4 3 1 9 2 21 43 52 3 1 3 21 43 42 1 37 42 81 + 42 42 1 16 1 21 42 6 1 34 5 13 2 20 42 40 8 11 1 21 43 40 10 7 3 20 + 43 40 20 20 43 40 34 6 43 37 40 3 43 40 82 41 82 42 82 41 82 41 82 41 + 83 40 89 26 7 1 88 28 90 40 83 3 6 31 83 1 1 1 5 32 83 40 83 41 83 40 + 83 40 83 40 83 40 83 40 83 40 83 40 83 40 83 40 83 40 83 40 84 39 84 + 39 84 39 84 39 84 1 9 6 1 22 84 1 25 14 83 1 29 10 83 1 31 8 117 6 + 117 6 82 3 31 8 82 2 33 6 117 5 118 5 119 4 118 5 77 0 + + + + 15867.0 + + + 0.953488372093 + + + 5395.0 + + + 0.172937905468 + + + 0.54584182256 + + + 0.501435755633 0.48468634152 0.209473793544 0.179313473134 + -0.154193286781 0.00162567151507 0.00151673690955 -0.00231417595534 + 0.00126631121822 + + + 123.0 + + + 1.26016260163 1.0 + + + 0.715447154472 2.0487804878 1.39837398374 0.650406504065 + 0.248062015504 1.7984496124 1.64341085271 0.31007751938 + + + 129.0 + + + 18.0 100.0 0.210862619808 12.0 4.0 7.0 + + + 0.0 0.992248062016 + + + 0.340013865255 + + + 0.0 0.0145833333333 0.655208333333 0.537373737374 0.0 + 0.501008064516 0.592741935484 0.386119257087 0.38810483871 + 0.633064516129 0.471774193548 0.0 0.6875 0.571572580645 + 0.0100806451613 0.0 + + + 0.0 0.0 0.0 0.0583333333333 0.458333333333 0.7875 0.620833333333 + 0.21568627451 0.0 0.0 0.0 0.0 0.375 1.0 1.0 0.345098039216 0.0 0.0 + 0.30078125 0.46875 0.53515625 0.8125 0.890625 0.606617647059 0.0 + 0.0 0.345833333333 0.904166666667 0.758333333333 0.254166666667 0.0 + 0.0078431372549 0.0 0.0 0.3375 0.970833333333 0.954166666667 + 0.341666666667 0.0 0.0 0.63671875 0.8671875 0.74609375 0.48046875 + 0.4140625 0.19921875 0.0 0.0 0.5625 1.0 0.9625 0.1875 0.0 0.0 0.0 + 0.0 0.484375 0.71484375 0.83984375 0.296875 0.0390625 0.0 0.0 0.0 + + + 0.390292289031 0.22500396692 0.00839022197087 0.00735739237026 + 0.0678701207213 0.387328158328 0.119893016676 0.00670768397057 + 0.00175859808584 0.0115638017783 0.185363667993 0.110564505208 + 0.248838201756 0.0617229735874 + + + + + + + + + 167 3 171 5 213 1 173 5 130 2 37 8 128 2 37 10 125 3 37 11 124 3 37 + 14 120 4 38 15 86 4 1 31 38 16 85 36 38 17 84 36 38 18 1 1 81 36 38 + 21 80 36 38 24 77 36 38 26 75 36 38 23 3 1 74 36 38 24 77 36 38 26 75 + 36 38 19 3 3 76 36 38 18 4 4 76 35 38 19 3 2 78 35 38 4 3 13 2 4 76 + 35 38 20 2 10 70 35 38 33 69 35 38 36 7 1 58 36 37 21 1 13 9 1 57 36 + 38 19 3 12 10 3 54 36 38 7 3 14 1 9 13 2 52 36 38 4 1 3 3 10 1 18 1 3 + 57 36 38 19 1 1 3 21 57 28 45 19 6 10 2 9 56 30 43 37 1 10 54 35 38 + 25 10 14 53 35 38 31 5 17 49 35 38 33 3 19 47 35 38 22 1 35 3 1 40 35 + 38 22 2 14 2 21 6 2 33 35 38 38 3 23 2 6 30 36 38 38 3 24 1 4 1 5 25 + 36 38 41 4 19 4 1 5 3 25 35 38 6 1 14 2 19 4 21 10 2 23 35 38 6 1 13 + 7 16 4 9 1 16 2 2 2 4 18 36 38 20 6 49 6 3 1 2 14 36 38 21 1 20 4 9 3 + 6 2 12 8 5 10 36 38 18 5 21 1 7 8 10 1 10 5 8 6 37 38 52 9 6 1 1 6 6 + 6 50 38 54 11 3 9 5 5 50 6 1 31 41 4 11 14 3 6 58 5 4 28 58 14 5 9 52 + 5 22 8 63 12 8 6 52 4 42 1 52 13 8 4 51 4 36 2 1 5 20 5 26 17 4 5 22 + 2 1 3 9 3 10 4 35 12 2 3 9 14 29 20 16 27 4 4 36 16 5 21 29 11 21 30 + 2 4 36 15 4 25 29 10 20 31 1 4 37 14 9 25 22 13 18 32 1 4 37 16 12 22 + 22 11 18 32 1 4 37 19 15 18 21 11 18 35 39 20 17 15 22 8 20 30 1 3 39 + 23 16 15 21 6 21 29 3 2 40 22 20 14 45 29 2 3 40 23 1 2 17 16 42 30 2 + 1 41 31 12 19 39 33 41 65 36 35 39 52 4 11 3 1 30 35 39 47 5 1 8 15 + 25 35 39 49 13 18 21 35 39 52 15 14 20 35 39 57 3 3 6 12 20 35 39 57 + 5 3 7 9 20 35 38 62 5 3 4 8 20 35 38 64 4 14 20 36 38 68 2 10 22 35 + 38 69 2 9 22 35 38 81 20 36 38 82 20 35 38 81 21 35 38 81 21 35 39 80 + 21 35 39 81 20 35 39 81 20 35 39 81 20 35 39 81 20 35 39 82 1 2 16 35 + 39 87 15 35 38 85 17 35 39 83 18 35 39 85 9 1 6 35 39 88 5 3 5 35 39 + 97 4 35 39 98 3 35 39 98 3 35 4 18 17 99 2 36 2 31 5 100 1 37 1 32 4 + 101 1 36 1 33 3 173 2 132 0 + + + + 17150.0 + + + 1.78571428571 + + + 6573.0 + + + 0.210101932147 + + + 0.677373808683 + + + 0.487048199618 0.510070093055 0.430523252119 0.0730207315996 + -0.0621471560413 0.0258236572536 -0.00419202005759 0.00300100699231 + 0.000690713984049 + + + 175.0 + + + 1.55428571429 2.34693877551 + + + 0.388571428571 2.37714285714 2.90285714286 0.548571428571 + 1.18367346939 3.4693877551 3.26530612245 1.30612244898 + + + 98.0 + + + 19.0 124.0 0.296632124352 26.0 5.0 14.0 + + + 0.0 0.989795918367 + + + 0.383265306122 + + + 0.187015503876 0.198139534884 0.864341085271 0.755348837209 + 0.174242424242 0.803636363636 0.310606060606 0.0 0.0 0.239090909091 + 0.594696969697 0.108181818182 0.527462121212 0.811818181818 + 0.368371212121 0.198181818182 + + + 0.0 0.0 0.0 0.003663003663 0.853174603175 0.928571428571 + 0.857142857143 0.531135531136 0.287878787879 0.443181818182 + 0.405303030303 0.367132867133 0.776515151515 0.901515151515 + 0.931818181818 0.716783216783 0.0795454545455 0.617424242424 + 0.905303030303 0.916083916084 0.518939393939 0.0113636363636 0.0 + 0.0 0.0 0.0 0.477272727273 0.898601398601 0.534090909091 + 0.17803030303 0.0 0.0 0.0 0.0 0.00757575757576 0.601398601399 + 0.731060606061 0.382575757576 0.0 0.0 0.0 0.0 0.0 0.311188811189 + 0.556818181818 0.708333333333 0.397727272727 0.048951048951 + 0.212121212121 0.848484848485 0.795454545455 0.821678321678 + 0.621212121212 0.5 0.541666666667 0.262237762238 0.276515151515 + 0.772727272727 0.768939393939 0.856643356643 0.337121212121 + 0.0151515151515 0.0 0.0 + + + 0.310661250957 0.242134988251 0.0459618056702 0.0274298972044 + 0.0535017636364 0.372932948597 0.150607560706 0.0750130260821 + 0.0568870811794 0.0179386130151 0.0752032640122 0.274479040721 + 0.228882362432 0.105946505775 + + + + + + + + + 10 1 9 2 8 3 8 3 9 2 9 2 9 2 8 3 8 3 8 2 9 2 9 2 9 2 9 2 9 2 8 3 9 2 + 9 2 8 3 8 2 9 3 62 4 7 3 8 3 9 2 9 1 10 1 9 2 10 1 10 1 10 1 10 1 10 + 1 43 1 9 1 10 1 10 1 10 1 10 1 10 1 10 1 482 1 9 2 9 2 9 2 9 2 9 1 21 + 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 9 + 2 9 1 22 1 10 1 9 2 9 2 9 2 9 2 9 2 9 2 9 1 21 1 10 1 10 1 10 1 10 1 + 10 1 9 2 9 2 10 1 9 2 9 2 9 2 9 2 9 2 9 2 9 2 9 2 8 3 8 3 8 4 8 2 9 2 + 9 2 19 3 7 3 9 2 10 1 10 1 10 1 9 2 9 2 9 2 8 0 + + + + 1749.0 + + + 0.0691823899371 + + + 179.0 + + + 1.58659217877 + + + 0.760156806842 + + + 0.51061452514 0.517148716498 0.0423514634444 18.1030209374 + -0.848084655502 0.00231099052764 0.688195195177 -0.0395389568772 + -12.5936989545 + + + 11.0 + + + 1.72727272727 0.0 + + + 0.727272727273 1.81818181818 0.727272727273 1.45454545455 0.0 0.0 + 0.0 0.0 + + + 159.0 + + + 1.0 3.0 0.1 14.0 12.0 0.0 + + + 0.0 0.993710691824 + + + 0.102344196684 + + + 0.0 0.0 0.0 0.125 0.0 0.0 0.216666666667 0.508333333333 + 0.17094017094 0.0666666666667 0.0416666666667 0.0 0.418803418803 + 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.45 + 0.0 0.0 0.0 0.0 0.0 0.075 0.625 0.75 0.0 0.0 0.0 0.0 0.25 0.9 0.25 + 0.05 0.0 0.0 0.0 0.0 0.25 0.0 0.0 0.0 0.0526315789474 0.45 0.2 0.0 + 0.0 0.0 0.0 0.0 0.736842105263 0.3 0.0 0.0 0.0 0.0 0.0 0.0 + 0.710526315789 0.05 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.047365468003 0.453651306715 0.204813669165 0.0682296593605 + 0.114739673277 0.381093434067 0.471437352518 0.10101507471 + 0.154354790124 0.112665178576 0.114643794863 0.0603989311108 + 0.534292644701 0.460439763049 + + + + + + + + + 68 1 211 1 211 2 210 2 209 3 209 3 209 3 209 3 209 4 208 4 208 1 1 2 + 208 5 206 7 205 11 26 1 174 19 3 17 172 20 3 18 171 20 3 18 171 19 3 + 19 171 17 5 19 171 17 1 3 1 19 171 17 1 1 3 19 171 20 2 19 171 21 1 + 19 171 41 171 41 171 41 171 41 171 42 170 21 1 20 170 42 170 42 170 + 21 1 20 171 41 171 41 171 41 171 19 2 20 171 19 1 21 171 20 1 20 171 + 41 171 41 171 41 171 41 172 40 171 41 23 2 145 43 21 4 144 44 18 8 + 142 8 1 12 1 21 20 11 138 21 1 21 20 7 115 1 27 19 2 21 20 7 113 5 25 + 5 4 9 4 20 20 9 112 3 26 19 2 4 6 11 19 12 110 4 25 16 1 8 6 10 19 14 + 109 10 6 30 1 1 2 14 26 13 109 49 1 16 24 14 107 35 6 9 1 17 22 16 1 + 3 102 34 6 29 21 14 2 6 100 34 4 31 21 14 3 6 96 1 2 34 25 10 20 15 4 + 5 96 37 31 4 20 16 2 8 94 37 32 3 20 27 93 37 32 3 20 28 92 37 33 2 + 20 30 90 37 33 1 21 31 89 37 55 32 88 37 54 34 87 37 54 36 85 37 54 + 37 84 37 54 38 83 37 55 37 83 37 55 37 83 37 56 36 83 37 56 36 83 37 + 56 29 3 4 89 1 5 25 56 28 4 4 84 3 1 32 58 24 6 4 84 36 60 24 4 4 84 + 36 61 23 4 1 2 1 84 36 34 1 28 22 3 2 16 2 68 36 34 1 30 20 20 5 66 + 37 33 2 28 21 20 5 66 37 33 2 28 22 2 1 16 6 65 37 33 2 28 21 2 3 14 + 9 63 37 33 2 29 16 1 2 4 2 15 8 63 37 33 2 29 15 25 9 62 37 33 3 27 + 16 25 10 61 37 33 3 26 17 24 11 61 37 33 3 25 20 22 11 61 37 33 3 15 + 1 7 23 20 12 61 37 34 2 15 2 6 24 18 13 61 37 34 2 16 2 5 25 17 12 62 + 37 34 2 22 29 14 12 1 1 60 37 34 1 23 29 14 14 29 2 29 37 60 27 13 13 + 30 15 4 1 9 40 61 26 13 14 7 1 21 70 61 25 13 15 6 4 18 70 63 23 13 + 16 4 3 20 36 29 5 64 22 12 20 1 3 20 35 31 4 69 16 13 20 1 4 19 35 32 + 3 67 18 13 19 3 2 20 35 32 3 68 16 14 19 25 35 32 3 69 15 14 19 5 1 5 + 2 12 35 32 3 70 13 14 20 3 3 4 4 11 35 32 3 71 1 3 1 5 2 14 26 4 4 11 + 35 33 2 76 3 3 1 14 27 2 5 1 1 8 37 31 3 73 1 2 7 13 20 1 17 6 39 30 + 3 74 9 13 38 6 38 31 3 76 7 13 39 5 38 32 2 77 6 12 41 4 39 111 6 10 + 43 3 39 112 7 9 45 1 37 128 45 3 36 128 45 3 36 129 6 4 31 1 3 2 36 + 129 7 4 28 4 2 2 36 129 45 2 36 128 16 1 28 3 36 128 16 1 28 3 7 2 27 + 128 36 1 7 4 4 1 31 128 15 4 17 3 5 4 36 129 5 2 8 4 15 6 3 4 36 131 + 3 2 9 4 14 4 5 5 35 133 1 4 6 6 11 5 5 6 35 150 9 5 7 6 35 133 4 14 9 + 4 7 6 35 134 4 13 9 3 8 6 35 151 9 3 8 6 35 152 8 2 8 7 7 2 26 154 16 + 7 7 2 26 155 15 7 6 3 17 5 4 155 6 1 8 7 36 155 2 4 7 8 36 176 36 176 + 36 176 36 177 35 177 1 7 14 3 10 209 3 210 2 210 2 160 2 48 2 160 3 + 47 2 160 3 48 1 161 3 47 1 160 4 207 6 206 6 206 6 206 6 206 6 206 5 + 207 5 208 4 209 3 210 2 211 1 9 0 + + + + 32860.0 + + + 1.36774193548 + + + 7648.0 + + + 0.191422594142 + + + 0.94472593275 + + + 0.440115682445 0.516780552084 0.463778993963 0.140138467231 + 0.0117347149549 0.109420913086 -0.00774019196794 0.123574356254 + -0.0112836502471 + + + 212.0 + + + 0.806603773585 1.7935483871 + + + 0.528301886792 0.849056603774 0.88679245283 0.962264150943 + 0.464516129032 1.88387096774 3.4064516129 1.29032258065 + + + 155.0 + + + 35.0 134.0 0.210998877666 27.0 3.0 6.0 + + + 0.0 0.993548387097 + + + 0.232744978698 + + + 0.0 0.228834059023 0.567972907596 0.354620222545 0.495034756703 + 0.546686018384 0.194968553459 0.0 0.00546176762661 0.377358490566 + 0.285921625544 0.0 0.0 0.0149975810353 0.438800193517 + 0.202225447508 + + + 0.0 0.0 0.0 0.0 0.133603238866 0.946153846154 0.874493927126 + 0.0711538461538 0.0 0.0 0.2 0.711500974659 0.740740740741 + 0.437037037037 0.444444444444 0.0666666666667 0.244939271255 + 0.526315789474 0.598076923077 0.653846153846 0.692307692308 + 0.0711538461538 0.0 0.0 0.230019493177 0.970760233918 + 0.894444444444 0.0253411306043 0.046783625731 0.0 0.0 0.0 0.0 + 0.0222672064777 0.180769230769 0.240890688259 0.0506072874494 0.0 + 0.0 0.0 0.0 0.0 0.2 0.894736842105 0.808966861598 0.27962962963 0.0 + 0.0 0.0 0.0 0.0 0.0627530364372 0.396761133603 0.636538461538 + 0.186234817814 0.0 0.0 0.0 0.0 0.0 0.0253411306043 0.67962962963 + 0.508771929825 0.12037037037 + + + 0.459329677851 0.133145201828 0.162979842358 0.145019993357 + 0.126123840204 0.241111784625 0.0445601782145 0.3163947787 + 0.273411986092 0.0984173028111 0.132896791033 0.139314067449 + 0.0873821370274 0.0749256171752 + + + + + + + + + 203 4 32 1 240 4 6 5 3 7 2 11 241 5 1 31 241 38 240 38 240 38 240 38 + 240 38 240 38 240 38 240 38 240 38 240 38 240 38 240 38 240 38 240 38 + 240 38 240 38 240 30 6 1 241 31 247 32 248 2 2 26 247 33 119 1 125 36 + 113 5 124 36 113 6 123 36 112 8 122 36 112 9 121 36 112 10 120 36 112 + 10 123 33 112 13 120 33 112 13 121 1 3 28 112 15 126 13 1 8 1 2 112 + 16 114 1 2 2 6 13 1 11 112 16 114 8 1 27 112 16 81 3 30 24 4 8 112 16 + 81 7 26 1 1 34 112 10 1 5 81 12 21 36 112 15 82 28 4 37 112 16 5 2 74 + 69 112 17 1 1 2 4 72 69 112 26 71 37 1 31 112 27 70 52 1 8 2 6 112 28 + 69 37 29 3 112 30 67 35 33 1 112 30 67 35 33 1 112 34 63 35 33 1 112 + 36 61 4 1 1 1 11 1 16 33 1 112 38 59 4 4 27 33 10 4 10 11 2 76 40 58 + 5 1 28 33 37 76 24 1 17 56 34 33 37 76 24 3 17 6 2 46 34 33 37 76 26 + 3 17 4 3 45 34 32 38 76 29 3 16 2 5 42 35 32 4 1 33 76 31 1 25 41 34 + 32 38 76 23 3 5 1 29 36 36 31 38 76 24 3 38 31 37 30 40 75 7 3 15 4 + 36 32 37 29 41 74 6 6 54 31 36 31 40 75 23 1 6 1 6 3 21 36 35 30 41 + 75 32 2 34 28 36 30 41 75 33 3 37 24 35 30 41 40 3 32 34 3 7 3 28 22 + 35 31 39 40 17 19 30 1 5 1 7 4 2 3 25 20 34 31 39 39 24 13 4 3 26 2 + 11 9 26 16 6 5 24 31 39 39 34 3 4 3 27 3 12 7 23 26 27 31 39 39 43 1 + 13 1 19 3 12 1 24 3 2 22 2 2 21 31 39 39 41 3 16 3 11 6 35 5 5 9 4 5 + 2 5 19 30 39 40 41 10 2 1 7 4 10 3 4 3 6 1 24 4 10 1 7 5 5 1 20 31 39 + 39 41 13 8 4 10 7 4 10 20 2 18 6 27 30 39 40 39 15 5 8 14 2 6 9 38 9 + 24 29 40 40 37 19 3 10 21 5 44 6 24 29 40 40 37 25 2 5 20 5 75 29 40 + 40 38 23 6 5 97 29 40 40 39 23 6 7 94 29 40 40 39 24 8 5 35 5 53 29 + 40 40 39 26 28 3 13 9 51 29 40 40 39 28 43 8 20 3 28 29 39 41 39 31 + 44 4 20 8 23 29 39 41 39 32 12 2 31 2 21 19 11 29 7 2 30 41 39 34 11 + 3 29 3 18 28 5 28 7 2 30 41 39 36 10 3 29 1 15 33 4 28 39 41 39 38 9 + 3 24 2 19 2 1 30 3 28 39 41 39 42 57 30 2 28 39 41 39 42 57 30 2 28 + 40 40 39 45 54 60 40 40 38 47 17 3 33 60 40 40 38 49 17 3 31 60 40 40 + 39 50 16 7 26 60 39 41 39 55 15 10 19 60 39 41 37 57 15 10 20 59 3 24 + 11 42 39 56 16 8 20 92 5 42 39 59 10 3 4 2 22 95 3 41 39 59 11 8 22 + 95 3 41 39 60 12 7 20 97 2 41 39 65 1 5 3 5 21 97 1 5 3 32 40 64 3 12 + 21 96 2 5 12 23 40 63 6 4 5 1 21 96 1 6 23 11 41 59 12 3 26 103 26 1 + 49 59 40 103 21 4 1 1 49 60 39 103 21 3 52 60 2 4 33 104 20 1 54 68 + 31 103 75 71 29 103 48 1 27 73 26 103 41 19 16 75 24 103 19 1 20 28 8 + 79 21 102 20 1 18 31 6 81 19 102 40 31 5 83 17 101 41 32 4 85 15 99 + 43 31 5 89 11 99 44 30 6 91 8 100 43 31 4 93 7 100 43 31 4 94 6 100 + 43 31 4 95 5 102 41 32 2 96 5 102 40 131 4 103 40 130 5 103 40 238 41 + 237 41 237 41 238 40 237 41 237 41 237 41 238 40 237 41 237 41 237 41 + 238 40 238 40 238 40 238 40 238 40 238 40 238 40 239 17 3 20 238 5 2 + 9 3 21 239 1 19 18 265 14 267 11 270 8 272 6 274 4 274 4 275 3 275 3 + 276 2 276 2 233 0 + + + + 41978.0 + + + 1.84105960265 + + + 11406.0 + + + 0.159039102227 + + + 0.647856181504 + + + 0.507326247317 0.483447308434 0.579956207858 0.0840802167259 + -0.13091987285 -0.0195874561403 -0.0115162445996 0.0432591469602 + -0.00115143607446 + + + 278.0 + + + 1.01798561151 2.16556291391 + + + 0.230215827338 1.69784172662 1.59712230216 0.517985611511 + 0.76821192053 4.15894039735 3.23178807947 0.370860927152 + + + 151.0 + + + 29.0 185.0 0.25652173913 16.0 5.0 13.0 + + + 0.0 0.993377483444 + + + 0.271713754824 + + + 0.0 0.121662852784 0.559877955759 0.445080091533 0.0532818532819 + 0.600751879699 0.260526315789 0.00526315789474 0.0599294947121 + 0.583142639207 0.494279176201 0.0122044241037 0.428185328185 + 0.461278195489 0.249248120301 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.673374613003 0.916408668731 0.374613003096 + 0.0 0.0 0.0 0.47969924812 0.857142857143 0.696240601504 + 0.281203007519 0.21954887218 0.0 0.207518796992 0.735338345865 + 0.669172932331 0.258646616541 0.236090225564 0.0210526315789 0.0 + 0.0 0.0 0.183458646617 0.815037593985 0.538345864662 + 0.00902255639098 0.0 0.0 0.0 0.0030959752322 0.0510835913313 + 0.496904024768 0.874613003096 0.608359133127 0.0015479876161 0.0 + 0.139682539683 0.0947368421053 0.876691729323 0.89022556391 + 0.357894736842 0.15037593985 0.0466165413534 0.0 0.873015873016 + 0.840601503759 0.386466165414 0.157894736842 0.156390977444 0.0 0.0 + 0.0 0.0 0.0 0.324812030075 0.975939849624 0.827067669173 + 0.0135338345865 0.0 0.0 + + + 0.332942854064 0.262625673679 0.0686796502219 0.0576294516775 + 0.122903899556 0.34419559255 0.170888070694 0.040356663843 + 0.0673419387595 0.122748427414 0.252794069562 0.150228676492 + 0.247383243273 0.0901057706013 + + + + + + + + + 271 1 151 1 125 1 151 1 124 2 150 2 124 2 149 3 1 4 119 2 149 3 1 4 + 119 2 148 9 97 2 1 16 2 3 147 13 83 2 4 29 145 1 1 15 1 3 77 24 1 10 + 145 1 1 2 2 2 1 14 75 35 141 1 3 1 1 10 1 10 75 35 140 3 1 12 4 10 73 + 35 140 2 2 12 5 8 1 1 72 4 1 12 1 16 141 2 2 12 3 1 1 3 7 1 71 4 1 29 + 141 14 5 7 2 6 69 4 1 29 142 1 4 9 8 1 4 4 72 2 2 31 146 8 13 3 72 36 + 146 10 12 2 9 5 58 36 140 1 3 12 12 1 11 5 57 36 140 16 11 4 10 8 53 + 36 7 3 130 13 1 1 15 1 16 6 49 36 6 5 129 15 32 9 46 37 5 6 128 19 20 + 6 2 11 44 37 5 7 127 20 21 9 1 8 43 37 5 8 126 21 20 6 8 8 39 37 5 10 + 124 30 10 10 2 2 3 8 37 37 5 13 121 33 9 6 1 3 8 6 37 32 9 14 121 35 + 16 2 10 6 34 5 1 8 2 12 12 16 121 4 3 29 14 8 4 9 32 1 1 1 2 7 2 6 2 + 4 12 16 129 11 3 9 1 10 9 25 27 12 1 18 7 16 129 9 6 20 10 23 25 15 1 + 18 6 17 118 1 2 1 7 8 10 15 11 2 1 10 3 10 6 4 19 7 2 19 5 17 118 6 5 + 4 15 12 17 11 3 6 8 6 17 7 2 19 5 18 82 1 1 6 27 15 17 12 14 20 9 5 + 18 7 2 19 5 18 1 1 79 26 10 16 15 13 15 13 1 5 3 3 4 2 21 6 2 20 5 19 + 79 21 2 1 4 4 3 19 15 12 14 3 3 5 1 15 1 5 19 28 5 21 79 19 1 3 3 24 + 17 12 4 5 4 4 3 5 3 4 5 11 22 24 4 24 75 19 3 18 2 11 22 30 14 2 3 5 + 25 21 4 20 1 5 73 20 1 19 3 8 25 20 1 2 2 5 19 3 26 21 5 17 3 5 73 40 + 4 7 21 7 6 11 3 1 4 1 21 1 10 5 9 24 4 20 2 10 67 40 7 3 36 19 31 6 7 + 26 4 20 3 3 1 6 67 21 2 1 1 13 9 1 38 21 29 5 9 24 4 34 66 37 8 4 39 + 7 2 12 29 3 11 22 4 26 1 10 6 3 54 18 1 1 1 16 55 3 5 11 26 4 5 1 1 + 26 4 20 3 4 2 9 5 4 53 37 71 7 23 36 4 20 5 24 51 37 64 6 2 2 1 4 21 + 14 1 22 4 22 3 26 49 37 64 12 1 3 20 10 3 1 1 22 3 23 6 26 46 38 64 + 10 2 6 2 1 1 8 6 2 3 2 5 1 2 21 3 23 7 27 44 38 67 28 5 2 14 21 3 23 + 6 32 38 40 69 33 14 1 1 18 3 28 1 30 40 40 71 24 1 1 1 7 14 1 3 1 2 + 11 2 22 3 4 2 1 1 27 39 41 80 14 2 8 22 10 2 22 2 36 39 41 84 20 24 8 + 2 5 4 49 41 41 87 16 25 7 3 5 4 38 2 12 37 43 89 13 24 9 3 38 5 22 33 + 7 2 9 1 22 89 13 26 9 2 38 6 22 32 6 3 32 90 12 28 6 3 40 6 22 32 37 + 93 11 33 1 4 20 1 19 6 27 26 38 93 9 29 2 3 1 4 20 1 21 5 28 24 38 94 + 8 30 5 4 16 1 17 1 10 6 27 21 38 88 3 2 9 31 4 4 7 2 7 1 20 3 6 7 26 + 20 38 88 14 31 4 4 16 1 2 3 16 15 27 19 38 88 3 1 10 32 3 4 16 9 19 + 11 28 17 6 2 29 87 4 6 5 39 16 10 17 6 31 20 6 2 30 86 3 51 4 1 11 12 + 56 2 2 12 6 3 29 140 2 3 11 14 62 8 8 2 28 140 2 5 2 2 8 11 4 1 2 1 + 55 7 38 140 2 10 7 13 4 3 55 6 38 140 2 10 4 23 6 7 43 5 38 140 2 12 + 1 22 6 9 45 3 38 140 2 36 3 13 44 2 38 140 2 37 4 10 46 1 39 139 2 51 + 16 1 1 5 63 140 1 51 22 1 28 1 34 140 1 51 50 3 33 140 1 49 51 7 30 + 141 1 47 31 4 5 2 10 14 23 192 28 4 5 2 10 29 8 194 26 3 13 2 1 36 3 + 196 24 2 15 39 2 198 40 39 1 201 32 1 7 240 31 1 7 241 34 1 2 243 12 + 3 19 244 4 2 6 3 19 245 3 4 5 3 19 246 4 1 6 2 4 1 14 248 8 4 3 1 2 1 + 11 252 4 4 18 253 3 2 11 1 8 253 15 6 5 254 24 252 25 258 21 258 20 + 258 20 249 2 6 22 245 7 4 22 246 32 245 33 247 31 249 8 4 17 251 6 1 + 20 253 25 254 24 258 20 260 18 262 17 264 14 266 12 266 13 267 12 267 + 10 268 10 269 10 268 10 268 10 271 7 273 5 274 4 275 2 168 0 + + + + 34194.0 + + + 2.26016260163 + + + 8025.0 + + + 0.269657320872 + + + 0.864464869917 + + + 0.468858373539 0.4187426587 0.813939540625 0.0731378431493 + -0.112353013186 0.225614470635 0.00816457137768 -0.0893279335134 + 0.00785194764457 + + + 278.0 + + + 1.57194244604 3.52032520325 + + + 1.1654676259 1.48201438849 2.05755395683 1.53956834532 + 3.60975609756 6.89430894309 3.12195121951 0.162601626016 + + + 123.0 + + + 77.0 281.0 0.251231527094 37.0 2.0 12.0 + + + 0.0 0.991869918699 + + + 0.234690296543 + + + 0.0473429951691 0.584385226741 0.276297335203 0.0 0.0257142857143 + 0.477419354839 0.66267281106 0.254838709677 0.300483091787 + 0.226273959794 0.0215053763441 0.0 0.385714285714 0.459447004608 + 0.021198156682 0.0 + + + 0.0 0.192156862745 0.694852941176 0.874509803922 0.33137254902 + 0.00367647058824 0.0 0.0 0.0 0.0 0.0589285714286 0.748571428571 + 0.653333333333 0.1375 0.0 0.0 0.0 0.0 0.0767857142857 + 0.150476190476 0.754285714286 0.817857142857 0.620952380952 + 0.155357142857 0.0304761904762 0.072380952381 0.707142857143 + 0.986666666667 0.975238095238 0.128571428571 0.100952380952 + 0.155357142857 0.349019607843 0.543137254902 0.299632352941 + 0.0352941176471 0.0607843137255 0.0275735294118 0.0 0.0 0.0 + 0.318095238095 0.517857142857 0.0247619047619 0.0 0.0 0.0 0.0 + 0.0780952380952 0.15619047619 0.271428571429 0.489523809524 + 0.0742857142857 0.0 0.0 0.0 0.491428571429 0.817142857143 0.7375 + 0.333333333333 0.0133333333333 0.0 0.0 0.0 + + + 0.36326947519 0.258164020708 0.195161358843 0.0897020454064 + 0.306171088027 0.257899884095 0.225179711992 0.151915560571 + 0.0707858111801 0.128676929345 0.410957374658 0.23565961221 + 0.267549927456 0.174414127033 + + + + + + + + + 11 4 3 2 11 9 31 3 16 5 14 5 15 4 16 2 76 1 17 2 15 4 16 5 15 4 16 4 + 16 4 16 4 16 3 17 3 16 4 16 5 14 6 15 3 17 3 17 3 17 3 17 3 17 3 17 3 + 17 2 18 2 18 2 18 2 18 2 18 3 17 3 18 2 19 1 19 1 16 0 + + + + 820.0 + + + 0.487804878049 + + + 124.0 + + + 1.06451612903 + + + 0.608 + + + 0.288624787776 0.452016129032 0.190359504548 1.06238251485 + -0.378956731899 0.0956146392906 0.200182914666 -0.154079709866 + -0.0110391847299 + + + 20.0 + + + 0.35 0.0243902439024 + + + 0.2 0.4 0.8 0.0 0.0975609756098 0.0 0.0 0.0 + + + 41.0 + + + 1.0 4.0 0.25 4.0 1.0 1.0 + + + 0.0 0.975609756098 + + + 0.151219512195 + + + 0.0 0.42 0.68 0.418181818182 0.06 0.2 0.04 0.0 0.48 0.0 0.0 0.0 + 0.14 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.5 0.5 0.5 0.25 0.0 0.0 0.4 1.0 0.933333333333 + 0.666666666667 0.4 0.5 0.0 0.0 0.5 0.4 0.2 0.0 0.0 0.0 0.0 0.2 + 0.0666666666667 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 0.0 0.0 0.0 + 0.733333333333 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.2 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.333333333333 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.384218454803 0.263173478803 0.150750077434 0.100445091848 + 0.359020313254 0.304458103338 0.206902416245 0.257355486014 + 0.0243649599115 0.162824440909 0.467627844829 0.157685012124 + 0.336771826335 0.114276280812 + + + + + + + + + 131 4 1 1 206 6 2 8 1 1 1 1 6 2 6 3 4 1 170 21 4 15 1 2 169 22 2 14 1 + 4 169 38 1 4 170 5 2 35 170 4 3 35 170 20 2 20 170 20 2 20 170 21 1 + 20 170 20 2 20 170 21 1 20 170 21 2 19 170 20 3 19 170 20 3 19 171 20 + 2 19 171 20 2 19 171 20 1 20 171 41 171 42 170 41 171 38 174 38 174 4 + 1 2 1 29 175 7 2 29 174 7 1 11 2 20 172 40 42 1 129 19 1 20 42 2 128 + 40 42 4 126 40 41 6 125 40 41 7 124 40 41 8 123 40 42 8 122 40 42 9 + 121 40 38 1 3 9 121 7 2 10 2 19 38 14 121 5 4 10 1 19 38 16 119 5 3 + 11 2 18 38 10 126 4 4 7 5 18 38 10 126 15 4 19 38 10 4 2 86 4 29 39 + 38 17 85 8 24 17 4 19 38 18 1 1 82 17 14 19 4 19 13 3 21 21 1 1 79 28 + 1 21 3 21 4 21 7 1 3 21 1 2 78 50 3 34 2 18 3 27 75 39 1 10 4 53 4 27 + 74 38 28 41 4 27 74 38 29 21 1 18 4 27 74 38 30 19 3 17 4 20 1 6 75 + 17 2 18 30 17 5 17 4 20 1 2 2 6 71 3 4 9 3 18 30 16 5 19 3 20 1 12 68 + 4 3 7 6 19 29 16 5 19 3 27 2 4 2 2 65 3 1 1 1 8 1 22 30 16 2 22 3 22 + 2 4 2 8 7 1 56 37 30 40 3 22 4 12 8 2 54 37 30 40 3 21 8 3 1 6 2 2 5 + 2 52 37 30 40 2 22 11 1 2 4 4 5 1 3 50 31 36 40 3 20 11 7 4 12 48 37 + 30 40 3 21 10 8 2 20 40 39 29 40 3 21 10 20 3 4 43 40 27 41 3 5 2 15 + 9 8 3 6 53 40 26 42 3 5 3 14 9 7 63 40 27 43 2 23 8 7 62 39 29 41 3 + 25 8 5 62 17 1 21 28 41 4 25 8 5 23 5 34 7 3 7 1 21 28 41 4 25 5 7 17 + 3 3 12 29 39 27 41 4 21 11 3 22 16 29 37 28 42 3 20 2 2 9 2 24 21 22 + 37 28 41 4 20 2 3 4 1 2 3 25 21 21 37 28 7 1 32 5 20 3 8 1 4 3 1 1 2 + 18 20 21 37 28 40 5 10 1 5 8 12 4 4 14 3 1 19 20 38 28 41 4 16 11 11 + 1 4 20 14 2 1 21 39 28 40 5 15 12 16 18 16 11 3 8 40 28 40 5 3 1 1 1 + 9 13 15 18 19 8 4 7 40 28 40 5 3 4 9 13 23 1 2 6 28 2 4 3 13 5 23 28 + 40 5 3 5 1 2 6 13 24 1 4 2 2 1 48 8 19 28 40 5 3 9 4 16 30 4 26 1 24 + 3 19 28 40 5 3 11 2 18 5 1 23 3 5 2 67 27 41 4 3 12 1 21 9 7 9 3 15 3 + 56 28 41 4 3 36 4 13 6 4 5 17 1 3 14 3 6 5 19 28 41 4 3 37 5 12 3 6 4 + 23 24 2 21 27 41 4 3 39 4 11 13 21 15 2 32 27 41 4 3 41 3 10 13 23 13 + 2 2 3 2 3 22 27 41 4 3 42 4 8 13 26 10 1 4 2 2 3 22 27 20 1 20 4 3 44 + 3 8 14 26 8 3 2 1 5 2 21 27 20 1 20 4 3 46 1 9 9 30 7 8 27 28 18 2 20 + 4 4 60 7 24 10 21 14 28 16 3 3 3 15 4 4 63 3 4 3 18 10 29 6 28 9 22 9 + 5 3 65 2 3 4 10 5 2 6 1 2 32 4 28 4 31 5 4 4 66 2 2 6 1 23 33 4 27 3 + 36 1 4 4 72 28 34 3 27 3 42 3 72 3 3 23 34 1 28 4 41 2 80 10 4 8 63 3 + 42 2 83 6 6 3 2 1 64 3 42 2 83 2 15 1 65 2 42 3 98 3 64 1 43 3 83 2 + 11 5 108 3 83 6 6 6 108 3 83 6 6 6 108 3 82 8 4 7 108 3 80 21 108 3 + 80 22 107 3 81 21 107 2 83 20 107 3 82 20 107 3 82 20 107 3 63 11 7 + 21 107 3 65 12 4 21 107 3 68 9 5 20 107 3 71 1 3 1 3 2 2 19 107 3 79 + 2 2 19 107 3 76 26 107 3 79 23 107 3 82 20 108 2 85 18 107 3 85 17 + 107 3 89 13 107 3 91 11 107 3 93 9 107 2 94 1 1 7 108 1 96 8 107 1 96 + 8 106 2 97 7 106 3 98 5 106 2 99 5 106 3 97 6 106 3 99 4 106 3 100 2 + 107 3 101 1 107 3 210 2 210 2 210 2 210 2 210 2 210 2 210 2 210 2 210 + 2 211 1 211 1 211 1 211 1 204 0 + + + + 30316.0 + + + 1.48251748252 + + + 7709.0 + + + 0.244389674407 + + + 0.847265382225 + + + 0.568299255071 0.417470708281 0.465525966037 0.0912806222328 + -0.0482480104885 -0.176614313098 0.000801404337919 0.0150681239133 + -0.00171941692516 + + + 212.0 + + + 1.49528301887 2.74125874126 + + + 1.62264150943 2.24528301887 1.67924528302 0.433962264151 + 1.09090909091 4.36363636364 4.44755244755 0.811188811189 + + + 143.0 + + + 47.0 202.0 0.239932885906 28.0 3.0 8.0 + + + 0.0 0.993006993007 + + + 0.254288164666 + + + 0.0242587601078 0.503668763103 0.167190775681 0.043501048218 0.0 + 0.126310272537 0.403039832285 0.112683438155 0.457142857143 + 0.607442348008 0.296645702306 0.0429769392034 0.260916442049 + 0.656184486373 0.359014675052 0.0 + + + 0.0 0.0961538461538 0.745726495726 0.82264957265 0.24358974359 + 0.111111111111 0.0982905982906 0.0790598290598 0.0 0.0 + 0.0637860082305 0.40329218107 0.314814814815 0.0 0.0 0.0 0.0 0.0 + 0.0 0.25641025641 0.521367521368 0.0277777777778 0.025641025641 0.0 + 0.0 0.0 0.100823045267 0.148148148148 0.497942386831 0.555555555556 + 0.415637860082 0.00205761316872 0.0113122171946 0.0 0.544871794872 + 0.989316239316 0.730769230769 0.0811965811966 0.149572649573 + 0.025641025641 0.856209150327 0.925925925926 0.588477366255 + 0.318930041152 0.366255144033 0.0164609053498 0.0 0.0 + 0.511312217195 0.551282051282 0.647435897436 0.600427350427 + 0.536324786325 0.0405982905983 0.0 0.0 0.0 0.0 0.444444444444 + 0.930041152263 0.851851851852 0.00205761316872 0.0 0.0 + + + 0.54472943701 0.142362222774 0.161348729076 0.0564510854534 + 0.359896946501 0.271372568631 0.0796095289565 0.259680790755 + 0.0401980891852 0.0394948924396 0.19928820319 0.278737764746 + 0.209640600497 0.0383450839517 + + + + + + + + + 135 1 173 2 137 1 35 2 26 1 110 2 34 2 26 1 110 19 1 5 1 4 6 2 26 1 + 111 32 2 3 26 1 111 37 26 1 111 37 26 1 111 8 3 26 26 2 110 9 1 26 27 + 2 110 36 27 2 110 36 27 2 110 36 27 2 110 36 27 2 110 36 27 2 110 36 + 27 3 109 36 27 3 109 36 27 3 110 35 28 2 110 35 28 2 110 35 28 2 110 + 35 28 2 110 35 28 2 110 35 28 3 109 37 25 5 106 39 26 3 108 37 27 3 + 108 37 28 2 108 37 28 3 9 7 92 37 26 6 6 9 90 38 25 7 7 7 91 38 25 7 + 6 7 93 37 25 7 7 8 91 36 27 5 8 9 91 16 2 16 28 5 8 11 89 34 27 6 8 + 12 88 34 28 5 8 14 86 34 28 5 8 16 84 16 2 17 21 1 2 1 1 6 8 17 1 1 + 81 36 8 9 1 13 8 20 80 67 8 23 77 67 8 26 75 66 8 27 74 66 8 31 70 67 + 7 29 72 1 20 5 1 1 1 38 7 29 102 37 7 31 100 37 7 34 97 37 7 34 97 37 + 7 30 101 37 7 21 1 1 2 5 101 37 7 21 18 1 91 38 7 20 18 4 88 37 8 19 + 19 10 82 38 7 18 22 9 81 38 7 19 23 8 81 37 7 20 26 6 79 37 7 20 30 6 + 75 37 6 21 2 2 29 5 72 38 7 20 3 4 103 38 9 19 4 2 34 2 68 38 11 20 + 36 8 62 38 11 22 1 4 1 2 32 3 61 38 16 27 32 2 60 38 17 28 31 7 10 1 + 43 38 15 11 2 18 33 8 7 4 39 38 7 6 1 13 2 22 31 6 6 4 39 38 6 21 5 + 21 32 4 5 4 4 2 5 1 27 38 6 20 11 16 40 5 4 8 27 39 5 20 16 11 40 5 3 + 9 27 38 6 19 19 10 40 17 26 38 6 17 21 13 37 18 25 39 6 16 22 18 31 + 19 24 39 6 19 13 27 27 4 2 14 24 39 5 61 26 20 24 39 6 4 2 13 2 22 6 + 14 23 21 23 39 6 3 5 11 4 11 2 6 12 10 23 20 23 39 6 3 7 9 1 22 13 11 + 3 6 12 20 24 38 6 3 8 33 16 19 8 19 25 38 6 3 11 29 21 17 6 19 25 33 + 1 4 6 4 14 23 25 10 10 20 24 8 9 23 5 4 16 21 29 11 5 20 24 6 11 2 5 + 1 6 3 1 3 7 4 17 8 43 34 25 2 20 5 3 8 6 4 19 11 40 32 25 2 20 5 1 5 + 1 5 5 4 22 12 38 30 25 2 33 4 5 4 24 12 40 27 24 4 30 4 5 6 82 22 22 + 2 33 2 6 5 83 22 23 1 33 2 7 4 84 20 58 3 6 3 85 20 58 4 5 4 84 21 58 + 2 6 4 84 21 57 3 6 4 83 5 1 1 3 2 2 8 57 4 5 6 81 3 6 4 1 7 58 5 4 5 + 82 3 5 13 58 5 5 3 84 4 1 7 1 7 58 5 5 3 84 11 4 5 58 5 5 3 84 7 1 3 + 4 5 58 5 5 3 85 1 2 3 2 1 5 5 60 3 5 3 89 3 1 3 2 6 59 4 5 3 90 2 2 + 10 60 3 5 4 88 3 1 11 59 4 5 3 90 6 2 6 61 2 5 3 92 5 1 6 61 2 6 2 93 + 12 60 2 6 2 93 12 60 3 4 4 90 14 67 4 92 12 67 4 93 11 68 3 95 10 67 + 3 98 7 67 3 100 5 67 3 101 4 67 3 102 3 67 3 103 2 67 3 104 1 68 2 + 104 1 68 2 173 2 173 2 173 2 173 3 172 3 172 3 172 3 172 3 173 2 173 + 2 173 2 173 2 173 2 173 2 173 2 174 1 174 1 174 1 174 2 173 2 173 2 + 173 2 173 2 173 3 172 3 172 3 172 3 172 3 172 3 171 5 171 4 171 3 172 + 3 172 4 172 2 172 4 172 3 172 2 173 2 174 1 174 1 164 0 + + + + 28000.0 + + + 1.09375 + + + 5909.0 + + + 0.269757996277 + + + 0.819913027452 + + + 0.556906180519 0.361894391989 0.500681211536 0.129379277701 + -0.0592140829077 -0.181548363575 -0.012095967585 0.0416749104283 + 0.0112380344806 + + + 175.0 + + + 1.33714285714 1.7625 + + + 2.24 1.05142857143 1.28 0.777142857143 1.575 2.725 2.75 0.0 + + + 160.0 + + + 18.0 98.0 0.26284348865 19.0 1.0 7.0 + + + 0.0 0.99375 + + + 0.211035714286 + + + 0.0686046511628 0.622674418605 0.145348837209 0.056976744186 0.0 + 0.139772727273 0.04375 0.0 0.6375 0.209659090909 0.303409090909 0.0 + 0.176704545455 0.859659090909 0.113636363636 0.0 + + + 0.0 0.280952380952 0.935714285714 0.72380952381 0.2 0.140476190476 + 0.1 0.133333333333 0.0 0.0 0.263636363636 0.586363636364 + 0.243181818182 0.0 0.0 0.0 0.0 0.0 0.0931818181818 0.315909090909 + 0.0113636363636 0.0 0.0 0.0 0.0 0.0 0.0 0.15 0.163636363636 0.0 0.0 + 0.0 0.361363636364 0.411363636364 0.0863636363636 0.481818181818 + 0.788636363636 0.243181818182 0.0 0.0 0.786363636364 0.990909090909 + 0.263636363636 0.00681818181818 0.0727272727273 0.109090909091 0.0 + 0.0 0.161363636364 0.243181818182 0.961363636364 0.906818181818 + 0.115909090909 0.0 0.0 0.0 0.075 0.227272727273 0.734090909091 + 0.836363636364 0.293181818182 0.0454545454545 0.0 0.0 + + + 0.564341433551 0.120801410592 0.141799892359 0.0434469500094 + 0.283812294102 0.306420677452 0.0278864915592 0.358930400823 + 0.127929925047 0.00450017792421 0.0677409617903 0.280828827883 + 0.17631736229 0.0210175886922 + + + + + + + + + 1 1 35 1 39 1 35 1 39 2 34 1 39 3 5 1 27 1 39 25 11 1 39 37 39 37 39 + 37 39 37 39 37 39 38 38 17 2 19 38 38 39 37 38 38 38 38 38 38 37 40 + 36 42 34 41 35 42 35 41 35 41 36 39 37 38 38 38 38 38 38 38 39 37 39 + 37 30 1 8 37 30 1 8 37 30 1 8 37 30 1 8 39 28 1 8 46 20 2 8 49 1 19 7 + 69 7 40 6 24 7 39 6 18 2 4 7 42 3 1 4 13 3 3 7 47 3 7 1 6 1 4 7 56 5 + 2 2 4 7 56 10 3 7 23 1 18 3 2 3 11 5 3 7 41 5 1 4 12 3 3 7 3 5 3 3 3 + 12 18 4 14 1 3 7 3 31 14 3 18 7 3 31 35 8 2 34 1 1 8 2 20 8 2 39 5 2 + 21 7 2 39 28 7 2 32 2 1 2 2 5 2 21 7 2 31 3 1 10 1 21 7 2 31 36 7 2 + 31 36 7 3 38 3 5 20 7 3 38 4 4 20 7 2 30 38 6 3 29 38 7 2 29 37 8 2 + 29 37 8 2 40 4 2 20 8 2 34 31 9 2 29 36 40 37 38 38 38 38 38 38 38 38 + 38 39 37 39 37 3 1 35 42 3 5 7 2 17 42 3 22 8 43 3 23 7 43 3 24 7 42 + 3 23 9 43 1 24 7 70 6 70 6 69 6 44 1 25 6 44 2 24 6 69 7 71 3 71 5 72 + 5 72 4 72 4 72 3 73 3 73 3 73 3 73 3 73 4 72 4 72 3 73 3 73 3 73 4 72 + 4 72 5 71 5 71 5 71 5 71 5 71 2 5 0 + + + + 8132.0 + + + 0.710280373832 + + + 2991.0 + + + 0.215646940822 + + + 1.43438256659 + + + 0.49891897916 0.381626010106 0.15834241708 0.160078917336 + 0.112719993994 0.00397917798898 0.0155218213705 0.0106375288221 + 0.0237505490841 + + + 76.0 + + + 1.23684210526 0.728971962617 + + + 0.210526315789 0.263157894737 3.21052631579 1.26315789474 + 0.261682242991 1.64485981308 0.822429906542 0.0747663551402 + + + 107.0 + + + 18.0 78.0 0.148148148148 7.0 11.0 6.0 + + + 0.0 0.990654205607 + + + 0.367806197737 + + + 0.815789473684 0.627680311891 0.0487329434698 0.0 0.82995951417 + 0.715399610136 0.0389863547758 0.0 0.0708502024291 0.573099415205 + 0.666666666667 0.00584795321637 0.0 0.514619883041 0.766081871345 + 0.220272904483 + + + 0.675213675214 0.888888888889 0.666666666667 0.376068376068 + 0.213675213675 0.0 0.0 0.0 0.692307692308 1.0 1.0 0.415384615385 + 0.0 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.393162393162 0.0 0.0 0.0 + 0.0 0.653846153846 1.0 1.0 0.423076923077 0.0615384615385 + 0.0857142857143 0.0 0.0 0.025641025641 0.273504273504 0.5 + 0.760683760684 0.752136752137 0.547619047619 0.025641025641 0.0 0.0 + 0.0 0.292857142857 0.776923076923 0.907692307692 0.478571428571 0.0 + 0.0 0.0 0.0 0.357142857143 0.888888888889 1.0 0.492063492063 0.0 + 0.0 0.0 0.0 0.25 0.615384615385 0.8 0.785714285714 0.446153846154 + 0.392857142857 + + + 0.626694903817 0.116197356034 0.0598768064986 0.0218919733899 + 0.446011272297 0.317450635149 0.0468835815869 0.075297776267 + 0.020946710274 0.0283469366514 0.0489485770675 0.446029584354 + 0.109493279879 0.0316020578526 + + + + + + + + + 0 7 34 5 35 5 35 6 33 7 33 7 33 7 33 5 36 4 36 4 37 3 37 2 38 2 38 3 + 37 3 37 5 35 15 3 6 3 4 9 32 9 31 9 31 9 31 9 31 9 31 9 31 9 18 1 12 + 9 31 9 32 8 32 8 32 8 32 7 33 7 33 8 32 8 32 8 32 8 32 8 32 8 32 8 11 + 1 21 8 2 3 5 1 21 7 11 1 1 1 19 7 33 7 33 7 33 7 33 7 33 7 33 7 33 7 + 33 7 33 8 32 8 32 8 32 8 32 8 32 8 34 6 33 7 33 7 3 5 4 1 21 6 3 12 2 + 2 8 1 6 5 4 13 1 1 1 1 4 2 8 4 6 23 7 5 5 24 5 7 4 25 3 8 3 26 4 7 4 + 24 6 6 4 24 6 5 5 24 7 5 4 23 8 6 3 24 7 7 1 25 7 32 8 33 7 33 7 34 6 + 34 5 34 7 33 7 33 7 33 7 33 7 34 6 34 6 34 7 33 7 34 6 34 5 35 5 35 5 + 35 5 36 4 36 4 36 4 36 4 36 4 37 3 38 1 2 0 + + + + 3880.0 + + + 0.412371134021 + + + 1721.0 + + + 0.20918070889 + + + 1.16884699057 + + + 0.510228102326 0.434467606043 0.069381985023 0.214426484737 + 0.056452168395 -0.000738640533243 0.0167223831314 0.00623241833978 + 0.0422386670108 + + + 40.0 + + + 0.7 0.278350515464 + + + 1.5 0.2 0.2 0.9 0.0824742268041 0.247422680412 0.783505154639 0.0 + + + 97.0 + + + 7.0 34.0 0.208530805687 2.0 3.0 2.0 + + + 0.0 0.989690721649 + + + 0.443556701031 + + + 0.554166666667 0.691666666667 0.4625 0.0 0.320833333333 + 0.983333333333 0.45 0.0 0.320833333333 0.995833333333 + 0.516666666667 0.0 0.129166666667 0.533333333333 0.645833333333 + 0.544 + + + 0.833333333333 0.483333333333 0.433333333333 0.383333333333 + 0.233333333333 0.233333333333 0.0 0.0 0.2 0.7 1.0 0.95 0.9 + 0.483333333333 0.0 0.0 0.0 0.666666666667 1.0 0.95 0.883333333333 + 0.0 0.0 0.0 0.0 0.616666666667 1.0 0.983333333333 0.916666666667 + 0.0 0.0 0.0 0.0 0.666666666667 0.983333333333 1.0 0.966666666667 + 0.05 0.0 0.0 0.0 0.616666666667 1.0 1.0 1.0 0.05 0.0 0.0 0.0 + 0.516666666667 0.966666666667 1.0 0.983333333333 0.65 + 0.516666666667 0.107692307692 0.0 0.0 0.0 0.166666666667 + 0.333333333333 0.616666666667 0.8 0.769230769231 + + + 0.672686419998 0.0913970259688 0.0732528128538 0.0268322394819 + 0.674907656046 0.169683000262 0.0644636238553 0.112878133373 + 0.0232121187881 0.0344201528155 0.498699016795 0.163571243375 + 0.119947512913 0.0550585588493 + + + + + + + + + 62 1 73 2 71 3 68 6 40 34 39 35 40 34 40 34 40 34 40 35 39 35 39 18 1 + 16 39 18 1 15 40 35 40 34 40 35 39 35 39 35 39 35 39 35 39 35 39 35 + 39 35 39 36 39 35 39 35 9 1 29 35 8 1 30 35 7 4 27 37 6 5 26 37 6 4 + 27 37 6 4 28 36 6 5 26 37 6 5 26 38 5 6 25 37 6 3 29 36 7 3 28 37 6 3 + 28 37 6 3 28 37 6 3 29 36 6 3 29 36 6 3 29 36 7 2 29 36 7 2 29 36 7 4 + 6 1 20 36 6 19 13 4 6 4 1 10 6 5 6 21 11 3 31 2 6 27 4 4 31 2 6 35 31 + 3 5 35 32 2 5 35 33 1 5 35 33 1 5 35 33 1 5 35 33 1 5 35 33 1 5 35 33 + 1 5 35 33 2 4 35 33 2 4 35 33 2 4 35 34 1 4 36 33 1 4 36 33 1 4 36 33 + 1 4 36 33 2 2 37 38 36 38 36 38 36 38 36 38 36 38 36 38 36 38 36 39 + 36 38 36 37 37 37 37 37 37 36 38 33 3 1 37 32 4 2 36 32 4 2 36 32 4 2 + 36 33 3 2 36 33 3 2 36 33 2 3 36 33 3 1 37 33 2 1 6 14 19 33 2 1 7 15 + 1 1 14 32 3 1 6 22 10 32 3 2 5 22 11 31 3 2 4 24 10 32 1 3 4 26 8 36 + 4 26 8 36 5 23 10 35 7 29 2 36 6 30 3 36 5 68 7 68 5 70 4 71 2 68 0 + + + + 7548.0 + + + 0.725490196078 + + + 3269.0 + + + 0.172223921689 + + + 0.754620777565 + + + 0.452402603117 0.47486893076 0.114751400652 0.199992702872 + -0.0861262151116 0.0023741678275 0.00450853290091 0.00197372333986 + 0.00266109962561 + + + 74.0 + + + 0.527027027027 0.696078431373 + + + 0.972972972973 0.432432432432 0.27027027027 0.27027027027 + 0.078431372549 1.17647058824 0.509803921569 0.980392156863 + + + 102.0 + + + 7.0 29.0 0.20819112628 7.0 3.0 3.0 + + + 0.0 0.990196078431 + + + 0.433094859565 + + + 0.0 0.356837606838 0.942222222222 0.553418803419 0.286315789474 + 0.366396761134 0.981052631579 0.564777327935 0.835555555556 + 0.792735042735 0.00666666666667 0.0790598290598 0.48 0.576923076923 + 0.0357894736842 0.080971659919 + + + 0.0 0.0 0.376068376068 0.581196581197 0.888888888889 0.880341880342 + 0.820512820513 0.547008547009 0.0 0.0 0.0 0.470085470085 1.0 1.0 + 0.846153846154 0.0 0.0 0.0 0.0 0.358974358974 1.0 1.0 + 0.931623931624 0.0 0.475 0.607692307692 0.546153846154 + 0.523076923077 0.925 1.0 1.0 0.307692307692 0.666666666667 1.0 1.0 + 0.564102564103 0.0 0.025641025641 0.128205128205 0.188034188034 + 0.657407407407 0.991452991453 1.0 0.606837606838 0.0 0.0 0.0 0.0 + 0.777777777778 1.0 1.0 0.564102564103 0.0 0.0 0.0 0.0 0.025 + 0.184615384615 0.4 0.384615384615 0.125 0.0153846153846 + 0.253846153846 0.0538461538462 + + + 0.427965541027 0.160888178065 0.0260151530782 0.0121417671132 + 0.0254933874451 0.354105822301 0.0773874878492 0.0704706011974 + 0.0496155791693 0.0146500557166 0.174225881186 0.314049194632 + 0.126704099087 0.0387644651623 + + + + + + + + + 2 3 35 3 35 4 34 5 33 5 32 7 30 10 29 8 30 9 29 10 29 10 27 13 26 10 + 28 10 28 10 2 1 25 15 23 16 23 16 21 18 20 19 20 19 19 19 19 20 17 23 + 16 23 15 24 14 18 4 2 14 17 5 2 14 17 7 1 13 17 7 2 12 3 3 11 28 4 1 + 5 21 1 5 12 4 3 13 2 4 12 4 4 12 2 5 4 3 4 4 5 11 3 4 4 3 2 7 1 14 4 + 3 4 3 3 5 2 15 4 2 3 4 4 3 3 15 5 1 4 3 4 3 4 14 5 1 4 3 5 2 4 14 10 + 3 5 1 6 13 11 2 12 13 11 2 5 1 5 15 3 3 4 1 1 1 10 15 5 6 1 1 5 1 4 + 15 5 8 5 1 5 14 7 4 7 1 6 13 26 12 18 1 7 12 18 1 7 13 2 2 6 1 14 13 + 2 3 20 13 2 4 19 13 2 5 18 13 2 5 18 13 2 9 14 14 1 7 16 14 1 10 13 + 14 2 9 13 14 2 10 12 14 2 10 3 3 6 14 2 17 6 13 3 15 6 14 3 11 11 12 + 8 8 11 10 8 9 11 10 7 12 9 10 7 13 8 11 7 15 5 11 7 15 5 11 9 15 3 10 + 10 28 11 27 13 25 14 24 17 22 17 20 19 19 21 17 24 14 24 15 24 14 25 + 13 26 12 28 10 29 9 19 2 7 10 18 4 6 10 18 4 7 9 16 7 6 9 4 4 7 9 3 + 11 4 4 3 2 2 9 3 11 3 4 10 6 4 11 3 3 11 7 2 12 3 3 11 7 3 12 2 3 11 + 7 4 11 16 5 7 10 7 2 8 2 10 11 5 3 7 2 10 14 1 4 5 5 9 20 4 6 8 20 2 + 6 10 19 3 6 10 20 2 7 9 20 2 5 11 19 7 1 11 19 20 18 20 12 1 5 20 11 + 1 6 7 2 10 12 5 1 4 2 2 1 11 13 25 14 24 15 4 1 18 15 4 4 15 15 4 5 + 15 14 4 3 17 15 2 5 16 23 15 23 15 15 2 10 4 4 3 15 2 12 9 15 2 11 10 + 15 3 10 10 13 5 10 11 13 4 12 8 14 4 13 7 31 7 31 2 1 4 1 0 + + + + 4902.0 + + + 0.294573643411 + + + 2119.0 + + + 0.366682397357 + + + 1.36733797313 + + + 0.491218448274 0.523057751298 0.0392908059111 0.555657579626 + 0.081166139367 0.000812033870658 -0.00416394437454 0.00169199240048 + -0.0216295064672 + + + 38.0 + + + 3.73684210526 0.922480620155 + + + 1.57894736842 5.57894736842 5.26315789474 2.31578947368 + 0.217054263566 1.70542635659 0.744186046512 0.992248062016 + + + 129.0 + + + 20.0 84.0 0.246943765281 14.0 18.0 1.0 + + + 0.0 0.992248062016 + + + 0.43227254182 + + + 0.673611111111 0.326388888889 0.371527777778 0.013468013468 + 0.584375 0.53125 0.775 0.333333333333 0.163194444444 0.791666666667 + 0.489583333333 0.52861952862 0.003125 0.190625 0.315625 + 0.815151515152 + + + 0.609375 0.296875 0.078125 0.0 0.0 0.0 0.0 0.0 0.8 0.9 0.6875 0.425 + 0.7375 0.6 0.05 0.0 0.325 0.9875 0.7625 0.2875 0.9125 0.7375 0.3125 + 0.117647058824 0.05 0.975 0.55 0.525 0.475 0.975 0.4625 + 0.447058823529 0.0 0.5 0.6875 0.828125 0.328125 0.921875 0.75 + 0.264705882353 0.0 0.1875 0.75 0.8875 0.325 0.4375 0.575 + 0.529411764706 0.0 0.0125 0.1375 0.625 0.425 0.7125 1.0 + 0.870588235294 0.0 0.0 0.0 0.0 0.0 0.125 0.625 0.764705882353 + + + 0.457406834272 0.226322360492 0.0223744997321 0.0110064307696 + 0.24300876878 0.405553064123 0.162877470498 0.0098199779912 + 0.0196688225094 0.0201763518339 0.219574387023 0.28468668765 + 0.328677792672 0.120201586214 + + + + + + + + + 76 1 78 2 75 6 75 5 37 1 38 3 38 1 38 4 37 5 34 3 38 5 29 9 36 21 4 4 + 3 12 36 21 3 19 38 21 2 19 38 22 1 19 38 42 38 42 38 21 2 19 39 41 39 + 41 39 41 39 42 38 42 38 42 38 42 38 42 38 42 39 41 39 41 39 41 39 37 + 43 35 56 23 57 23 46 1 1 1 5 27 46 40 40 41 39 4 2 35 39 41 39 41 39 + 41 39 41 39 41 39 41 39 39 41 41 40 40 40 40 40 40 40 19 1 20 39 20 1 + 21 38 42 1 3 34 42 1 8 3 2 23 43 1 19 2 1 1 5 6 23 1 41 3 37 15 25 3 + 19 35 23 3 19 37 1 1 19 2 20 37 1 1 20 1 19 40 20 1 19 40 40 40 20 1 + 19 40 20 1 19 40 40 40 41 39 42 37 43 37 42 38 42 38 43 37 43 38 42 + 38 41 40 4 1 35 40 4 1 35 40 40 40 40 40 4 1 35 40 4 2 34 40 40 40 40 + 40 41 39 41 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 41 39 + 41 39 41 40 40 40 40 40 2 13 25 40 2 30 9 39 2 33 6 39 2 34 4 40 2 35 + 3 40 2 35 3 41 1 35 3 41 1 35 3 77 3 78 3 77 3 78 2 78 2 79 1 79 1 35 + 0 + + + + 8720.0 + + + 0.733944954128 + + + 3631.0 + + + 0.147342329937 + + + 0.716032231175 + + + 0.50129162033 0.474542774667 0.126825510165 0.182414333085 + -0.101889142175 -0.000386652982563 0.00279631878796 + -0.00142148981714 -0.00072520889206 + + + 80.0 + + + 0.6125 0.422018348624 + + + 0.2 0.5 1.05 0.7 0.366972477064 0.587155963303 0.440366972477 + 0.293577981651 + + + 109.0 + + + 11.0 48.0 0.225806451613 6.0 5.0 4.0 + + + 0.0 0.990825688073 + + + 0.416399082569 + + + 0.0 0.133333333333 0.933333333333 0.417857142857 0.174074074074 + 0.162962962963 0.983333333333 0.508928571429 0.681481481481 + 0.918518518519 0.101851851852 0.158928571429 0.672222222222 + 0.833333333333 0.0037037037037 0.0 + + + 0.0 0.0 0.0 0.285714285714 0.935714285714 0.792307692308 0.65 + 0.0857142857143 0.0 0.0 0.0 0.228571428571 1.0 1.0 0.935714285714 + 0.0 0.0 0.0 0.0 0.142857142857 0.935714285714 1.0 1.0 0.0 0.3 + 0.392857142857 0.184615384615 0.314285714286 1.0 1.0 1.0 + 0.0357142857143 0.384615384615 1.0 0.823076923077 0.942857142857 + 0.178571428571 0.230769230769 0.342857142857 0.292857142857 + 0.307692307692 0.985714285714 1.0 0.907142857143 0.0 0.0 0.0 0.0 + 0.369230769231 1.0 1.0 0.857142857143 0.0 0.0 0.0 0.0 + 0.523076923077 0.764285714286 0.623076923077 0.85 0.0142857142857 + 0.0 0.0 0.0 + + + 0.422913050964 0.181695276114 0.0105390020375 0.0103004358046 + 0.00669182704993 0.386065557016 0.0572452679928 0.00474211995634 + 0.00695915645889 0.0167114280833 0.169488723989 0.30271611055 + 0.0803154521637 0.0438910487907 + + + + + + + + + 36 1 137 1 103 1 33 1 103 2 32 1 103 2 32 1 103 2 32 1 103 2 32 1 103 + 2 32 1 103 2 31 2 103 2 31 2 103 3 16 1 13 3 102 31 2 3 102 35 103 35 + 103 35 103 35 103 35 103 35 103 35 103 36 20 2 80 36 19 5 77 37 20 5 + 76 37 19 6 76 38 15 17 67 40 14 17 68 38 16 12 4 1 67 38 16 12 4 2 66 + 38 16 15 2 1 66 8 3 26 16 16 69 8 3 27 14 17 2 2 65 38 15 10 1 5 2 3 + 64 38 15 16 2 4 64 37 15 15 3 5 63 36 16 15 3 6 62 37 15 15 3 6 63 36 + 15 16 2 9 60 35 16 28 59 35 15 30 58 35 14 33 56 35 14 34 55 35 14 35 + 54 35 14 37 52 36 13 38 51 36 13 39 50 36 13 4 1 34 51 35 13 3 2 34 + 51 35 13 3 2 34 51 35 13 3 2 34 51 35 14 2 2 33 16 3 33 35 14 2 2 26 + 3 1 2 1 16 4 32 35 15 1 2 27 21 6 31 21 2 12 18 27 1 2 18 6 31 3 29 3 + 21 28 17 7 30 2 30 3 22 28 15 9 29 2 31 2 23 27 15 11 27 2 31 2 23 22 + 2 3 15 12 26 2 32 2 21 22 2 4 14 14 25 2 32 2 21 21 4 2 18 11 25 2 32 + 2 22 20 5 1 17 10 28 2 31 2 23 19 21 11 29 2 31 1 24 19 21 11 1 1 27 + 2 31 2 24 6 1 11 20 15 59 2 23 6 2 12 19 15 59 2 22 25 14 13 62 2 21 + 26 14 13 63 1 23 24 14 14 7 3 52 1 24 12 1 10 14 15 5 3 1 1 51 1 25 + 21 15 23 2 1 50 1 24 22 14 1 1 21 4 1 49 1 25 21 16 21 54 1 26 21 16 + 20 54 1 27 20 13 25 1 2 2 1 46 1 30 17 13 32 45 1 31 15 13 34 44 2 31 + 13 14 35 43 2 32 12 14 35 43 2 33 11 14 36 42 1 37 3 18 38 41 1 38 2 + 18 39 80 2 1 3 13 40 80 5 12 41 81 4 11 42 81 3 12 41 97 8 1 16 1 15 + 97 7 3 15 1 14 99 5 4 15 1 15 98 5 7 2 1 23 101 4 12 21 102 4 14 17 + 103 5 15 15 104 5 14 15 105 4 14 15 106 4 13 11 1 3 108 2 14 9 3 1 + 125 2 2 5 2 2 129 9 131 7 132 5 134 4 137 1 137 1 137 1 137 1 131 1 + 136 4 135 4 133 6 131 7 131 7 131 7 131 7 131 6 133 5 133 5 136 2 9 0 + + + + + 15870.0 + + + 1.2 + + + 4022.0 + + + 0.235454997514 + + + 1.71235565984 + + + 0.463706911258 0.43939473248 0.403256627408 0.132274151428 + 0.188148290324 0.0297491613093 0.0236823858037 0.0349343963533 + 0.0144716766138 + + + 138.0 + + + 0.586956521739 1.53043478261 + + + 0.115942028986 0.463768115942 0.869565217391 0.869565217391 0.8 + 2.15652173913 2.50434782609 0.452173913043 + + + 115.0 + + + 12.0 47.0 0.265560165975 17.0 4.0 9.0 + + + 0.0 0.991304347826 + + + 0.253434152489 + + + 0.598739495798 0.761663286004 0.0101419878296 0.0 0.170408163265 + 0.522167487685 0.112315270936 0.0 0.00945378151261 0.439148073022 + 0.423935091278 0.0233265720081 0.0 0.0709359605911 0.673891625616 + 0.237438423645 + + + 0.264705882353 0.915966386555 0.843137254902 0.546218487395 + 0.0420168067227 0.0 0.0 0.0 0.214285714286 1.0 1.0 0.634453781513 + 0.0 0.0 0.0 0.0 0.100840336134 0.239495798319 0.262745098039 + 0.239495798319 0.0882352941176 0.043137254902 0.0 0.0 0.0 + 0.34126984127 0.874074074074 0.674603174603 0.31746031746 + 0.00740740740741 0.0 0.0 0.0 0.0378151260504 0.592156862745 + 0.957983193277 0.886554621849 0.41568627451 0.0 0.0 0.0 0.0 + 0.0313725490196 0.193277310924 0.0966386554622 0.305882352941 + 0.0966386554622 0.0 0.0 0.0 0.0 0.302521008403 0.785714285714 + 0.972549019608 0.138655462185 0.0 0.0 0.0 0.0 0.0 0.0873015873016 + 0.840740740741 0.571428571429 0.237037037037 + + + 0.465596975479 0.211855598034 0.091987428228 0.0418497653507 + 0.196090420886 0.416746915042 0.128446981453 0.0786190271995 + 0.032981266627 0.0495055629667 0.140375617483 0.272180558118 + 0.308631696757 0.0752700350023 + + + + + + + + + 2 2 8 4 7 4 7 4 7 4 7 4 6 5 7 4 7 4 6 5 6 5 7 4 8 2 9 2 52 4 7 5 5 6 + 5 6 5 6 5 6 5 6 5 5 6 5 7 4 6 6 5 6 5 6 5 5 6 5 7 4 7 4 7 4 7 5 6 4 7 + 4 7 4 7 4 7 4 7 4 7 5 6 4 7 4 7 4 7 4 7 4 7 4 7 5 6 5 6 5 6 5 6 5 6 5 + 6 5 6 5 6 5 5 7 4 6 6 5 5 7 5 5 6 6 5 6 5 6 4 7 5 6 5 5 5 6 6 5 6 5 6 + 5 7 4 7 3 9 2 9 2 8 4 6 6 5 6 5 5 6 6 5 6 5 6 5 6 5 6 5 6 5 7 4 6 5 7 + 4 7 4 7 4 7 4 7 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 6 5 6 5 6 + 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 6 5 6 5 6 5 6 5 6 5 6 5 7 4 7 5 6 5 6 + 5 6 5 6 5 6 5 6 5 6 5 6 5 6 6 5 6 5 6 4 8 3 8 3 8 3 8 3 7 6 5 6 5 6 5 + 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 6 5 6 5 7 4 7 4 + + + + 1716.0 + + + 0.0705128205128 + + + 788.0 + + + 0.480964467005 + + + 1.07272727273 + + + 0.428045685279 0.532765678729 0.00724545053263 2.34972899622 + 0.0922194459969 0.000227200762557 0.0267021727998 0.00335809112699 + -0.488523520911 + + + 11.0 + + + 2.27272727273 0.0 + + + 3.27272727273 1.09090909091 3.63636363636 0.363636363636 0.0 0.0 + 0.0 0.0 + + + 156.0 + + + 5.0 13.0 0.141025641026 1.0 21.0 1.0 + + + 0.0 0.99358974359 + + + 0.459207459207 + + + 0.602564102564 0.512820512821 0.205128205128 0.0 0.871794871795 + 0.982905982906 0.905982905983 0.196581196581 0.0854700854701 + 0.282051282051 0.888888888889 0.91452991453 0.0 0.0 + 0.00854700854701 0.717948717949 + + + 0.157894736842 0.6 0.0 0.25 0.0 0.0 0.0 0.0 0.631578947368 1.0 1.0 + 0.8 0.842105263158 0.0 0.0 0.0 0.789473684211 1.0 1.0 0.95 1.0 + 0.725 0.184210526316 0.0 0.631578947368 1.0 1.0 1.0 1.0 1.0 + 0.842105263158 0.0 0.0 0.5 0.473684210526 0.85 1.0 1.0 1.0 0.6 0.0 + 0.0 0.0 0.175 0.657894736842 1.0 1.0 0.95 0.0 0.0 0.0 0.0 0.0 0.05 + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.342105263158 0.8 + + + 0.44539612471 0.253984073639 0.0706828372061 0.0244843372667 + 0.343714900535 0.404724588177 0.215298101802 0.0180492236747 + 0.0739918083439 0.0446631802592 0.38796028914 0.349814211309 + 0.371359059132 0.188110661679 + + + + + + + + + 0 4 8 2 1 1 9 1 1 1 9 4 8 4 8 4 8 5 8 6 8 8 9 1 2 0 + + + + 120.0 + + + 1.2 + + + 41.0 + + + 1.21951219512 + + + 1.28571428571 + + + 0.343680709534 0.542005420054 0.18145412864 0.179887117134 + 0.128436906023 0.0719368669782 0.00131659094867 0.0352320445293 + -0.0314293947253 + + + 12.0 + + + 0.0833333333333 0.2 + + + 0.333333333333 0.0 0.0 0.0 0.4 0.4 0.0 0.0 + + + 10.0 + + + 2.0 6.0 0.3 0.0 1.0 1.0 + + + 0.0 0.9 + + + 0.341666666667 + + + 0.833333333333 0.555555555556 0.666666666667 0.111111111111 + 0.333333333333 0.555555555556 0.833333333333 0.555555555556 0.0 0.0 + 0.0 0.555555555556 0.0 0.0 0.0 0.444444444444 + + + 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.5 0.5 1.0 1.0 1.0 0.5 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.5 0.5 1.0 1.0 0.5 0.0 0.0 + 0.0 0.0 0.0 0.0 1.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.5 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 + + + 0.50660317064 0.159358332537 0.146709114695 0.10203971091 + 0.387995785755 0.263093509623 0.087546754491 0.203832525144 + 0.0800788919723 0.115700632579 0.202664447064 0.199157262444 + 0.176986014955 0.0727768924236 + + + + + + + + + 38 1 77 1 77 1 76 1 42 1 34 2 40 2 23 3 1 3 1 5 40 5 8 25 39 39 39 40 + 38 39 40 38 39 38 40 38 41 38 40 38 40 24 1 12 41 38 40 38 18 1 21 38 + 17 4 19 38 17 4 19 38 17 3 20 38 40 38 40 38 40 37 41 37 41 38 40 37 + 41 37 41 37 41 38 39 40 39 38 40 38 40 38 40 39 39 37 42 36 42 36 34 + 1 7 36 34 1 7 36 34 1 7 36 34 1 7 36 33 2 8 35 33 2 8 35 32 3 8 35 12 + 17 2 4 7 36 4 31 7 72 6 71 8 12 4 1 14 39 8 4 27 40 7 4 28 39 7 3 29 + 39 7 3 30 38 7 3 29 39 7 4 28 39 7 4 28 39 7 4 28 39 7 4 28 39 7 4 28 + 39 7 4 28 39 7 4 28 39 8 3 28 39 8 3 28 39 8 2 29 39 8 2 29 39 8 2 29 + 32 15 2 29 39 8 2 29 40 8 1 29 3 2 35 8 1 29 40 8 1 29 40 8 1 29 41 7 + 1 29 41 7 2 28 41 37 41 37 8 1 32 37 41 37 41 37 41 37 41 37 41 37 41 + 37 41 37 42 36 18 1 23 36 17 4 21 36 18 3 13 1 7 36 18 6 4 2 4 2 7 36 + 5 30 7 37 3 32 6 36 4 32 6 73 4 73 6 72 6 72 6 72 6 74 4 74 1 77 4 74 + 4 + + + + 7878.0 + + + 0.772277227723 + + + 3492.0 + + + 0.151202749141 + + + 1.44766879979 + + + 0.488024575653 0.483347651775 0.132799681328 0.167674506178 + 0.102031155804 0.00116358606066 0.00165152227134 0.00347206476736 + -0.00148496783209 + + + 78.0 + + + 0.487179487179 0.584158415842 + + + 0.25641025641 0.153846153846 0.410256410256 0.666666666667 + 0.39603960396 0.475247524752 1.0297029703 0.435643564356 + + + 101.0 + + + 3.0 21.0 0.212996389892 3.0 2.0 3.0 + + + 0.0 0.990099009901 + + + 0.443259710586 + + + 0.72 0.905263157895 0.143157894737 0.0 0.784 0.942 0.198 + 0.123076923077 0.0168421052632 0.174736842105 0.997894736842 + 0.518218623482 0.01 0.17 0.806 0.6 + + + 0.481481481481 0.897435897436 0.898148148148 0.74358974359 + 0.410256410256 0.185185185185 0.0 0.0 0.458333333333 1.0 1.0 + 0.969230769231 0.0 0.0 0.0 0.0 0.525 0.992307692308 1.0 + 0.930769230769 0.0 0.0 0.0 0.0 0.608333333333 0.976923076923 + 0.958333333333 0.884615384615 0.4 0.391666666667 0.4 + 0.0923076923077 0.00925925925926 0.0 0.0185185185185 0.282051282051 + 1.0 0.990740740741 0.991452991453 0.111111111111 0.0 + 0.0538461538462 0.0 0.369230769231 1.0 1.0 0.938461538462 + 0.0384615384615 0.0 0.0384615384615 0.0 0.376923076923 1.0 + 0.991666666667 1.0 0.0538461538462 0.0 0.0 0.0 0.276923076923 0.6 + 0.633333333333 0.823076923077 0.523076923077 + + + 0.489795841633 0.160234150176 0.0096044561212 0.0116048429986 + 0.110504434568 0.365892783533 0.0667901985391 0.0354902875819 + 0.0248489830229 0.0154239788701 0.164214386493 0.338599679727 + 0.127577814144 0.0452299057966 + + + + + + + + + 56 4 9 1 225 2 2 28 2 4 225 38 225 38 224 39 224 20 1 18 224 39 224 + 39 224 39 224 39 225 38 224 6 1 32 225 38 225 38 225 38 225 38 225 38 + 225 38 225 39 224 41 12 5 203 43 11 6 204 41 12 5 205 41 12 6 204 41 + 12 6 204 41 11 11 201 40 10 14 200 38 11 15 199 38 11 15 199 38 11 14 + 200 38 10 16 2 3 194 38 10 20 162 1 32 38 10 23 159 2 31 38 10 25 157 + 2 31 38 9 27 156 2 31 38 10 27 155 2 31 38 10 29 1 2 151 2 29 39 10 + 35 148 3 27 40 10 36 147 11 2 9 2 1 4 41 9 38 145 71 9 39 144 71 9 40 + 143 71 9 40 143 71 9 40 144 43 4 10 5 8 9 40 143 38 28 5 9 5 1 27 3 4 + 143 37 30 4 9 19 2 11 4 5 142 37 30 4 9 34 2 6 142 36 30 4 9 30 7 5 + 12 1 128 37 30 4 9 32 5 3 14 2 127 37 30 4 9 31 7 3 12 5 125 37 30 4 + 9 35 3 3 12 6 124 37 30 4 9 4 1 30 3 3 13 5 124 38 29 4 8 4 5 28 2 1 + 15 4 2 1 122 38 29 4 9 2 9 24 5 1 13 2 3 3 121 38 30 3 9 3 8 24 3 2 + 13 4 1 5 120 38 30 3 8 4 8 24 2 3 12 12 119 38 30 3 8 5 8 19 8 1 12 + 12 78 2 35 1 3 38 29 4 8 4 9 17 23 13 77 2 35 1 3 38 29 4 8 4 8 18 8 + 1 13 14 77 2 34 2 4 2 2 28 34 4 8 5 5 20 8 2 12 14 77 3 33 2 3 38 29 + 4 8 30 7 3 12 14 77 3 28 1 2 4 4 38 40 20 2 9 1 2 3 3 11 15 77 4 7 27 + 4 38 40 19 2 19 11 14 78 38 4 38 40 40 11 14 5 2 71 38 4 38 40 2 2 35 + 12 15 3 5 69 38 4 37 46 34 11 16 3 7 67 38 3 39 47 32 11 27 66 38 3 + 39 48 31 11 27 66 38 3 39 50 29 11 28 65 38 3 39 51 1 3 23 11 30 64 + 38 3 39 53 25 11 31 63 39 3 38 53 25 11 32 62 6 1 32 3 38 55 1 2 18 1 + 1 11 33 62 38 3 38 69 6 14 35 60 38 3 38 71 5 12 37 59 38 3 38 72 4 + 12 37 59 38 3 38 62 4 4 5 13 38 57 39 3 38 61 15 12 38 17 1 39 39 4 + 15 1 21 61 15 12 38 16 3 38 39 3 15 3 21 61 15 10 40 13 7 35 42 1 6 2 + 4 7 20 63 15 8 40 13 9 33 42 2 3 20 15 64 14 8 39 15 6 36 40 3 2 25 + 10 67 11 9 5 3 30 16 8 33 41 30 11 67 3 1 2 13 5 5 27 17 9 32 41 38 3 + 73 1 12 5 12 20 15 13 32 38 40 1 89 5 6 1 3 20 15 14 31 38 131 8 2 21 + 18 14 31 38 130 29 21 14 31 38 128 6 2 23 3 2 15 14 32 38 128 16 3 17 + 15 12 34 38 128 6 3 6 5 16 15 19 27 38 130 3 3 7 6 8 4 1 17 18 28 38 + 136 8 5 8 4 2 15 25 22 38 139 5 4 10 2 3 15 25 23 37 142 2 4 10 3 2 + 15 26 22 37 133 4 4 3 4 4 1 5 3 1 15 30 19 37 135 1 6 1 5 3 2 5 2 2 + 15 30 19 37 148 3 2 9 15 30 19 37 148 4 2 8 14 32 18 37 148 5 1 2 2 4 + 14 34 16 37 149 2 8 3 14 35 15 37 176 36 15 36 176 19 1 17 14 36 153 + 3 20 7 1 30 13 36 154 1 21 7 1 22 6 3 12 36 154 1 21 30 6 5 10 5 1 6 + 18 6 177 29 6 5 10 3 27 6 177 29 6 4 12 2 26 7 178 27 7 5 11 2 27 6 + 152 2 24 27 8 4 11 2 27 6 152 3 23 1 3 24 7 4 11 2 27 3 155 3 30 20 8 + 4 11 1 28 3 155 3 30 20 8 1 44 2 155 2 32 20 52 2 2 1 186 21 6 1 43 6 + 187 21 4 2 44 5 187 19 7 1 48 1 186 20 56 1 189 19 54 1 189 3 1 11 1 + 3 3 2 45 5 186 3 1 2 2 10 2 2 2 4 43 6 182 10 4 19 42 6 177 15 5 18 + 42 5 179 14 3 20 42 5 180 4 3 6 2 21 43 4 181 34 44 4 182 33 44 4 183 + 32 44 4 184 31 45 3 185 3 1 26 45 2 187 2 4 22 244 19 247 11 1 4 249 + 1 11 1 250 2 9 2 262 1 249 2 4 7 245 18 246 17 247 17 247 16 248 15 + 248 4 1 9 251 1 1 9 253 9 256 7 256 7 257 5 260 3 260 3 260 1 59 0 + + + + 39713.0 + + + 1.7417218543 + + + 9423.0 + + + 0.199617956065 + + + 1.82311111111 + + + 0.474791257059 0.443494287028 0.699604362332 0.105232841879 + 0.183209009437 0.0975401229682 0.00559525740496 0.0281078116939 + 0.00246802228771 + + + 263.0 + + + 0.855513307985 2.53642384106 + + + 0.380228136882 1.04942965779 1.24714828897 0.730038022814 + 0.82119205298 4.1059602649 3.94701986755 1.11258278146 + + + 151.0 + + + 22.0 117.0 0.274691358025 32.0 4.0 8.0 + + + 0.0 0.993377483444 + + + 0.237277465817 + + + 0.499376299376 0.637246963563 0.105668016194 0.0 0.209664209664 + 0.530701754386 0.0701754385965 0.0 0.0 0.181020733652 + 0.487639553429 0.112041467305 0.0 0.218899521531 0.562200956938 + 0.179824561404 + + + 0.0121527777778 0.0279605263158 0.935855263158 0.980263157895 + 0.3125 0.0 0.0 0.0 0.942760942761 0.984051036683 0.457735247209 + 0.194577352472 0.113237639553 0.0 0.0 0.0 0.143097643098 + 0.567783094099 0.637958532695 0.355661881978 0.0 0.0 0.0 0.0 0.0 + 0.113237639553 0.593301435407 0.535885167464 0.280701754386 0.0 0.0 + 0.0 0.0 0.0 0.0797448165869 0.644338118022 0.818181818182 + 0.157894736842 0.00318979266348 0.0 0.0 0.0 0.0 0.0 0.336523125997 + 0.637958532695 0.405103668262 0.0398724082935 0.0 0.0 0.0 + 0.185007974482 0.242424242424 0.44019138756 0.381180223285 + 0.234449760766 0.0 0.0 0.0 0.690590111643 0.950558213716 + 0.615629984051 0.103668261563 0.0 + + + 0.306508333434 0.281270528339 0.112577970544 0.0401119242765 + 0.0116225141857 0.429442754932 0.178551269127 0.0570672267671 + 0.0624972410259 0.0579364140892 0.228677645644 0.238447152547 + 0.288810926574 0.117361673962 + + + + + + + + + 3 2 1 2 29 2 39 24 6 8 38 38 38 38 37 39 38 37 39 37 38 38 38 39 37 + 38 38 39 37 39 37 39 37 39 37 39 37 38 38 38 38 38 38 38 38 38 38 38 + 38 38 42 31 40 39 38 3 2 1 2 30 38 38 38 38 38 38 38 38 37 39 38 38 + 38 38 38 37 39 2 1 35 38 38 38 38 38 38 38 40 36 49 4 10 13 67 1 4 4 + 72 4 72 5 71 4 5 1 8 14 44 4 3 27 20 1 21 5 1 29 19 1 21 37 17 2 20 + 37 16 3 20 37 16 2 21 38 37 37 40 37 38 38 38 37 41 34 43 33 44 31 44 + 33 43 35 40 36 40 36 39 36 40 36 40 37 39 36 40 36 40 36 40 37 39 37 + 39 37 39 36 40 36 40 36 40 36 40 36 40 36 40 36 40 36 40 36 40 36 41 + 35 18 8 15 35 7 23 11 35 4 72 2 41 0 + + + + 6384.0 + + + 0.904761904762 + + + 3300.0 + + + 0.119393939394 + + + 1.55004721435 + + + 0.488137373737 0.496487769259 0.122937084453 0.155510611793 + 0.0947237935276 0.000561934332574 -0.00167540387804 + -0.000443284465038 -0.00189863539488 + + + 76.0 + + + 0.434210526316 0.22619047619 + + + 0.631578947368 0.526315789474 0.421052631579 0.157894736842 + 0.142857142857 0.238095238095 0.428571428571 0.0952380952381 + + + 84.0 + + + 9.0 29.0 0.209205020921 1.0 2.0 2.0 + + + 0.0 0.988095238095 + + + 0.516917293233 + + + 0.899749373434 0.929824561404 0.0852130325815 0.0 0.93984962406 + 0.994987468672 0.303258145363 0.243107769424 0.077694235589 + 0.22305764411 0.977443609023 0.847117794486 0.0 0.135338345865 + 0.864661654135 0.749373433584 + + + 0.788888888889 0.888888888889 0.822222222222 0.878787878788 0.2 0.0 + 0.0 0.0 0.9 1.0 1.0 1.0 0.16 0.0 0.0 0.0 0.877777777778 1.0 1.0 1.0 + 0.1 0.0 0.0 0.0 0.87 1.0 0.98 1.0 0.56 0.509090909091 0.46 + 0.463636363636 0.166666666667 0.161616161616 0.1 0.444444444444 1.0 + 1.0 1.0 0.747474747475 0.0 0.0 0.0 0.327272727273 0.91 1.0 1.0 + 0.672727272727 0.0 0.0 0.0 0.343434343434 1.0 1.0 1.0 + 0.737373737374 0.0 0.0 0.0 0.181818181818 0.68 0.8 0.7 0.6 + + + 0.363251804522 0.204233637783 0.0116243506816 0.00839317687883 + 0.0307987929157 0.341997132874 0.0827027092346 0.0186112040205 + 0.01257790206 0.00937299170298 0.0663503844329 0.184150434393 + 0.0649565203064 0.0625292701025 + + + + + + + + + 1 2 5 1 6 2 5 3 4 3 3 4 3 4 3 5 2 14 1 4 1 1 1 4 1 1 1 4 1 19 3 2 5 5 + 2 5 3 1 5 2 5 0 + + + + 147.0 + + + 0.333333333333 + + + 86.0 + + + 0.825581395349 + + + 0.960307298335 + + + 0.391472868217 0.525581395349 0.0353616662684 0.284408919969 + 0.00116970832757 0.00374192671587 -0.0200689134197 0.00281102244027 + -0.0146692175834 + + + 7.0 + + + 1.0 0.142857142857 + + + 1.14285714286 0.0 0.571428571429 0.571428571429 0.0 0.0 + 0.571428571429 0.0 + + + 21.0 + + + 3.0 17.0 0.108108108108 1.0 5.0 2.0 + + + 0.0 0.952380952381 + + + 0.585034013605 + + + 0.0 1.0 0.4 0.833333333333 0.9 1.0 1.0 0.75 0.2 0.8 1.0 + 0.416666666667 0.0 0.4 0.7 0.0 + + + 0.0 0.0 1.0 1.0 0.0 1.0 1.0 0.666666666667 0.0 0.0 1.0 1.0 0.0 1.0 + 1.0 0.666666666667 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 1.0 1.0 + 1.0 1.0 0.666666666667 0.333333333333 0.0 0.666666666667 1.0 1.0 + 1.0 1.0 0.666666666667 0.333333333333 0.0 0.0 0.0 1.0 1.0 1.0 + 0.333333333333 0.333333333333 0.0 0.0 0.0 0.666666666667 0.0 1.0 + 0.0 0.0 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.0 0.0 + + + 0.49651032514 0.178523475527 0.0501259977349 0.0563006681361 + 0.364791282506 0.253963185371 0.128136732322 0.0995365446543 + 0.0798576138243 0.0825751838366 0.157237208446 0.2227071684 + 0.155781561754 0.0939069125056 + + + + + + + + + 316 1 78 2 77 2 77 2 77 2 78 1 78 1 32 1 78 2 44 1 32 2 44 1 32 2 43 + 2 31 3 43 2 31 3 43 2 31 3 44 2 30 3 44 2 30 3 43 4 28 4 43 30 1 5 43 + 36 43 36 43 36 44 35 43 36 43 36 43 36 43 36 44 35 44 35 44 35 44 35 + 44 35 44 35 44 35 44 35 44 35 44 35 44 35 44 35 44 35 44 35 44 35 44 + 35 43 37 42 37 42 38 41 37 30 1 11 37 29 4 10 36 28 5 9 7 5 10 1 15 + 27 6 9 8 2 25 29 5 10 35 30 3 11 36 29 3 11 35 30 3 11 35 30 3 11 35 + 13 1 16 3 12 60 1 6 12 67 12 67 12 67 12 3 13 2 5 3 1 40 12 2 21 1 6 + 37 12 2 29 36 12 2 29 37 12 1 29 37 12 1 29 36 13 1 29 36 13 1 29 36 + 13 1 29 36 13 1 29 36 13 1 29 36 43 36 43 36 43 36 43 36 43 36 43 36 + 44 33 45 36 44 36 42 37 42 36 44 35 44 35 44 35 44 35 44 35 44 35 44 + 35 44 35 44 36 43 36 43 36 43 36 43 36 43 36 43 37 42 36 43 9 6 3 1 + 17 43 2 25 2 3 4 43 2 31 3 43 3 29 3 43 5 27 6 41 5 28 5 42 3 29 4 43 + 3 30 2 45 2 29 4 44 1 30 4 44 1 31 3 75 3 75 5 75 5 73 6 73 6 74 4 76 + 3 9 0 + + + + 9322.0 + + + 0.669491525424 + + + 3218.0 + + + 0.164698570541 + + + 1.26386687797 + + + 0.453359309015 0.518257345168 0.125113440864 0.184616720901 + 0.107324258296 -0.000961121540795 0.00109566104067 + -0.000950970499272 0.00339039251307 + + + 79.0 + + + 0.493670886076 0.440677966102 + + + 0.556962025316 0.506329113924 0.0 0.911392405063 0.338983050847 + 0.474576271186 0.474576271186 0.440677966102 + + + 118.0 + + + 7.0 23.0 0.191729323308 7.0 2.0 3.0 + + + 0.0338983050847 0.991525423729 + + + 0.345204891654 + + + 0.357531760436 0.943859649123 0.123411978221 0.0 0.306896551724 + 0.87 0.379310344828 0.153333333333 0.0 0.035 1.0 0.421666666667 0.0 + 0.075 0.503448275862 0.353333333333 + + + 0.103174603175 0.696296296296 0.888888888889 0.911111111111 + 0.293650793651 0.0 0.0 0.0 0.0 0.6 1.0 0.966666666667 + 0.221428571429 0.0 0.0 0.0 0.0 0.6 1.0 0.993333333333 0.25 0.0 0.0 + 0.0 0.05 0.54 0.7 0.786666666667 0.721428571429 0.56 0.46 + 0.153333333333 0.0 0.0 0.0 0.0666666666667 1.0 1.0 0.826666666667 + 0.0 0.0 0.0 0.0 0.0733333333333 1.0 1.0 0.86 0.0 0.0 0.0 0.0 + 0.266666666667 1.0 0.986666666667 0.913333333333 0.306666666667 0.0 + 0.0 0.0 0.0333333333333 0.0142857142857 0.0133333333333 0.08 + 0.113333333333 + + + 0.536351809534 0.150510780517 0.00555475447858 0.00572309190256 + 0.222648242757 0.364493219379 0.0623936863007 0.0258587827819 + 0.0238422941754 0.0103765546867 0.105047996702 0.403478423669 + 0.123443458757 0.0424428275653 + + + + + + + + + 0 2 2 2 2 2 2 2 2 2 3 3 1 3 1 3 1 2 1 0 + + + + 36.0 + + + 0.444444444444 + + + 21.0 + + + 1.42857142857 + + + 1.05555555556 + + + 0.412698412698 0.535714285714 0.0449195551236 0.29996760609 + 0.0693229672822 0.00423911430583 -0.0105764667673 0.00170327567926 + -0.0385357707039 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 9.0 + + + 0.0 3.0 0.3 0.0 1.0 1.0 + + + 0.0 0.888888888889 + + + 0.583333333333 + + + 1.0 1.0 0.5 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.5 1.0 0.0 0.0 0.5 + 0.666666666667 + + + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 + 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.5 + + + 0.273537820143 0.286768918788 0.150201908079 0.0757657231513 + 0.16357795375 0.257347511367 0.237056999898 0.115003665215 + 0.113810118426 0.123738595371 0.00628349194048 0.274265089123 + 0.109046846232 0.198410953183 + + + + + + + + + 36 1 71 2 71 2 43 1 26 3 42 2 6 1 2 15 1 4 41 32 40 33 40 33 40 33 39 + 34 39 34 39 34 39 34 22 6 10 35 22 6 10 34 23 6 9 36 22 6 9 36 23 4 + 10 35 24 3 11 35 38 35 38 35 38 36 37 36 37 36 37 35 38 35 38 35 37 + 37 36 37 37 36 32 3 2 36 33 3 1 37 32 2 2 36 33 2 1 36 34 2 3 34 34 2 + 3 34 34 2 3 34 33 3 2 35 34 2 3 34 33 3 3 34 32 4 2 35 29 8 1 35 22 + 14 3 34 12 24 3 35 1 34 3 71 2 20 1 49 3 13 16 41 3 9 21 40 3 8 22 40 + 3 7 24 38 4 7 24 37 5 3 28 37 36 39 3 2 29 39 3 2 29 39 4 1 29 38 35 + 39 34 38 35 39 34 39 34 39 34 38 35 37 36 38 35 38 37 1 1 35 34 39 34 + 39 34 39 34 39 34 3 7 29 34 39 34 39 34 39 34 38 35 38 35 38 35 39 34 + 38 35 7 1 30 35 38 35 38 35 39 34 14 4 20 35 7 15 1 3 12 34 6 25 9 34 + 5 4 3 17 10 34 12 17 10 34 4 27 3 2 3 34 2 38 0 + + + + 6570.0 + + + 0.811111111111 + + + 3260.0 + + + 0.153374233129 + + + 1.48421541318 + + + 0.511025903204 0.507641138761 0.126917599204 0.161250452029 + 0.0901963755906 -0.00077342514097 -0.000678866660543 + -0.00307905694386 -0.000634337005633 + + + 73.0 + + + 0.671232876712 0.522222222222 + + + 0.27397260274 0.164383561644 1.15068493151 0.986301369863 + 0.444444444444 0.666666666667 0.488888888889 0.488888888889 + + + 90.0 + + + 8.0 34.0 0.200787401575 3.0 5.0 2.0 + + + 0.0 0.988888888889 + + + 0.496194824962 + + + 0.684343434343 0.932367149758 0.171717171717 0.0 0.825757575758 1.0 + 0.207070707071 0.166666666667 0.0429292929293 0.12077294686 + 0.997474747475 0.760869565217 0.0741626794258 0.240274599542 + 0.918660287081 0.79176201373 + + + 0.343434343434 0.828282828283 0.909090909091 0.824074074074 + 0.505050505051 0.0 0.0 0.0 0.565656565657 1.0 1.0 1.0 + 0.181818181818 0.0 0.0 0.0 0.636363636364 1.0 1.0 1.0 + 0.0808080808081 0.0 0.0 0.0 0.666666666667 1.0 1.0 1.0 + 0.434343434343 0.313131313131 0.333333333333 0.333333333333 + 0.111111111111 0.0606060606061 0.0909090909091 0.157407407407 1.0 + 0.989898989899 0.929292929293 0.685185185185 0.0 0.0 0.0 + 0.222222222222 1.0 1.0 1.0 0.462962962963 0.0 0.222222222222 0.0 + 0.296296296296 1.0 1.0 1.0 0.564814814815 0.0 0.0818181818182 + 0.0909090909091 0.525 0.845454545455 0.845454545455 0.872727272727 + 0.75 + + + 0.369359443038 0.186573002405 0.0167149995736 0.0121501376431 + 0.0530336356169 0.334986187247 0.0796042882854 0.0601424928459 + 0.0452044683743 0.00735079172406 0.102811662624 0.214238429664 + 0.095390211337 0.0539807934068 + + + + + + + + + 0 3 3 4 2 4 2 41 1 4 4 2 3 4 2 4 3 2 2 0 + + + + 90.0 + + + 0.4 + + + 68.0 + + + 0.720588235294 + + + 0.880503144654 + + + 0.444117647059 0.46743697479 0.0341027630775 0.214720511907 + 0.0107781650723 0.00109926905016 -0.00481744801059 + -0.00276918611141 0.018445484882 + + + 6.0 + + + 0.333333333333 0.0 + + + 0.0 0.666666666667 0.0 0.666666666667 0.0 0.0 0.0 0.0 + + + 15.0 + + + 3.0 3.0 0.1 0.0 1.0 3.0 + + + 0.0 0.933333333333 + + + 0.755555555556 + + + 1.0 1.0 1.0 0.0 1.0 1.0 1.0 0.75 0.666666666667 1.0 1.0 1.0 0.0 1.0 + 0.625 0.25 + + + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 0.5 0.5 0.5 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 + + + 0.391239725793 0.206039699331 0.0795026257667 0.0509001479735 + 0.247585409302 0.177295920128 0.164274968779 0.0425522851056 + 0.0559466309646 0.0734645509389 0.0834034474193 0.0821142994325 + 0.112326148736 0.128188385634 + + + + + + + + + 63 1 131 2 131 1 130 3 29 1 99 12 1 14 5 1 98 31 3 1 96 32 1 3 96 36 + 96 36 96 15 1 20 97 12 2 21 97 12 2 4 1 16 97 11 5 19 97 16 1 18 97 + 35 97 35 97 35 97 35 97 36 96 36 96 36 97 34 98 34 98 34 98 35 99 1 2 + 1 4 25 97 35 97 35 97 35 97 35 97 35 98 34 98 34 98 7 3 24 98 34 98 8 + 1 25 98 8 2 24 98 34 98 34 29 1 69 33 29 1 69 33 29 1 60 5 3 34 29 1 + 35 1 6 4 2 9 1 8 2 34 28 2 35 2 4 25 3 11 1 3 7 12 13 1 13 2 35 2 3 + 26 3 2 27 6 3 1 5 6 1 12 35 3 1 27 3 2 29 33 34 17 1 14 2 2 29 33 34 + 17 2 14 1 2 30 32 34 17 2 17 30 32 34 17 2 17 30 32 35 1 5 8 5 16 30 + 32 34 2 5 8 5 16 30 32 34 4 2 11 3 16 30 32 35 17 1 17 30 32 35 16 2 + 17 30 32 35 16 2 17 30 32 35 17 1 18 28 34 32 40 26 35 31 40 26 35 31 + 40 26 35 31 39 27 35 32 38 27 34 34 37 27 34 34 38 27 33 35 36 29 32 + 35 36 29 32 35 36 29 32 35 36 29 32 3 1 31 36 29 32 2 2 31 14 1 21 29 + 32 3 1 32 5 1 4 5 20 29 32 3 2 31 5 2 3 1 24 29 33 2 3 15 1 8 11 2 28 + 29 33 2 7 2 4 3 5 4 3 2 7 3 29 28 32 3 14 1 6 4 3 2 39 28 32 3 21 3 + 45 28 32 3 69 28 32 3 69 28 33 2 69 28 33 2 69 28 33 3 37 5 26 29 32 + 3 3 3 30 12 2 1 5 1 2 4 5 29 32 3 3 2 31 27 5 29 12 1 19 3 37 28 3 29 + 7 1 2 5 17 3 36 30 2 28 7 15 2 3 6 3 36 60 2 2 1 27 1 3 36 60 2 30 2 + 2 36 61 1 30 2 2 35 62 1 31 1 2 35 94 1 2 35 94 1 2 35 94 1 2 36 93 1 + 2 36 93 1 2 36 93 1 2 36 96 36 96 36 97 35 97 36 96 36 96 35 97 36 96 + 36 96 36 96 36 96 36 96 37 95 37 95 37 96 36 96 36 96 10 1 25 96 1 22 + 3 1 9 96 1 30 5 96 1 31 4 96 1 32 4 95 1 32 4 95 1 31 7 92 3 31 5 127 + 5 127 6 127 4 128 4 129 3 130 2 130 2 90 0 + + + + 16764.0 + + + 1.03937007874 + + + 5516.0 + + + 0.163343002175 + + + 0.744238336144 + + + 0.494072759882 0.48850098415 0.238843365599 0.142244270312 + -0.0879662793837 0.00803557857554 -0.0169530361955 0.0395151286644 + -0.0090783770318 + + + 132.0 + + + 0.606060606061 1.22834645669 + + + 0.363636363636 1.15151515152 0.848484848485 0.0606060606061 + 0.409448818898 1.88976377953 2.26771653543 0.283464566929 + + + 127.0 + + + 19.0 74.0 0.228855721393 8.0 2.0 5.0 + + + 0.0 0.992125984252 + + + 0.329038415653 + + + 0.0 0.0369318181818 0.642992424242 0.523674242424 0.103616813294 + 0.61553030303 0.61553030303 0.161931818182 0.800586510264 + 0.462121212121 0.0918560606061 0.0 0.0 0.549242424242 + 0.647727272727 0.0 + + + 0.0 0.0 0.0 0.0 0.3671875 0.859375 0.8203125 0.125 0.0 0.0 + 0.0330882352941 0.110294117647 0.341911764706 1.0 1.0 + 0.143382352941 0.0 0.0 0.25 0.90625 0.93359375 0.3671875 0.37109375 + 0.296875 0.211764705882 0.191176470588 0.352941176471 + 0.948529411765 1.0 0.165441176471 0.0 0.0 0.679166666667 0.9765625 + 0.7890625 0.125 0.21484375 0.08203125 0.0 0.0 0.611764705882 + 0.919117647059 0.790441176471 0.143382352941 0.0625 0.0147058823529 + 0.0 0.0 0.0 0.0 0.16015625 1.0 1.0 0.328125 0.0 0.0 0.0 0.0 + 0.176470588235 0.863970588235 0.897058823529 0.367647058824 0.0 0.0 + + + 0.401416560563 0.145759697151 0.0803461228622 0.118690681188 + 0.0196894027133 0.27688308525 0.0162363336377 0.144346367127 + 0.245278694017 0.0803379332606 0.0635260764978 0.128097966628 + 0.0250354553181 0.0259920573934 + + + + + + + + + 762 1 212 3 96 1 82 9 2 24 96 1 82 35 96 1 82 35 96 1 2 1 80 34 96 5 + 79 34 96 6 78 34 96 7 77 34 96 6 78 34 96 8 76 34 96 9 75 34 96 8 76 + 34 96 9 75 34 95 11 74 34 95 10 75 34 95 11 74 34 95 11 74 34 95 11 + 74 34 95 11 75 33 96 10 75 33 95 11 16 1 58 34 94 11 17 2 56 34 92 14 + 11 2 3 4 53 35 24 2 65 15 10 12 51 34 22 10 60 14 4 3 4 14 49 20 1 15 + 21 9 62 12 2 6 3 17 1 3 42 37 20 7 64 21 1 22 43 35 21 9 61 44 43 37 + 19 11 59 20 1 5 3 19 39 38 18 12 59 23 1 4 3 11 3 4 38 38 16 11 1 1 + 60 23 3 24 37 38 16 10 8 2 54 22 5 28 33 35 17 11 2 6 56 21 7 29 30 + 35 18 19 56 21 12 25 29 34 18 20 55 21 12 27 27 34 18 21 55 20 12 31 + 23 34 17 23 54 22 7 36 21 34 17 24 54 16 1 6 6 39 17 34 17 25 53 26 + 10 34 15 34 16 27 52 8 1 18 11 36 11 34 16 28 51 8 2 17 10 40 8 34 15 + 30 49 28 7 49 1 35 15 31 49 119 15 32 48 91 4 4 15 5 14 34 47 89 27 3 + 14 35 46 21 2 66 28 2 13 37 44 21 4 12 1 15 2 35 28 2 13 37 44 21 5 + 27 3 4 1 29 28 3 11 2 1 15 1 1 3 15 45 20 6 32 7 24 29 1 15 1 3 10 7 + 14 45 5 1 13 8 33 9 20 45 1 6 6 6 1 1 6 2 5 46 6 3 11 1 4 3 36 5 20 + 44 2 5 7 5 6 5 2 1 2 46 5 7 51 6 21 43 3 3 9 4 6 5 1 50 5 8 54 3 20 + 28 2 19 20 4 1 50 5 10 2 3 14 1 34 1 20 28 2 19 20 24 4 28 4 10 2 6 + 11 4 52 28 2 20 22 21 5 27 4 21 40 3 21 28 2 22 3 1 15 21 7 26 4 23 + 15 3 44 27 3 10 4 12 10 1 3 4 1 17 7 26 4 25 14 7 40 26 3 10 5 11 9 9 + 1 16 10 25 3 26 15 8 37 27 2 10 5 12 7 9 2 16 10 24 4 28 17 6 35 27 2 + 11 3 15 5 9 2 16 11 23 4 30 17 7 32 27 2 30 4 26 12 23 4 32 16 12 26 + 27 3 30 3 26 12 23 4 35 15 13 23 27 3 59 11 24 4 36 11 3 3 12 3 3 15 + 27 3 58 12 23 5 39 13 12 22 27 3 15 1 19 1 22 11 24 5 44 8 12 22 27 3 + 14 2 9 1 8 8 15 12 24 5 41 1 3 8 12 22 26 3 15 2 1 3 2 6 5 8 15 11 26 + 5 39 16 9 22 26 3 18 1 7 15 16 11 26 5 44 16 4 22 27 2 26 5 4 6 15 12 + 26 5 64 22 27 2 27 3 5 4 17 12 10 2 14 3 1 1 65 21 27 2 27 4 3 5 16 + 17 5 4 13 3 1 1 62 1 2 21 27 2 21 3 1 15 17 24 13 5 60 26 27 2 22 2 1 + 15 17 11 1 13 12 5 48 10 2 26 27 1 24 17 16 12 1 11 14 5 48 38 53 16 + 14 25 15 5 50 37 52 14 15 27 1 3 10 5 53 34 53 13 15 31 11 4 55 32 54 + 11 16 32 10 4 59 28 55 10 15 14 1 18 10 3 62 26 57 7 17 13 2 18 9 4 + 64 23 58 1 4 1 16 14 3 17 9 4 68 19 59 5 15 15 3 18 8 4 71 16 59 4 16 + 14 5 17 8 4 76 12 58 5 15 14 5 18 6 5 77 12 76 14 5 19 7 4 79 11 75 + 15 2 20 7 6 79 9 76 15 1 21 7 6 80 8 76 17 2 18 8 4 81 9 77 14 5 15 9 + 5 79 10 87 2 8 1 1 12 9 6 81 6 103 2 1 6 9 7 82 4 78 4 21 7 11 7 163 + 6 19 8 11 9 161 9 17 2 2 3 11 8 163 9 22 1 11 9 164 4 37 9 165 2 38 8 + 207 5 194 1 13 6 193 2 14 4 193 2 13 7 192 2 12 8 180 1 8 4 13 8 179 + 2 8 4 13 8 179 1 11 1 14 9 178 1 11 1 15 9 188 2 16 9 204 9 206 8 183 + 3 21 7 183 3 21 7 183 4 20 4 1 1 184 4 210 4 209 5 209 4 23 2 1 1 185 + 1 23 5 185 1 23 5 209 5 210 4 210 4 210 4 211 3 211 3 200 0 + + + + 27606.0 + + + 1.65891472868 + + + 6998.0 + + + 0.270791654759 + + + 1.29472192015 + + + 0.439232134735 0.413399364104 0.489324945827 0.0853520632003 + 0.0456467235474 0.0810039174219 0.00412445827907 0.0643843932503 + 0.00775517556098 + + + 214.0 + + + 1.39252336449 2.95348837209 + + + 1.81308411215 1.47663551402 1.14018691589 1.14018691589 + 1.45736434109 4.80620155039 4.62015503876 0.93023255814 + + + 129.0 + + + 19.0 120.0 0.286674132139 38.0 6.0 12.0 + + + 0.0232558139535 0.992248062016 + + + 0.253495616895 + + + 0.215801886792 0.716981132075 0.115566037736 0.111492281304 + 0.294560185185 0.66724537037 0.432291666667 0.0 0.276533018868 + 0.482900943396 0.100235849057 0.0 0.0 0.148148148148 0.465856481481 + 0.0544332210999 + + + 0.129807692308 0.53125 0.826923076923 0.478365384615 0.177884615385 + 0.180288461538 0.295673076923 0.162895927602 0.0 0.210648148148 + 0.75 0.80787037037 0.108796296296 0.0 0.0 0.0 0.0 0.0 + 0.539351851852 0.872685185185 0.513888888889 0.125 0.0 0.0 + 0.486111111111 0.69212962963 0.710648148148 0.546296296296 + 0.615740740741 0.474537037037 0.0 0.0 0.40625 0.605769230769 + 0.632211538462 0.0697115384615 0.0817307692308 0.0 0.0 0.0 0.0 + 0.111111111111 0.666666666667 0.553240740741 0.224537037037 + 0.0902777777778 0.0 0.0 0.0 0.0 0.18287037037 0.291666666667 0.3125 + 0.340277777778 0.0694444444444 0.0 0.0 0.0 0.0 0.118055555556 + 0.456018518519 0.75462962963 0.087962962963 0.0631808278867 + + + 0.477790559423 0.171933078055 0.122169405789 0.0721491787358 + 0.337633315011 0.264248591472 0.109806929963 0.128972916623 + 0.0535280771118 0.075852797648 0.281556151289 0.16308002122 + 0.195161741939 0.106359183551 + + + + + + + + + 39 6 112 14 12 1 2 1 90 31 89 31 1 3 84 37 82 38 15 8 1 3 55 38 10 28 + 6 1 37 38 8 37 37 24 2 12 8 37 37 3 1 19 3 12 8 3 1 34 36 38 8 3 1 33 + 37 38 8 37 37 38 7 4 1 33 37 38 7 4 1 33 37 38 7 38 37 38 7 38 37 38 + 7 38 37 38 7 38 37 38 7 38 37 37 8 38 37 37 8 38 37 38 7 38 37 37 8 + 38 37 38 7 38 37 38 7 39 35 38 1 1 5 41 34 39 8 39 35 37 9 15 1 22 36 + 38 9 36 37 39 7 38 35 37 8 41 35 35 9 39 37 2 3 2 2 25 11 39 36 1 9 + 13 1 10 11 39 37 1 8 12 3 8 12 39 37 6 2 24 12 39 37 33 11 38 38 7 1 + 9 1 15 11 38 38 7 2 23 12 38 38 7 2 24 11 38 38 33 11 38 38 35 9 38 + 38 16 1 17 10 38 39 15 1 18 9 38 43 11 1 18 9 39 53 1 5 13 10 38 66 7 + 9 37 68 3 12 37 68 3 12 37 68 3 12 38 68 2 12 4 14 1 1 1 2 15 68 2 12 + 3 26 1 1 7 68 2 12 3 30 5 68 2 12 3 31 4 68 2 12 3 32 3 69 1 13 2 32 + 3 69 1 14 1 32 3 69 1 13 1 33 3 69 1 47 3 69 1 48 2 69 2 47 2 69 2 + 118 2 118 2 118 2 119 1 119 1 119 1 81 1 37 1 81 5 33 1 81 8 30 1 81 + 9 29 2 80 20 17 3 80 20 2 7 8 3 80 21 1 14 1 3 80 20 2 15 1 3 79 20 2 + 19 79 20 2 19 79 18 4 19 80 19 2 19 80 40 80 40 80 40 80 19 1 20 80 + 40 80 40 80 41 78 44 75 45 76 43 77 43 77 43 78 41 79 41 79 41 80 4 1 + 1 1 33 80 3 5 32 80 6 1 33 80 40 80 40 80 40 80 33 1 6 81 39 81 39 81 + 39 81 40 80 40 80 19 1 20 80 19 1 20 80 7 1 32 81 6 2 31 81 5 4 30 81 + 5 3 31 81 6 1 10 1 21 81 1 4 10 4 20 81 1 10 4 5 19 103 17 106 15 113 + 7 115 5 117 3 118 2 1486 1 119 2 118 5 30 2 82 10 1 1 24 1 84 16 19 1 + 84 23 13 1 83 24 1 4 6 2 83 31 4 2 83 37 83 37 83 17 2 19 82 16 4 18 + 83 15 4 18 83 17 1 19 83 37 82 40 80 40 80 39 80 40 80 41 81 37 84 36 + 84 36 84 37 83 37 83 37 83 3 4 30 83 5 1 31 83 37 84 5 1 30 84 4 3 29 + 85 4 1 30 85 6 1 28 85 35 85 35 85 35 85 36 84 36 85 3 2 1 2 27 85 4 + 6 12 1 12 85 6 5 15 3 6 85 7 1 19 1 7 85 7 1 27 85 7 3 25 85 7 4 24 + 86 6 4 24 86 34 86 3 3 28 86 2 11 21 87 1 14 18 107 13 112 8 116 4 + 117 4 117 3 117 3 118 2 118 2 78 0 + + + + 23040.0 + + + 0.625 + + + 6708.0 + + + 0.161896243292 + + + 0.542193026781 + + + 0.483346111253 0.3976716088 0.133818020161 0.478533418903 + -0.177192518724 0.0136089085786 -0.0699091158278 0.00781353098222 + 0.150138295013 + + + 120.0 + + + 1.25 0.84375 + + + 0.866666666667 2.7 1.2 0.233333333333 1.5 0.875 0.479166666667 + 0.520833333333 + + + 192.0 + + + 23.0 132.0 0.202046035806 9.0 9.0 3.0 + + + 0.0 0.994791666667 + + + 0.291145833333 + + + 0.0 0.0 0.120138888889 0.670138888889 0.720833333333 0.472222222222 + 0.352083333333 0.306944444444 0.640277777778 0.250694444444 + 0.219444444444 0.0 0.829166666667 0.0763888888889 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.286111111111 0.802777777778 0.297222222222 + 0.0 0.0 0.0 0.0 0.0 0.194444444444 0.969444444444 0.611111111111 + 0.633333333333 0.463888888889 0.0638888888889 0.894444444444 + 0.527777777778 0.075 0.652777777778 0.575 0.925 0.861111111111 0.0 + 0.930555555556 0.805555555556 0.0 0.0 0.0 0.766666666667 + 0.669444444444 0.108333333333 0.788888888889 0.863888888889 + 0.0138888888889 0.0 0.0 0.472222222222 0.652777777778 + 0.105555555556 0.0 0.0 0.0 0.0 0.0 0.775 0.997222222222 + 0.0916666666667 0.0 0.0 0.0 0.0 0.0 0.636111111111 0.908333333333 + 0.213888888889 0.0 0.0 0.0 0.0 0.0 + + + 0.402081548046 0.223172770698 0.208177100362 0.106258040171 + 0.136926489363 0.347136635552 0.137911128371 0.159114132028 + 0.0273517497521 0.127226217567 0.0890300535282 0.218943639729 + 0.185073195954 0.0990633562108 + + + + + + + + + 25 12 4 2 38 19 5 18 37 20 3 19 36 21 2 20 37 20 2 20 36 21 2 20 37 3 + 1 15 3 19 38 3 2 15 1 20 38 41 38 3 1 24 1 11 39 41 38 41 38 41 38 41 + 38 41 38 41 38 41 38 41 38 41 38 41 38 41 38 41 39 40 38 41 38 41 36 + 44 36 43 36 5 3 35 37 4 2 35 34 2 2 42 30 4 5 38 41 1 4 33 40 1 8 30 + 45 34 44 35 34 2 4 39 33 3 4 1 1 37 33 3 4 39 13 4 2 8 2 7 4 40 3 6 1 + 25 4 54 1 20 4 54 2 19 4 75 4 75 4 17 3 7 2 46 4 5 3 4 22 41 5 3 30 + 41 5 2 31 19 3 19 5 1 32 19 2 20 5 1 32 20 1 20 38 20 1 20 38 19 2 20 + 38 20 1 20 37 21 2 19 37 21 1 20 37 20 2 20 37 20 2 20 37 19 3 20 37 + 20 2 20 37 20 2 14 43 21 1 15 42 4 1 36 38 20 2 20 37 20 1 21 38 5 2 + 12 2 20 38 6 1 12 1 21 40 17 1 21 42 15 2 20 44 13 2 20 45 12 2 20 37 + 3 6 10 3 20 37 6 1 12 3 20 37 20 2 20 37 19 3 19 38 41 38 41 38 42 37 + 42 37 42 38 10 6 24 39 8 10 22 39 5 15 6 2 12 40 4 33 3 39 4 34 2 39 + 4 35 1 39 4 76 3 76 3 75 3 35 2 77 2 77 3 76 3 77 1 1 0 + + + + 7268.0 + + + 0.858695652174 + + + 3412.0 + + + 0.168522860492 + + + 1.45395869191 + + + 0.509645444434 0.442130554088 0.133092750643 0.149623060207 + 0.094185512837 0.00127948910635 0.000812763206834 0.000435050079385 + 0.00284484315206 + + + 79.0 + + + 0.911392405063 0.826086956522 + + + 1.01265822785 0.303797468354 1.3164556962 0.708860759494 + 0.521739130435 0.95652173913 1.21739130435 0.608695652174 + + + 92.0 + + + 13.0 62.0 0.225543478261 6.0 2.0 5.0 + + + 0.0 0.989130434783 + + + 0.469455145845 + + + 0.848970251716 0.755148741419 0.0091533180778 0.0 0.941304347826 + 0.910869565217 0.10652173913 0.0826086956522 0.204347826087 + 0.463043478261 0.884782608696 0.458695652174 0.0 0.39347826087 + 0.923913043478 0.515217391304 + + + 0.686868686869 0.768518518519 0.565656565657 0.583333333333 + 0.040404040404 0.0 0.0 0.0 0.909090909091 1.0 0.972727272727 + 0.866666666667 0.0 0.0 0.0 0.0 0.781818181818 1.0 1.0 + 0.808333333333 0.0 0.0 0.0 0.0 0.972727272727 1.0 1.0 0.85 + 0.245454545455 0.183333333333 0.281818181818 0.0583333333333 + 0.418181818182 0.4 0.4 0.741666666667 1.0 0.875 0.881818181818 + 0.191666666667 0.0 0.0 0.0 0.666666666667 0.818181818182 0.85 + 0.809090909091 0.0166666666667 0.0 0.0 0.0 0.733333333333 1.0 1.0 + 1.0 0.0666666666667 0.0 0.0 0.0545454545455 0.725 0.9 0.8 + 0.854545454545 0.208333333333 + + + 0.499396676017 0.152341992246 0.0115153796783 0.00190130931912 + 0.117345668969 0.362260650586 0.0490092524529 0.00915516654481 + 0.0167627646807 0.00575345745639 0.137580765517 0.319901216679 + 0.0911239985784 0.0342178276168 + + + + + + + + + 2 5 10 6 10 6 9 6 10 5 11 4 43 1 14 2 14 1 15 1 15 1 14 2 14 2 14 2 + 14 2 14 2 14 2 14 1 15 1 14 2 14 2 14 2 14 2 14 2 14 2 14 2 14 2 13 2 + 14 2 14 2 14 2 14 2 13 3 13 3 13 3 13 3 13 3 13 2 14 2 14 2 14 2 14 2 + 13 3 78 1 14 3 13 3 13 3 12 4 12 3 13 3 13 3 13 3 13 3 13 3 13 2 1 1 + 11 3 13 3 12 4 12 5 11 6 10 4 12 4 12 4 13 3 12 4 13 2 14 2 13 3 13 3 + 13 3 13 3 13 3 13 3 13 3 13 3 13 2 14 2 14 2 14 2 13 3 13 3 14 2 14 2 + 13 3 13 3 13 3 13 3 13 3 13 3 12 4 12 4 12 4 13 3 13 3 12 4 12 4 12 4 + 12 4 12 4 12 4 13 3 13 2 15 1 15 1 29 4 12 4 11 5 12 4 12 4 11 5 11 5 + 11 4 12 4 12 4 12 5 10 6 11 5 11 5 11 5 10 7 10 5 11 5 11 5 11 5 11 4 + 12 5 11 5 11 5 11 5 11 5 11 5 11 5 11 4 1 1 10 5 12 4 11 5 11 5 11 5 + 11 5 11 6 10 6 10 5 11 5 11 5 11 5 11 5 11 6 10 6 10 6 10 6 10 6 10 6 + 10 6 10 6 10 6 11 4 12 4 14 1 9 0 + + + + 2624.0 + + + 0.0975609756098 + + + 563.0 + + + 0.738898756661 + + + 0.837122969838 + + + 0.438247483718 0.583410519892 0.0145556535225 4.02983515929 + -0.123381089197 0.00125063056375 0.0746337648984 -0.0249432026519 + -3.5738764044 + + + 16.0 + + + 1.8125 0.0121951219512 + + + 1.25 3.5 2.5 0.0 0.0 0.0243902439024 0.0 0.0243902439024 + + + 164.0 + + + 1.0 7.0 0.23417721519 5.0 8.0 1.0 + + + 0.0 0.993902439024 + + + 0.214557926829 + + + 0.121951219512 0.0 0.0609756097561 0.231707317073 0.0731707317073 + 0.237804878049 0.792682926829 0.969512195122 0.128048780488 + 0.457317073171 0.0 0.0792682926829 0.280487804878 0.0 0.0 0.0 + + + 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 0.0 0.238095238095 + 0.5 0.428571428571 0.225 0.0 0.0 0.0 0.55 0.809523809524 1.0 + 0.952380952381 0.075 0.0 0.025 0.904761904762 1.0 0.809523809524 + 0.95 0.97619047619 0.0 0.0 0.55 0.666666666667 0.0 0.0 0.05 + 0.261904761905 0.0 0.5 0.55 0.0714285714286 0.0 0.0 0.0 0.0 0.2 + 0.619047619048 0.0 0.0 0.0 0.0 0.0 0.0 0.3 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 + + + 0.484610177644 0.233907538708 0.20658352772 0.0670725838865 + 0.407916527183 0.396525596076 0.189840473492 0.0928124281296 + 0.163119385658 0.108580130939 0.199461619062 0.55372762301 + 0.277494690289 0.170473586809 + + + + + + + + + 5 1 17 2 17 2 17 2 17 2 17 2 10 1 6 2 10 1 6 2 10 1 6 2 10 1 5 3 9 3 + 5 2 9 3 5 2 9 3 4 3 9 3 4 3 9 2 5 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 + 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 4 3 3 9 4 3 3 9 3 4 3 9 3 4 3 + 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 3 4 9 3 3 4 9 3 3 + 4 9 2 4 4 9 2 4 4 9 3 3 4 9 3 3 4 8 4 3 3 10 2 4 4 9 3 3 4 8 4 3 4 8 + 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 3 4 3 9 4 3 3 9 4 2 5 8 3 4 4 8 4 3 4 + 8 3 5 2 17 1 76 1 11 1 6 2 9 3 3 4 8 4 3 3 9 4 3 3 9 3 4 3 9 4 3 3 9 + 4 3 3 9 4 3 3 9 4 3 3 9 4 3 4 8 4 3 4 8 4 3 4 8 4 3 4 8 4 3 4 8 4 3 4 + 9 3 3 4 9 3 3 3 10 3 3 3 11 2 3 3 10 3 3 3 10 3 3 3 10 3 3 3 10 3 3 3 + 10 3 3 4 9 3 3 4 9 3 3 4 9 3 3 4 9 3 3 3 11 2 3 3 11 2 3 3 11 2 3 3 + 11 2 3 4 10 2 3 4 10 2 3 4 9 3 3 4 9 3 3 3 10 3 3 4 9 3 2 5 9 4 1 5 9 + 4 1 5 8 5 1 5 8 5 1 5 8 4 1 6 8 4 2 5 8 3 3 5 9 3 2 5 9 3 2 5 9 3 2 4 + 10 4 1 5 8 5 1 5 9 3 2 4 11 2 3 3 11 1 4 3 16 3 16 2 18 1 55 3 9 4 2 + 5 8 3 2 6 7 5 2 4 9 4 2 5 8 4 2 5 8 4 2 4 9 4 2 4 9 3 3 5 8 4 2 5 7 5 + 1 5 8 5 1 5 9 4 1 5 9 4 1 5 9 3 3 4 8 4 2 5 9 3 3 4 9 3 3 4 9 3 3 4 9 + 3 3 4 9 3 3 4 9 3 3 3 10 4 3 2 10 3 4 2 1 1 8 3 3 4 9 3 3 4 9 3 3 4 + 11 1 3 4 11 1 3 3 17 3 10 2 4 2 11 2 4 2 11 2 4 2 10 3 4 2 10 3 4 2 + 10 3 4 3 9 2 5 3 9 2 5 3 9 2 5 3 9 2 5 2 10 2 5 2 10 2 5 2 10 2 5 2 + 10 2 6 1 10 2 6 1 10 2 6 1 10 2 6 1 11 1 6 1 18 1 15 0 + + + + 3173.0 + + + 0.11377245509 + + + 983.0 + + + 0.785350966429 + + + 0.964668285367 + + + 0.489374929355 0.50652048683 0.0404165262783 1.99664316321 + -0.0230184847877 0.00132084835082 -0.000666739780487 + 0.00196195342685 -0.205222839471 + + + 19.0 + + + 3.05263157895 0.892215568862 + + + 2.31578947368 3.57894736842 0.0 5.47368421053 0.862275449102 + 0.862275449102 0.838323353293 0.958083832335 + + + 167.0 + + + 6.0 18.0 0.120521172638 12.0 0.0 2.0 + + + 0.0 0.994011976048 + + + 0.309801449732 + + + 0.225609756098 0.434523809524 0.60119047619 0.613095238095 + 0.39512195122 0.252380952381 0.3 0.12380952381 0.0 0.0 + 0.0047619047619 0.0142857142857 0.487804878049 0.585714285714 + 0.552380952381 0.490476190476 + + + 0.0 0.0 0.0238095238095 0.0 0.190476190476 0.333333333333 + 0.571428571429 0.0238095238095 0.225 0.666666666667 0.714285714286 + 1.0 1.0 0.880952380952 1.0 0.857142857143 0.65 0.666666666667 + 0.396825396825 0.444444444444 0.587301587302 0.412698412698 + 0.333333333333 0.0793650793651 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.015873015873 + 0.047619047619 0.0 0.275 0.52380952381 0.642857142857 + 0.761904761905 0.47619047619 0.5 0.904761904762 0.761904761905 + 0.416666666667 0.666666666667 0.365079365079 0.650793650794 + 0.714285714286 0.47619047619 0.428571428571 0.0952380952381 + + + 0.425734961958 0.254168151192 0.0389495964679 0.0134860730846 + 0.276898327665 0.401805804796 0.203864426255 0.0473249457827 + 0.0117372917823 0.0183029628724 0.325713197095 0.287302139773 + 0.357933647165 0.163273230826 + + + + + + + + + 45 1 9 3 10 3 9 3 9 3 10 2 10 2 10 1 335 2 10 2 8 4 8 4 8 4 8 4 8 4 8 + 4 8 4 10 2 10 1 11 1 11 1 9 3 9 4 8 4 8 4 8 4 8 4 10 2 10 2 8 4 8 4 8 + 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 9 3 11 1 11 1 117 3 9 4 8 4 8 4 7 5 7 5 + 7 5 7 5 7 5 7 4 8 4 8 4 8 4 8 3 21 3 9 4 10 2 9 3 8 4 8 4 8 4 8 4 8 4 + 8 4 8 4 9 3 9 3 9 3 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 3 9 3 9 3 131 1 + 11 1 11 1 9 3 9 3 9 3 9 3 11 1 11 1 11 1 11 1 47 1 10 2 10 2 9 3 9 4 + 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 9 2 83 1 10 2 9 3 9 3 9 3 + 9 3 9 3 10 2 9 3 9 3 10 2 83 1 9 3 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 3 10 + 2 10 2 10 2 23 1 10 2 10 2 9 3 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 + 4 8 4 8 4 8 4 8 4 8 4 7 5 7 5 8 4 8 4 8 3 9 4 7 4 9 4 8 3 9 4 7 4 8 5 + 7 5 7 5 7 5 7 4 8 5 7 5 7 5 7 5 8 4 7 5 7 5 7 5 7 5 7 5 8 4 8 4 8 4 7 + 5 8 4 8 4 8 3 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 3 9 4 8 3 10 + 2 11 1 10 2 9 4 8 4 8 4 8 4 7 5 7 5 7 5 7 5 7 5 7 5 8 4 8 4 8 4 8 3 9 + 3 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 7 5 8 4 8 4 8 4 8 4 + 8 5 6 6 7 5 7 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 + 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 10 1 23 1 11 1 11 1 11 1 11 1 10 2 + 11 1 11 1 95 1 11 1 9 3 9 3 9 4 7 5 7 5 8 3 9 3 9 3 9 3 9 3 11 1 11 1 + 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 10 1 250 2 9 3 9 + 3 9 3 8 4 8 4 8 4 9 3 9 3 10 2 10 2 10 2 10 2 9 3 9 3 8 4 8 5 7 5 7 5 + 7 5 7 5 7 5 7 5 7 5 8 3 9 3 11 1 11 1 22 2 10 2 9 3 9 3 9 3 8 4 8 4 8 + 4 8 4 8 4 8 4 10 1 47 1 10 3 9 3 8 4 8 4 8 4 8 4 8 4 8 4 8 4 9 2 10 2 + 11 1 95 1 10 2 9 3 9 3 9 3 9 3 9 3 9 3 9 3 10 2 11 1 46 1 11 1 11 2 + 10 2 226 2 11 1 10 2 9 3 9 3 10 2 10 2 71 1 10 2 9 3 9 3 8 4 8 4 8 4 + 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 3 10 2 10 2 + 10 2 11 1 10 2 9 3 9 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 7 5 7 5 7 5 8 3 8 + 4 9 3 8 4 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 4 8 4 8 4 8 4 9 3 9 2 11 + 1 107 1 11 1 10 2 10 2 10 2 10 2 9 3 10 2 191 1 11 1 11 2 9 3 9 3 8 4 + 8 4 8 4 8 3 9 3 9 3 9 3 9 3 9 3 9 3 10 1 143 1 11 2 9 3 9 3 9 3 9 3 8 + 4 8 4 8 4 8 4 8 4 8 4 9 3 9 3 9 3 9 3 10 1 11 1 178 2 10 3 9 3 8 4 8 + 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 9 3 + 10 2 10 1 321 2 10 2 10 2 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 4 + 9 2 11 1 11 2 8 4 8 4 8 4 8 4 8 3 9 3 9 3 9 3 10 2 10 2 239 1 9 4 8 4 + 8 4 8 4 8 3 9 3 9 3 8 5 8 4 8 4 8 4 8 4 7 5 7 5 8 4 9 2 131 1 11 1 9 + 3 8 4 8 4 8 4 8 4 8 4 10 1 11 1 11 1 11 1 322 2 9 3 8 4 8 4 8 4 8 4 8 + 4 8 0 + + + + 9816.0 + + + 0.0146699266504 + + + 1845.0 + + + 0.80433604336 + + + 1.07693244211 + + + 0.612515397881 0.454593280327 0.00241802923842 24.9202563984 + -0.20392067871 -5.93575021909e-05 -0.507984578658 0.00563598725298 + 39.1206187827 + + + 12.0 + + + 11.1666666667 0.0 + + + 2.33333333333 12.0 21.3333333333 9.0 0.0 0.0 0.0 0.0 + + + 818.0 + + + 1.0 2.0 0.16430020284 51.0 24.0 0.0 + + + 0.00366748166259 0.998777506112 + + + 0.187958435208 + + + 0.0 0.0 0.0 0.107317073171 0.0 0.0276422764228 0.264705882353 + 0.373983739837 0.328431372549 0.759349593496 0.408496732026 + 0.060162601626 0.380718954248 0.287804878049 0.00816993464052 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0485436893204 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0539215686275 0.242718446602 0.0 0.0 0.0 0.0 0.0 0.0490196078431 + 0.382352941176 0.417475728155 0.0 0.0 0.0392156862745 + 0.0436893203883 0.191176470588 0.578431372549 0.460784313725 + 0.26213592233 0.0 0.0 0.696078431373 0.543689320388 0.529411764706 + 0.705882352941 0.362745098039 0.0 0.416666666667 0.56862745098 + 0.995098039216 0.665048543689 0.441176470588 0.166666666667 0.0 0.0 + 0.588235294118 0.745098039216 0.93137254902 0.368932038835 + 0.0490196078431 0.0 0.0 0.0 0.299019607843 0.176470588235 + 0.21568627451 0.0 0.0 0.0 0.0 0.0 + + + 0.52145343474 0.21672507926 0.129894316722 0.0433023547047 + 0.423437030122 0.417467669659 0.16652384712 0.134203518898 + 0.0627824492936 0.0645190974136 0.391929206119 0.442828446593 + 0.337022055847 0.1380902247 + + + + + + + + + 138 2 4 8 3 7 2 2 148 15 1 18 142 35 141 35 30 2 109 35 31 3 107 35 + 31 3 1 3 103 35 31 8 102 35 31 10 2 1 97 35 31 3 1 12 94 35 32 15 94 + 35 32 17 92 35 32 16 93 35 33 2 1 9 96 35 32 6 1 7 95 35 32 5 2 7 95 + 35 32 2 1 1 4 7 94 35 32 2 1 1 4 7 9 2 83 35 33 3 4 7 10 4 80 35 32 + 12 1 1 11 7 77 35 33 11 1 2 10 9 74 39 30 11 17 8 71 39 29 11 22 6 70 + 38 29 12 25 4 68 38 29 12 96 39 29 16 92 38 30 18 90 37 30 1 1 18 41 + 11 38 33 36 17 41 16 34 33 35 22 1 5 29 19 31 20 4 4 1 1 3 1 1 1 33 + 31 23 26 27 36 34 32 22 31 21 35 35 36 17 35 19 35 34 17 1 5 3 11 15 + 42 13 35 34 6 5 6 2 19 17 5 3 34 10 35 34 4 6 5 8 6 28 5 9 27 9 35 35 + 2 7 4 10 9 16 4 3 47 4 35 35 2 6 3 14 11 6 60 2 37 33 6 3 6 1 2 11 + 114 3 1 11 1 4 4 3 1 2 21 14 80 1 30 3 5 1 2 3 9 5 10 4 9 17 30 1 1 2 + 5 4 34 13 4 5 3 1 5 3 8 1 13 3 4 1 5 5 7 19 28 5 5 5 33 29 2 2 35 7 6 + 35 11 3 7 5 33 31 2 1 17 1 19 1 1 3 5 41 4 5 7 11 6 2 19 31 1 2 38 4 + 6 40 4 4 15 8 2 2 19 31 1 2 38 4 6 39 8 2 17 9 19 31 1 2 38 4 6 40 27 + 8 19 31 1 2 4 3 26 9 1 46 17 17 19 31 1 3 1 5 1 1 21 62 19 1 3 1 3 4 + 7 1 12 30 1 9 24 65 22 5 6 2 12 30 1 3 1 1 1 3 25 66 19 6 20 30 1 3 + 33 67 19 2 21 30 1 3 33 72 36 31 1 3 36 74 32 30 1 3 37 76 29 34 37 + 79 1 4 21 34 38 84 20 34 38 84 10 3 8 33 38 84 4 1 2 6 7 34 38 84 5 1 + 1 6 7 34 38 83 12 1 8 34 38 83 22 33 34 2 1 84 21 34 38 84 20 35 37 + 84 21 34 38 84 20 34 38 84 20 34 38 83 21 34 38 66 9 6 23 34 38 69 35 + 34 38 73 31 34 38 75 5 4 21 33 39 83 21 33 39 83 21 34 37 88 17 34 37 + 93 12 34 38 96 8 34 12 1 5 1 15 1 3 98 6 34 9 22 1 5 1 99 1 2 3 33 4 + 33 2 99 1 2 1 34 2 35 2 100 2 72 1 175 1 175 1 135 0 + + + + 14784.0 + + + 2.09523809524 + + + 5096.0 + + + 0.241562009419 + + + 0.612122664111 + + + 0.522448979592 0.488746193565 0.638314071553 0.0781637707566 + -0.10207512618 -0.0922138097016 0.00325970817866 0.00704220689571 + -0.000561248815062 + + + 176.0 + + + 1.21590909091 2.60714285714 + + + 1.43181818182 0.977272727273 1.75 0.704545454545 1.80952380952 + 3.71428571429 3.52380952381 1.38095238095 + + + 84.0 + + + 36.0 120.0 0.2334682861 16.0 3.0 24.0 + + + 0.0 0.988095238095 + + + 0.344696969697 + + + 0.19696969697 0.307359307359 0.800865800866 0.638528138528 + 0.0270562770563 0.352813852814 0.0270562770563 0.0 0.0 + 0.524891774892 0.478354978355 0.149350649351 0.780303030303 + 0.790043290043 0.245670995671 0.195887445887 + + + 0.0 0.0 0.0 0.173553719008 0.890909090909 0.954545454545 + 0.913636363636 0.45041322314 0.204545454545 0.566115702479 + 0.590909090909 0.462809917355 0.627272727273 0.723140495868 + 0.813636363636 0.417355371901 0.0 0.103305785124 0.254545454545 + 0.557851239669 0.0863636363636 0.0 0.0 0.0 0.0 0.0 0.0409090909091 + 0.520661157025 0.0272727272727 0.0 0.0 0.0 0.0 0.0 0.309090909091 + 0.876033057851 0.704545454545 0.0165289256198 0.0227272727273 0.0 + 0.0 0.0 0.00454545454545 0.842975206612 0.686363636364 + 0.545454545455 0.55 0.0495867768595 0.695454545455 0.731404958678 + 0.740909090909 0.739669421488 0.472727272727 0.454545454545 0.55 + 0.247933884298 0.813636363636 0.876033057851 0.886363636364 + 0.797520661157 0.05 0.00826446280992 0.0 0.0 + + + 0.225748581727 0.303381611 0.132523785562 0.0516452201607 + 0.107137534872 0.391587588269 0.214723072201 0.139329751862 + 0.0585119386927 0.0570739267755 0.100382098477 0.224574002139 + 0.276483766461 0.161683839066 + + + + + + + + + 131 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 5 2 5 2 5 2 13 1 5 2 5 2 6 1 5 + 2 5 2 5 2 4 3 4 3 61 2 4 4 2 5 3 3 4 3 4 3 3 4 3 4 3 5 1 6 2 5 2 5 1 + 6 1 6 2 4 2 6 2 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 3 4 4 3 4 3 4 3 4 3 4 + 3 4 3 4 3 4 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 1 6 2 5 1 6 1 6 2 + 5 2 5 1 6 1 6 1 5 2 5 3 4 3 4 3 4 4 2 33 2 4 4 3 5 1 6 1 6 1 5 2 5 2 + 5 2 5 2 5 2 5 2 5 2 6 1 5 2 5 2 5 2 6 1 6 1 5 2 5 3 4 3 4 3 4 3 4 3 4 + 3 4 3 4 4 3 5 1 3 0 + + + + 966.0 + + + 0.0507246376812 + + + 423.0 + + + 0.666666666667 + + + 1.06227359898 + + + 0.506304176517 0.639212438094 0.00552953852676 2.07692185631 + -0.0491600224911 -8.48620687562e-05 0.0323464500385 + 0.000102729453105 -0.693409114805 + + + 7.0 + + + 3.28571428571 0.0 + + + 1.71428571429 2.28571428571 1.14285714286 3.42857142857 0.0 0.0 0.0 + 0.0 + + + 138.0 + + + 3.0 10.0 0.166666666667 6.0 8.0 1.0 + + + 0.130434782609 0.992753623188 + + + 0.437888198758 + + + 0.0 0.0 0.205882352941 0.485714285714 0.0 0.285714285714 + 0.823529411765 0.814285714286 0.0735294117647 0.685714285714 1.0 + 0.842857142857 0.220588235294 0.514285714286 0.426470588235 + 0.0857142857143 + + + 0.0 0.0 0.0 0.0 0.0 0.411764705882 0.470588235294 0.5 0.0 0.0 0.0 + 0.0 0.0 0.411764705882 0.470588235294 0.5 0.0 0.0 0.0 + 0.222222222222 0.294117647059 1.0 0.647058823529 0.888888888889 0.0 + 0.0 0.0588235294118 0.833333333333 1.0 1.0 0.764705882353 + 0.944444444444 0.0 0.0 0.235294117647 1.0 1.0 1.0 0.764705882353 + 1.0 0.0 0.294117647059 0.470588235294 1.0 1.0 1.0 0.647058823529 + 0.944444444444 0.0 0.882352941176 0.529411764706 1.0 0.941176470588 + 0.764705882353 0.176470588235 0.166666666667 0.0 0.0 0.117647058824 + 0.388888888889 0.0 0.0 0.0 0.0 + + + 0.614475784986 0.169513562925 0.0663971288564 0.0223373128911 + 0.545651586175 0.410653614539 0.108732218162 0.00443888088545 + 0.0658292759554 0.0401032512972 0.414612209712 0.545204008379 + 0.270106746929 0.081528402048 + + + + + + + + + 1 2 12 3 12 3 12 3 12 8 1 2 2 70 2 4 1 13 3 7 8 6 1 2 5 7 12 3 13 2 + 13 3 25 4 9 5 11 3 12 4 10 5 11 4 10 6 8 6 10 5 9 6 9 6 9 6 9 5 10 5 + 10 6 9 6 9 7 8 6 9 6 9 6 9 5 10 5 10 5 10 6 9 5 10 5 11 4 11 2 1 1 11 + 4 12 3 11 4 11 4 11 4 11 4 11 4 11 4 11 4 11 4 10 5 11 2 1 1 11 4 11 + 4 11 4 11 4 11 4 11 4 11 4 11 4 10 5 10 5 11 4 11 4 11 3 12 4 12 3 12 + 3 12 3 12 3 13 2 10 0 + + + + 1155.0 + + + 0.194805194805 + + + 401.0 + + + 0.581047381546 + + + 0.894899218429 + + + 0.260598503741 0.420002625016 0.0232798393442 1.21160593767 + -0.0686951689997 0.00535994657309 0.0134614321105 -0.0193986882159 + 0.438962645342 + + + 15.0 + + + 1.8 0.0779220779221 + + + 2.66666666667 2.4 1.33333333333 0.0 0.207792207792 0.0 + 0.0519480519481 0.0519480519481 + + + 77.0 + + + 10.0 28.0 0.173913043478 3.0 14.0 1.0 + + + 0.0 0.987012987013 + + + 0.347186147186 + + + 0.684210526316 0.824561403509 0.771929824561 0.6 0.671052631579 + 0.736842105263 0.5 0.475 0.381578947368 0.0 0.0 0.0 0.302631578947 + 0.0 0.0 0.0 + + + 0.888888888889 0.3 0.222222222222 1.0 0.6 0.111111111111 0.1 0.1 + 1.0 0.5 0.833333333333 1.0 0.95 1.0 1.0 0.7 0.555555555556 0.65 1.0 + 1.0 0.95 1.0 0.95 0.95 0.555555555556 0.9 0.5 0.45 0.05 0.0 0.0 0.0 + 0.5 0.3 0.0 0.0 0.0 0.0 0.0 0.0 0.555555555556 0.2 0.0 0.0 0.0 0.0 + 0.0 0.0 0.444444444444 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.555555555556 + 0.05 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.477887681048 0.231056863513 0.145934754506 0.0577261863678 + 0.29239572468 0.446867425881 0.166668628958 0.0782562622644 + 0.0874409949822 0.0927445130693 0.226847699954 0.435957433424 + 0.337055699949 0.130795428192 + + + + + + + + + 33 1 35 1 29 2 35 1 29 2 35 1 29 1 36 1 29 1 36 1 29 2 35 1 29 1 36 1 + 29 1 36 1 29 1 36 1 29 1 36 1 14 5 9 3 34 26 4 3 34 27 3 3 34 28 1 4 + 33 34 33 34 33 33 34 33 34 34 33 19 3 11 34 18 9 5 35 25 1 7 34 33 35 + 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 35 32 + 34 33 34 34 34 33 34 33 34 33 34 33 33 34 28 2 4 34 25 5 3 20 1 11 1 + 1 25 5 2 33 28 3 4 32 27 5 3 32 27 5 3 32 26 6 3 32 10 2 5 6 3 6 3 32 + 3 29 3 63 5 62 5 62 5 62 4 11 5 2 8 37 4 4 24 35 4 4 24 35 5 3 25 34 + 5 3 25 34 5 3 24 35 5 3 24 35 5 3 24 36 4 3 24 36 5 2 24 35 6 2 24 35 + 6 2 24 36 5 2 24 36 5 2 24 36 4 3 24 36 5 3 23 36 5 3 24 34 6 3 32 17 + 2 1 12 3 26 2 1 23 3 3 6 3 24 35 5 3 26 2 5 26 5 4 24 34 5 4 22 36 6 + 3 22 37 3 4 23 37 3 5 22 37 3 6 21 37 4 5 21 37 4 5 21 37 3 6 10 2 9 + 37 3 5 11 2 9 37 4 4 11 3 8 37 4 4 12 2 8 37 5 2 12 2 9 37 30 37 30 + 37 30 38 29 38 29 37 30 37 30 21 1 15 30 7 3 2 14 1 3 8 29 7 18 3 2 8 + 29 6 26 5 31 4 28 4 32 2 29 3 64 4 63 4 63 4 63 4 62 5 62 6 61 6 62 5 + 62 5 62 4 65 2 1 0 + + + + 7437.0 + + + 0.603603603604 + + + 3301.0 + + + 0.187215995153 + + + 1.34436531211 + + + 0.494629726529 0.502886177742 0.110379861342 0.187372675335 + 0.0888290257738 -3.13448342362e-05 -0.00323736183877 + 0.00205353145531 -0.00409760787906 + + + 67.0 + + + 1.02985074627 0.747747747748 + + + 0.716417910448 1.19402985075 0.955223880597 1.01492537313 + 0.612612612613 0.468468468468 1.11711711712 0.684684684685 + + + 111.0 + + + 11.0 51.0 0.128712871287 9.0 4.0 3.0 + + + 0.0 0.990990990991 + + + 0.44386177222 + + + 0.599537037037 0.930803571429 0.207589285714 0.046875 + 0.579520697168 0.978991596639 0.201680672269 0.159663865546 + 0.0239651416122 0.231092436975 0.976890756303 0.451680672269 0.0 + 0.268907563025 0.848739495798 0.575630252101 + + + 0.230769230769 0.955357142857 0.892857142857 0.866071428571 + 0.348214285714 0.482142857143 0.1875 0.0 0.153846153846 1.0 1.0 + 0.964285714286 0.0 0.0 0.0 0.0 0.196581196581 0.920634920635 1.0 + 0.936507936508 0.0 0.0 0.0873015873016 0.0 0.192307692308 + 0.955357142857 1.0 0.982142857143 0.482142857143 0.375 0.5 + 0.0803571428571 0.0673076923077 0.0357142857143 0.0446428571429 + 0.4375 1.0 0.901785714286 0.928571428571 0.0267857142857 0.0 0.0 + 0.0 0.444444444444 1.0 1.0 0.857142857143 0.0 0.0 0.0 0.0 + 0.482142857143 1.0 0.982142857143 0.883928571429 0.0 0.0 0.0 0.0 + 0.587301587302 0.714285714286 0.730158730159 0.904761904762 + 0.484126984127 + + + 0.4991004001 0.148209504379 0.0105681296789 0.0128883504358 + 0.155376550476 0.319837952082 0.0758261433494 0.0708944303561 + 0.0551436256771 0.0134074647862 0.108050282619 0.294043844116 + 0.16103500321 0.0446379285411 + + + + + + + + + 2 1 42 1 42 1 42 2 41 3 40 36 7 37 6 37 6 37 6 37 6 37 6 37 7 36 7 36 + 7 36 7 37 6 37 5 38 4 33 2 4 4 39 4 40 3 41 1 42 1 20 1 21 4 17 1 21 + 4 38 6 37 6 37 6 37 6 37 6 37 6 37 6 37 6 38 5 38 6 37 6 37 6 37 6 37 + 6 37 6 37 6 37 7 36 7 36 7 36 7 36 7 36 7 36 7 3 26 7 8 1 30 4 8 1 31 + 3 40 3 41 2 41 2 41 3 41 2 41 2 41 1 42 1 42 2 42 1 42 1 + + + + 2666.0 + + + 0.693548387097 + + + 1651.0 + + + 0.139309509388 + + + 1.08173396324 + + + 0.520290732889 0.43311058375 0.0756291231204 0.100360267053 + 0.0158956644042 -0.000178034924701 0.00224241083183 + 0.00102967936323 0.00231291454829 + + + 43.0 + + + 0.139534883721 0.0967741935484 + + + 0.093023255814 0.0 0.0 0.279069767442 0.0 0.193548387097 0.0 + 0.193548387097 + + + 62.0 + + + 2.0 15.0 0.186335403727 1.0 2.0 3.0 + + + 0.0 0.983870967742 + + + 0.619279819955 + + + 0.566666666667 0.7625 0.5 0.08125 0.666666666667 0.988636363636 1.0 + 0.125 0.666666666667 1.0 1.0 0.125 0.418181818182 0.801136363636 + 0.89696969697 0.306818181818 + + + 0.4 0.525 0.7 0.35 0.114285714286 0.0 0.0 0.0 0.285714285714 1.0 + 1.0 1.0 1.0 0.9 0.325 0.0 0.285714285714 1.0 1.0 1.0 1.0 1.0 0.25 + 0.0 0.285714285714 1.0 1.0 0.95 1.0 1.0 0.25 0.0 0.285714285714 1.0 + 1.0 1.0 1.0 1.0 0.25 0.0 0.285714285714 1.0 1.0 1.0 1.0 1.0 0.25 + 0.0 0.285714285714 1.0 0.95 1.0 1.0 1.0 0.3 0.0 0.0714285714286 + 0.333333333333 0.604166666667 0.708333333333 0.785714285714 + 0.833333333333 0.604166666667 0.270833333333 + + + 0.6153015834 0.0388646807095 0.0152423660889 0.00898649221213 + 0.354327547737 0.0786125901473 0.0347218802172 0.00745564111386 + 0.00360079548627 0.0112187535506 0.0872212539374 0.0624727042387 + 0.103275469976 0.0212408759739 + + + + + + + + + 329 1 90 3 8 1 81 2 7 4 79 8 2 3 4 5 70 8 3 11 70 3 1 3 4 10 71 3 5 1 + 1 12 4 5 61 3 5 23 70 9 1 12 71 7 2 13 70 7 2 13 67 11 1 14 59 1 5 29 + 57 4 1 31 56 36 56 36 56 36 56 36 57 35 57 35 57 35 57 35 57 35 57 35 + 57 30 62 32 60 35 57 35 57 35 57 35 57 35 57 7 2 26 57 7 3 25 57 36 + 56 36 57 35 57 35 57 35 57 3 1 31 26 2 3 3 3 3 16 4 1 1 1 29 26 23 7 + 36 26 26 3 5 3 29 27 6 1 12 2 4 2 7 2 29 27 4 1 1 2 2 2 1 5 1 2 13 2 + 29 26 6 16 11 5 28 26 6 3 1 2 2 7 13 5 1 7 6 3 10 1 1 24 34 23 10 25 + 33 26 8 25 33 26 9 24 33 26 9 24 34 24 10 24 35 24 1 1 7 23 19 2 13 + 29 5 26 18 2 13 29 3 27 18 2 13 28 4 27 15 2 13 1 2 28 4 27 33 28 4 + 27 33 28 4 27 33 27 5 27 33 28 4 28 17 2 13 29 4 27 32 30 3 27 33 29 + 2 28 33 29 2 28 33 29 2 28 33 29 1 29 33 59 33 59 33 59 33 59 33 60 + 16 4 5 1 3 63 13 1 1 5 4 68 15 5 4 3 3 62 16 4 5 1 5 61 16 4 13 59 16 + 1 16 59 33 59 33 59 33 59 33 59 3 3 11 1 15 59 3 5 1 3 1 4 16 60 2 21 + 9 60 2 25 6 59 2 26 5 59 2 27 4 59 3 27 3 59 3 27 3 59 3 27 3 59 3 28 + 2 60 2 28 2 60 2 28 2 60 2 28 2 60 2 29 2 59 3 28 1 60 3 28 1 60 3 28 + 1 60 3 28 1 60 3 89 3 90 2 90 3 89 3 89 3 90 2 90 3 89 3 88 4 89 2 + 552 1 90 3 88 4 89 3 90 2 90 2 90 2 91 1 91 1 91 1 91 1 91 2 90 2 90 + 2 90 2 91 1 91 1 91 1 91 1 1714 1 91 1 91 1 35 1 55 1 35 1 55 2 34 1 + 55 3 33 1 55 15 21 1 55 22 14 1 55 29 7 2 54 33 2 3 54 38 54 38 54 38 + 54 18 1 19 54 18 1 19 54 38 54 39 53 39 53 39 52 41 51 41 51 41 51 42 + 50 41 50 42 53 39 54 38 53 39 53 39 54 38 54 38 54 38 54 30 2 6 54 31 + 1 6 54 39 53 39 53 39 53 39 53 39 54 38 54 38 53 19 1 19 54 38 54 39 + 53 39 53 39 53 17 2 20 53 17 1 21 57 1 5 6 3 20 77 15 83 9 86 6 88 5 + 88 4 88 4 88 3 89 3 90 2 90 3 89 2 91 3 89 3 89 3 90 2 90 2 90 2 90 2 + 91 1 91 1 91 1 46 0 + + + + 20700.0 + + + 0.408888888889 + + + 4578.0 + + + 0.216688510266 + + + 0.41521017973 + + + 0.484267807335 0.441010578543 0.118368530255 1.01629199833 + -0.266941488243 0.00872054356431 -0.0476830427939 -0.00517353516062 + 0.359241761832 + + + 92.0 + + + 1.36956521739 0.542222222222 + + + 0.130434782609 3.08695652174 1.69565217391 0.565217391304 + 0.995555555556 0.871111111111 0.142222222222 0.16 + + + 225.0 + + + 14.0 84.0 0.248333333333 14.0 7.0 2.0 + + + 0.0133333333333 0.995555555556 + + + 0.22115942029 + + + 0.0 0.0 0.116459627329 0.5293668955 0.192546583851 0.482142857143 + 0.0916149068323 0.585049580473 0.534161490683 0.319099378882 0.0 + 0.0 0.651397515528 0.0326086956522 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.233766233766 0.74025974026 0.137931034483 0.0 + 0.0 0.0 0.0 0.0 0.232142857143 0.994047619048 0.252873563218 0.0 + 0.399350649351 0.717532467532 0.246753246753 0.0422077922078 + 0.172077922078 1.0 0.282131661442 0.0 0.372023809524 0.919642857143 + 0.0446428571429 0.0654761904762 0.0892857142857 0.654761904762 + 0.42816091954 0.211038961039 0.558441558442 0.941558441558 + 0.100649350649 0.0 0.0 0.0 0.0 0.669642857143 0.672619047619 + 0.136904761905 0.130952380952 0.0 0.0 0.0 0.0 0.698051948052 + 0.733766233766 0.0 0.0 0.0 0.0 0.0 0.0 0.41369047619 0.770833333333 + 0.125 0.0 0.0 0.0 0.0 0.0 + + + 0.334670608669 0.285528039939 0.208348662923 0.0788319481512 + 0.108144935997 0.54540707606 0.186590101345 0.423447763945 + 0.0651368595541 0.0777322938232 0.024363034106 0.235770067349 + 0.481605376299 0.106969630334 + + + + + + + + + 8 4 38 4 36 6 36 7 35 1 91 1 33 3 4 2 33 10 1 1 30 12 30 13 29 14 28 + 15 27 16 26 17 25 4 1 13 23 4 3 12 24 19 23 20 22 21 21 22 20 23 19 + 24 18 25 17 17 1 1 2 5 16 1 3 15 2 7 14 2 4 12 4 1 4 2 13 3 1 15 2 3 + 3 2 13 3 2 20 2 3 12 2 3 19 4 3 10 4 2 18 6 2 10 4 3 17 6 2 10 5 2 16 + 20 23 3 3 13 10 1 12 3 3 13 5 1 3 3 6 1 5 18 5 1 3 3 6 1 5 5 2 11 9 3 + 19 11 9 2 20 12 4 1 2 3 18 25 18 24 19 22 20 22 20 23 7 1 11 12 1 10 + 19 7 2 3 2 2 1 6 19 6 3 3 3 1 2 5 19 6 3 3 2 3 3 1 21 6 3 4 2 3 24 6 + 3 4 2 3 24 6 2 5 2 4 23 5 3 5 2 5 22 5 2 6 1 8 20 5 2 6 1 9 19 13 1 9 + 18 14 1 10 18 13 1 11 17 13 1 12 16 26 16 27 2 2 11 28 1 3 10 29 1 2 + 10 30 12 31 11 20 2 8 12 20 2 9 11 12 3 4 1 12 11 10 5 18 8 11 6 19 6 + 10 8 20 4 10 9 20 1 12 9 21 1 11 2 1 7 35 8 31 14 28 15 27 17 24 19 + 23 20 22 22 20 22 20 23 19 24 18 26 16 27 15 17 2 10 13 30 12 31 11 4 + 2 20 1 5 10 4 1 24 2 2 10 28 3 2 8 29 2 4 7 28 6 1 7 28 6 2 6 28 14 + 28 14 28 15 28 16 28 17 27 14 29 14 29 15 28 15 27 16 26 16 26 13 29 + 11 31 6 36 7 1 5 29 13 29 9 33 9 33 10 32 11 31 11 31 11 2 3 26 11 2 + 4 26 10 2 5 25 10 2 7 22 11 2 8 21 11 2 9 20 11 2 10 19 11 2 11 19 10 + 2 12 18 10 2 13 18 10 2 14 15 10 3 15 14 10 3 16 13 10 3 16 14 9 2 18 + 13 8 4 21 8 10 3 22 6 11 3 23 5 11 3 25 3 11 2 40 2 40 2 40 2 41 1 31 + 0 + + + + 5922.0 + + + 0.297872340426 + + + 2809.0 + + + 0.283018867925 + + + 1.19527812868 + + + 0.519106704061 0.524047703809 0.0325808317143 0.4756085619 + 0.0323160430761 -1.02837556328e-05 -0.00232177950112 + 0.00277934159561 -0.0533245690393 + + + 42.0 + + + 3.2619047619 0.751773049645 + + + 3.52380952381 3.71428571429 2.7619047619 2.85714285714 + 0.737588652482 1.33333333333 0.368794326241 0.567375886525 + + + 141.0 + + + 12.0 68.0 0.283618581907 13.0 6.0 2.0 + + + 0.0 0.992907801418 + + + 0.47433299561 + + + 0.331428571429 0.214285714286 0.46 0.113888888889 0.742857142857 + 0.324675324675 0.893506493506 0.44696969697 0.405714285714 + 0.828571428571 0.671428571429 0.641666666667 0.0623376623377 + 0.511688311688 0.225974025974 0.70202020202 + + + 0.0 0.0 0.188235294118 0.0777777777778 0.111111111111 + 0.105882352941 0.0111111111111 0.0 0.611764705882 0.711111111111 + 0.388235294118 0.211111111111 0.955555555556 0.658823529412 + 0.255555555556 0.188888888889 0.635294117647 0.9 0.376470588235 + 0.0444444444444 0.955555555556 0.941176470588 0.622222222222 + 0.288888888889 0.43137254902 0.990740740741 0.647058823529 + 0.212962962963 0.703703703704 1.0 0.87962962963 0.0 0.105882352941 + 0.922222222222 0.964705882353 0.511111111111 0.488888888889 1.0 1.0 + 0.155555555556 0.0 0.555555555556 0.976470588235 0.877777777778 + 0.244444444444 0.988235294118 1.0 0.411111111111 0.0 0.233333333333 + 0.882352941176 1.0 0.111111111111 0.623529411765 1.0 0.566666666667 + 0.0 0.0277777777778 0.137254901961 0.166666666667 0.00925925925926 + 0.225490196078 0.685185185185 0.583333333333 + + + 0.474167687328 0.211776854955 0.0673795310471 0.0275443001907 + 0.192114822079 0.436636429103 0.129492630215 0.097146526395 + 0.0375762512077 0.039955653649 0.0668693688308 0.365005029473 + 0.298843819143 0.0817414676235 + + + + + + + + + 52 1 10 7 2 2 1 7 148 32 145 35 100 4 15 14 1 2 8 36 100 36 8 4 1 31 + 100 37 7 3 3 30 100 37 7 3 4 29 100 37 7 3 3 30 100 37 7 4 2 30 100 + 37 7 4 2 30 101 36 7 4 1 31 101 36 7 36 101 36 7 36 101 36 7 36 101 + 36 7 36 101 36 7 36 100 37 8 35 101 36 8 35 101 36 8 35 20 3 78 36 8 + 35 21 3 77 36 8 35 21 4 75 38 6 37 18 8 71 40 5 37 19 9 72 38 5 37 19 + 10 71 38 5 6 1 31 17 11 71 39 4 38 17 11 71 38 6 37 17 11 71 39 6 36 + 17 12 2 3 65 39 5 12 1 25 14 18 66 40 4 7 3 1 1 25 15 16 69 38 6 36 + 15 15 4 4 62 38 6 35 16 15 4 4 62 34 3 1 6 34 17 15 3 6 62 33 10 4 5 + 14 1 3 2 1 22 15 1 9 60 32 12 3 1 25 1 1 19 15 3 5 63 32 11 3 2 29 17 + 16 5 2 3 2 58 32 12 2 2 30 16 16 5 9 56 32 17 29 16 3 2 11 5 10 55 32 + 17 29 16 3 3 11 1 13 55 33 2 1 8 34 16 33 53 37 8 34 15 33 54 36 8 2 + 2 29 16 34 53 36 8 33 15 36 52 36 8 33 15 38 50 32 12 2 3 1 7 4 4 2 5 + 5 15 39 49 32 12 1 29 3 15 39 50 32 42 2 15 39 56 5 2 1 14 5 1 1 40 1 + 15 5 1 33 80 5 56 2 7 29 82 4 66 28 83 3 67 19 5 2 150 23 159 23 159 + 20 21 1 138 20 20 4 136 21 18 6 136 19 4 2 13 7 135 15 1 2 4 3 15 7 + 133 14 3 1 4 3 14 2 1 5 133 14 8 3 13 10 133 1 2 10 9 1 13 13 131 1 4 + 8 9 1 13 11 1 1 136 9 7 2 12 12 138 7 9 2 11 14 138 6 9 2 11 15 138 5 + 9 2 11 14 140 3 11 1 11 12 1 1 137 1 2 2 11 1 11 13 138 7 3 2 3 3 11 + 14 138 6 2 5 1 3 11 15 3 5 129 17 11 15 3 5 129 1 1 15 11 5 1 10 2 4 + 126 2 4 15 10 5 2 16 3 1 122 20 11 6 1 22 121 19 11 6 1 23 122 17 11 + 31 122 16 11 32 122 15 10 6 2 27 122 12 11 6 1 11 1 16 123 11 11 6 1 + 11 2 16 123 10 11 6 1 29 124 8 11 7 2 29 124 7 11 38 126 5 11 38 126 + 5 11 39 126 4 10 40 127 3 10 39 128 2 11 7 1 33 138 41 140 7 1 31 141 + 6 2 31 141 6 3 29 142 6 8 24 142 5 12 21 142 7 12 19 145 5 12 17 144 + 8 11 17 145 7 11 17 150 2 13 15 171 4 3 1 172 4 3 1 172 4 3 1 172 4 2 + 2 172 8 154 1 17 7 156 1 15 8 167 1 3 9 166 3 3 7 167 3 3 3 2 2 168 2 + 2 8 168 1 4 7 173 3 2 2 173 4 2 1 173 4 176 6 173 7 173 6 174 6 174 6 + 175 5 175 4 177 3 176 1 1 2 179 1 10 0 + + + + 22320.0 + + + 1.45161290323 + + + 5540.0 + + + 0.218772563177 + + + 1.99963885879 + + + 0.470235766291 0.345720700889 0.509250925958 0.143181062647 + 0.218210697439 0.0564734137643 0.0573179142015 0.0800215137629 + 0.0341763616996 + + + 180.0 + + + 0.772222222222 1.85483870968 + + + 0.266666666667 0.755555555556 1.13333333333 0.933333333333 + 1.90322580645 2.90322580645 1.93548387097 0.677419354839 + + + 124.0 + + + 27.0 103.0 0.234493192133 25.0 2.0 1.0 + + + 0.0 0.991935483871 + + + 0.248207885305 + + + 0.73476702509 0.405017921147 0.0 0.0 0.771326164875 0.306810035842 + 0.0 0.0 0.0989247311828 0.566308243728 0.195698924731 0.0 0.0 + 0.0508960573477 0.631541218638 0.210035842294 + + + 0.666666666667 0.897727272727 0.809090909091 0.0625 0.0 0.0 0.0 0.0 + 0.582608695652 0.782608695652 0.701449275362 0.0923913043478 0.0 + 0.0 0.0 0.0 0.842424242424 0.928977272727 0.706060606061 0.0 0.0 + 0.0 0.0 0.0 0.64347826087 0.676630434783 0.55652173913 + 0.00815217391304 0.0 0.0 0.0 0.0 0.0 0.352272727273 0.630303030303 + 0.244318181818 0.00606060606061 0.0 0.0 0.0 0.0 0.0380434782609 + 0.64347826087 0.744565217391 0.547826086957 0.222826086957 0.0 0.0 + 0.0 0.0 0.00606060606061 0.1875 0.612121212121 0.724431818182 + 0.112121212121 0.0 0.0 0.0 0.0 0.00815217391304 0.272463768116 + 0.896739130435 0.489855072464 0.236413043478 + + + 0.459975159394 0.216066695528 0.154160931494 0.0752455228381 + 0.184850736084 0.426627903637 0.13094769755 0.227217508429 + 0.075954389864 0.0871632977927 0.065815902168 0.331812418765 + 0.298807845802 0.0814899796885 + + + + + + + + + 38 1 142 2 142 2 142 2 109 2 1 2 5 1 20 4 106 38 106 38 106 38 106 38 + 106 38 106 38 106 37 106 39 105 38 106 38 106 39 105 39 106 38 105 39 + 23 3 79 39 22 5 78 39 21 6 78 39 21 7 77 39 21 9 75 39 21 10 74 39 25 + 7 74 38 28 5 73 36 28 9 74 33 22 15 71 38 20 16 69 38 20 23 63 40 18 + 25 62 39 17 26 62 40 16 26 62 39 17 25 63 39 17 17 3 8 60 1 3 35 18 + 15 4 8 64 35 18 16 2 9 64 20 1 1 1 11 20 16 1 11 61 4 2 28 19 1 1 15 + 4 10 57 38 18 19 1 11 57 39 17 32 56 7 2 30 18 3 1 28 56 6 3 29 17 5 + 4 27 53 38 17 37 51 39 17 37 52 38 16 39 51 38 16 39 51 17 1 20 16 41 + 49 14 5 20 15 41 49 2 35 1 17 40 86 1 25 31 87 1 29 27 87 1 30 26 18 + 2 98 26 17 3 97 19 25 4 95 18 26 7 93 11 1 11 21 7 94 23 19 10 92 23 + 21 8 92 21 23 8 90 22 25 7 89 6 1 12 30 7 88 19 29 8 90 16 27 11 92 + 13 27 12 92 12 28 14 90 2 1 2 3 5 26 12 102 5 25 12 103 2 27 12 132 + 14 130 13 102 1 5 2 25 10 97 6 2 5 3 1 20 10 97 17 20 10 4 1 92 1 1 + 14 23 8 4 1 88 5 1 15 14 1 1 1 4 10 1 5 5 1 81 20 14 29 83 18 14 24 1 + 6 81 18 14 32 81 17 14 32 83 14 15 34 82 13 14 37 81 12 14 6 3 29 82 + 10 14 1 2 3 1 31 82 8 20 2 1 31 84 4 17 2 3 2 1 31 107 1 2 34 110 12 + 1 20 88 4 14 38 89 3 13 39 104 41 104 40 104 7 1 32 104 6 3 30 105 6 + 4 28 106 5 13 21 107 4 14 5 1 12 108 5 19 12 110 3 16 15 125 18 125 + 18 129 15 131 1 3 5 139 5 140 4 3 1 136 7 120 5 13 2 1 4 120 5 10 9 + 122 2 11 8 131 1 3 10 130 2 1 10 131 1 3 9 136 8 136 5 138 6 140 3 + 141 3 141 4 139 5 139 6 137 7 137 7 137 7 138 6 138 6 7 0 + + + + 18000.0 + + + 1.152 + + + 4173.0 + + + 0.236760124611 + + + 2.05426098023 + + + 0.469670995192 0.409251486128 0.471056313163 0.196895845815 + 0.263146008847 0.0351819763846 0.044621985289 0.0500524418727 + 0.0353209393192 + + + 144.0 + + + 1.05555555556 1.048 + + + 0.472222222222 0.777777777778 1.38888888889 1.58333333333 0.512 + 1.664 1.504 0.512 + + + 125.0 + + + 21.0 88.0 0.234939759036 21.0 6.0 4.0 + + + 0.0 0.992 + + + 0.231833333333 + + + 0.83064516129 0.534946236559 0.0 0.0 0.173835125448 0.355734767025 + 0.0143369175627 0.0 0.0241935483871 0.497311827957 0.270609318996 + 0.0138888888889 0.0 0.0564516129032 0.652329749104 0.3046875 + + + 0.659259259259 0.972222222222 0.855555555556 0.166666666667 0.0 0.0 + 0.0 0.0 0.67037037037 1.0 0.992592592593 0.173611111111 0.0 0.0 0.0 + 0.0 0.137037037037 0.152777777778 0.211111111111 0.0590277777778 + 0.0 0.0 0.0 0.0 0.0 0.392361111111 0.796296296296 0.375 + 0.0555555555556 0.0 0.0 0.0 0.0 0.09375 0.777777777778 + 0.951388888889 0.520833333333 0.322222222222 0.0 0.0 0.0 0.0 + 0.0592592592593 0.190972222222 0.0625 0.174074074074 + 0.0555555555556 0.0 0.0 0.0 0.0 0.21875 0.673611111111 + 0.937037037037 0.222222222222 0.0 0.0 0.0 0.0 0.0 0.0972222222222 + 0.937037037037 0.628472222222 0.368055555556 + + + 0.43846936641 0.229416015908 0.114987037496 0.049660242824 + 0.138283698126 0.44882146184 0.142882322725 0.112013499687 + 0.0499042485257 0.0608320000372 0.103289869422 0.283217045532 + 0.346601895584 0.0850625355761 + + + + + + + + + 95 2 248 4 247 4 247 4 248 1 250 1 250 2 215 17 3 6 8 2 215 31 1 3 + 216 36 215 36 215 36 215 36 215 36 216 35 216 35 216 35 216 35 216 35 + 216 35 216 35 216 35 216 35 216 35 217 34 217 34 217 34 19 2 196 34 + 19 4 194 35 17 6 193 35 17 7 192 35 17 9 190 35 17 10 189 35 17 11 + 188 35 16 12 188 35 17 11 188 35 17 11 120 1 68 34 13 1 3 11 120 1 68 + 34 13 1 2 10 122 1 68 34 13 1 2 10 122 1 68 31 16 15 120 1 68 34 13 + 15 5 1 82 1 31 1 37 1 30 34 13 15 5 2 3 1 77 1 31 1 37 5 26 34 12 3 1 + 12 4 9 75 2 4 1 2 16 7 1 37 23 8 34 12 2 2 14 1 11 73 28 5 2 36 17 1 + 9 4 34 12 3 1 27 72 31 1 3 36 65 12 32 71 34 37 65 11 35 69 34 37 65 + 11 36 68 35 36 65 11 36 68 35 36 36 4 25 11 38 66 35 36 17 2 16 23 7 + 11 38 66 35 36 17 2 15 28 3 10 40 65 35 36 34 29 3 9 40 65 35 36 34 + 29 2 10 39 66 35 36 35 29 1 10 39 66 35 36 35 29 1 9 40 66 35 37 34 + 29 1 10 39 65 38 35 35 28 1 9 42 63 37 35 37 26 3 8 41 64 36 6 3 25 + 39 26 3 7 41 18 1 46 37 4 4 26 37 27 3 8 39 18 6 42 37 4 4 26 37 27 3 + 8 38 18 7 43 36 3 5 26 38 27 1 9 10 1 27 18 7 43 35 4 5 26 37 38 7 5 + 27 16 7 45 4 3 27 4 6 25 36 28 4 6 9 5 1 2 23 16 8 44 34 3 7 27 34 29 + 2 7 11 1 3 5 19 17 9 43 34 4 3 30 34 29 2 7 11 2 2 6 18 17 9 43 34 5 + 2 30 35 28 2 8 10 1 6 3 17 18 11 41 34 5 2 30 35 28 2 11 7 1 6 3 17 + 17 13 40 35 5 1 30 35 29 1 12 6 4 3 4 13 1 2 17 15 38 34 6 2 30 34 29 + 1 13 5 6 1 5 11 1 3 17 16 37 34 6 2 30 34 29 2 14 2 14 14 17 17 36 34 + 6 2 30 34 29 2 29 3 4 7 17 19 35 34 6 1 31 34 29 2 28 3 5 7 18 19 34 + 34 6 1 31 34 29 2 29 2 5 7 18 20 33 34 6 2 30 34 29 2 37 6 17 23 31 + 34 5 5 28 34 29 2 37 5 18 24 30 34 5 17 16 35 28 2 35 7 17 26 29 34 5 + 22 2 2 7 35 28 2 35 7 16 29 27 34 5 22 3 6 3 34 28 2 35 6 17 12 3 15 + 26 34 5 32 1 35 29 1 35 6 16 32 25 34 5 68 29 1 33 8 16 33 24 34 5 68 + 29 1 32 9 14 36 23 34 5 68 29 1 32 9 17 1 4 22 29 34 5 37 1 30 29 1 + 32 9 16 4 1 21 6 3 22 19 4 11 5 17 2 16 8 1 11 13 29 2 32 7 17 8 1 4 + 1 13 5 4 21 3 14 1 6 1 3 6 5 17 1 17 26 7 29 2 36 3 17 17 1 8 8 3 20 + 3 21 1 6 3 5 35 28 5 29 2 56 26 8 3 20 2 30 2 5 35 29 4 30 1 56 27 7 + 4 19 2 30 2 5 35 31 2 30 1 56 11 2 15 7 3 20 2 29 2 5 35 31 2 30 1 56 + 4 2 6 1 18 3 4 20 2 30 1 5 36 31 1 30 1 56 1 1 28 4 3 21 1 31 1 5 36 + 31 1 30 1 56 1 3 24 6 3 21 1 30 2 4 37 62 1 63 22 3 6 20 1 31 1 5 36 + 62 1 65 22 1 5 21 1 31 1 5 36 62 1 65 27 22 1 31 1 5 36 125 30 22 2 + 30 1 5 36 123 32 22 2 30 1 5 37 117 37 22 2 30 1 5 37 114 40 22 2 30 + 1 5 37 114 40 23 1 30 1 5 37 114 40 23 1 30 1 5 37 123 10 1 9 1 9 55 + 1 5 37 123 9 2 8 2 9 55 1 5 37 119 15 1 18 55 1 5 37 120 33 55 1 5 37 + 120 32 56 1 5 37 121 31 56 1 5 37 122 30 56 1 5 37 123 1 1 27 56 1 5 + 37 124 28 62 37 124 28 62 37 126 3 6 17 56 2 4 37 128 2 6 15 57 2 4 + 38 127 4 4 15 57 2 4 38 128 22 63 38 129 2 1 18 57 2 4 38 126 4 2 19 + 56 2 5 4 3 2 1 5 1 21 2 1 130 17 63 5 7 3 1 1 1 22 133 15 62 7 20 13 + 135 13 64 5 23 10 136 13 64 5 24 11 134 14 63 5 23 13 134 14 57 3 2 6 + 25 9 135 12 59 1 4 5 29 6 136 10 65 5 28 7 137 9 65 5 29 5 137 10 66 + 3 31 4 138 9 60 1 5 3 31 4 139 1 1 5 61 2 5 2 32 3 140 1 1 3 62 2 5 2 + 32 3 207 2 5 2 32 3 207 2 6 1 33 2 207 2 41 1 207 2 1 0 + + + + 33885.0 + + + 1.85925925926 + + + 9190.0 + + + 0.197932535365 + + + 0.871564701008 + + + 0.45050663765 0.516045994186 0.606801262057 0.0875494460999 + -0.00717386654119 0.142826539941 -0.0177039154021 0.0538406916013 + -0.000786222574279 + + + 251.0 + + + 0.673306772908 3.2 + + + 0.557768924303 0.557768924303 1.09960159363 0.430278884462 + 0.296296296296 3.73333333333 5.86666666667 2.57777777778 + + + 135.0 + + + 30.0 119.0 0.23499491353 29.0 1.0 10.0 + + + 0.0 0.992592592593 + + + 0.271211450494 + + + 0.00342130987292 0.345825426945 0.624762808349 0.401802656546 + 0.461279461279 0.577964519141 0.118113912232 0.0 0.000481000481 + 0.265172735761 0.476657329599 0.251633986928 0.0 0.403828197946 + 0.347338935574 0.047619047619 + + + 0.0 0.0 0.0 0.0702087286528 0.385199240987 0.931688804554 + 0.935483870968 0.19734345351 0.0141129032258 0.0 0.379506641366 + 0.933586337761 0.907020872865 0.275142314991 0.265654648956 + 0.208728652751 0.541015625 0.983455882353 0.954044117647 + 0.205882352941 0.231617647059 0.0698529411765 0.0 0.0 + 0.0866935483871 0.19734345351 0.552182163188 0.599620493359 + 0.140417457306 0.0284629981025 0.0 0.0 0.0 0.00189753320683 + 0.282732447818 0.692599620493 0.322580645161 0.0474383301708 + 0.00569259962049 0.0 0.0 0.0 0.0 0.0992647058824 0.691176470588 + 0.827205882353 0.738970588235 0.246323529412 0.0 0.0 + 0.0872865275142 0.193548387097 0.172675521822 0.19734345351 + 0.102466793169 0.022770398482 0.0 0.0 0.404411764706 0.913602941176 + 0.908088235294 0.101102941176 0.0349264705882 0.03125 + + + 0.431018762596 0.195971224182 0.128909772428 0.0804448262834 + 0.117387257503 0.344299018951 0.113980613877 0.21091857051 + 0.150142063397 0.0785225492022 0.0380803737369 0.28884964687 + 0.222486576457 0.0670215009311 + + + + + + + + + 45 2 43 4 41 6 39 8 38 9 36 11 35 12 33 14 32 15 31 16 30 17 29 18 28 + 19 27 20 26 21 25 22 24 23 23 24 22 25 21 26 21 26 20 27 19 28 19 28 + 18 29 17 30 17 30 16 31 16 31 15 32 15 32 14 33 14 33 13 34 13 34 12 + 35 12 35 11 36 11 36 10 37 9 38 9 38 8 39 7 40 6 41 6 41 5 42 4 43 3 + 44 2 45 1 93 + + + + 2444.0 + + + 0.903846153846 + + + 1453.0 + + + 0.13764624914 + + + 0.958972570897 + + + 0.654762260989 0.62032576279 0.0815184105065 0.121251914017 + -0.0422327368845 -0.0104615985482 0.00661051117134 0.00832963527467 + -0.0157020418422 + + + 47.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 52.0 + + + 3.0 0.0 0.0 0.0 1.0 1.0 + + + 0.0 0.980769230769 + + + 0.594517184943 + + + 0.0 0.0 0.0 0.51048951049 0.0 0.173076923077 0.769230769231 1.0 + 0.173076923077 0.935897435897 1.0 1.0 0.794871794872 1.0 1.0 1.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.428571428571 0.0 0.0 0.0 0.0 0.0 0.0 + 0.472222222222 0.97619047619 0.0 0.0 0.0 0.0 0.25 0.785714285714 + 1.0 1.0 0.0 0.0 0.0277777777778 0.619047619048 1.0 1.0 1.0 1.0 0.0 + 0.0238095238095 0.722222222222 1.0 1.0 1.0 1.0 1.0 0.0 + 0.619047619048 1.0 1.0 1.0 1.0 1.0 1.0 0.277777777778 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 0.833333333333 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.524693241608 0.0990286387106 0.0372035131557 0.0756341869162 + 0.254052034368 0.155780384069 0.0498791176745 0.0500781328544 + 0.136434000548 0.0688789461821 0.0259443524027 0.0700504719017 + 0.0979429218372 0.00794929416806 + + + + + + + + + 2 1 36 2 38 7 25 9 36 16 11 15 36 20 3 19 36 21 2 18 37 21 2 18 38 19 + 3 18 38 20 1 19 38 40 38 40 38 3 3 34 40 1 3 34 38 4 2 35 37 3 3 35 + 37 4 3 34 37 40 38 40 38 40 38 40 38 41 37 41 38 39 39 39 39 4 2 1 2 + 30 39 39 39 39 39 39 39 40 39 39 32 2 4 39 32 3 3 42 29 5 3 41 30 4 3 + 41 30 5 2 40 32 1 6 39 32 1 6 40 28 6 4 39 30 4 5 19 1 19 22 4 1 1 2 + 5 4 19 1 19 18 17 4 41 11 21 6 72 6 7 1 64 6 73 4 74 5 16 1 56 5 3 10 + 3 2 8 8 39 5 2 33 38 5 2 33 38 5 2 33 38 41 38 39 37 41 38 40 38 40 + 38 40 38 40 38 40 37 41 38 40 38 40 34 44 31 47 29 49 37 41 37 41 5 2 + 31 40 38 40 38 40 38 40 38 40 38 40 38 40 37 42 8 1 27 42 37 41 37 41 + 37 41 37 41 37 41 37 41 37 41 38 40 38 40 10 1 11 1 15 40 10 5 1 3 3 + 3 2 1 10 41 2 22 1 1 11 41 2 21 14 42 3 18 11 1 3 64 3 3 3 1 4 64 4 2 + 7 44 1 28 5 42 2 35 0 + + + + 7098.0 + + + 0.857142857143 + + + 3468.0 + + + 0.149942329873 + + + 1.5010940919 + + + 0.522775955302 0.472616301423 0.136605589319 0.157387948801 + 0.102583048718 -0.00327514065985 0.00137121450816 -0.00256336813886 + 0.00464027278998 + + + 78.0 + + + 0.769230769231 0.615384615385 + + + 0.769230769231 0.102564102564 0.769230769231 1.33333333333 + 0.571428571429 0.835164835165 0.307692307692 0.703296703297 + + + 91.0 + + + 11.0 53.0 0.230547550432 4.0 2.0 4.0 + + + 0.0 0.989010989011 + + + 0.488588334742 + + + 0.842105263158 0.848970251716 0.025171624714 0.0 0.879545454545 + 0.99347826087 0.0217391304348 0.0 0.124401913876 0.347826086957 + 0.993135011442 0.670480549199 0.0 0.367391304348 0.9 0.795652173913 + + + 0.818181818182 0.747474747475 0.759259259259 0.626262626263 + 0.0909090909091 0.0 0.0 0.0 0.790909090909 1.0 0.983333333333 + 0.990909090909 0.0181818181818 0.0 0.0 0.0 0.645454545455 1.0 1.0 + 0.972727272727 0.0727272727273 0.0 0.0 0.0 0.872727272727 1.0 1.0 + 1.0 0.0181818181818 0.0 0.0 0.0 0.252525252525 0.272727272727 + 0.305555555556 0.666666666667 0.989898989899 0.981481481481 + 0.929292929293 0.462962962963 0.0 0.0 0.0 0.481818181818 1.0 1.0 + 0.990909090909 0.35 0.0 0.0 0.0 0.654545454545 1.0 1.0 1.0 + 0.516666666667 0.0 0.0 0.166666666667 0.7 0.9 0.708333333333 + 0.881818181818 0.808333333333 + + + 0.399501488056 0.194797086482 0.0105884606076 0.0180070416595 + 0.0178432163085 0.347363974624 0.091302397749 0.0260665162707 + 0.0316655340149 0.0244039490611 0.107230361131 0.242234983796 + 0.101127133588 0.0699252870792 + + + + + + + + + 5 2 31 4 28 8 28 7 28 2 1 5 27 8 27 9 28 7 28 1 1 6 26 9 25 11 24 12 + 23 13 21 14 21 14 1 1 19 17 18 18 17 18 1 1 15 20 15 21 14 18 17 18 1 + 1 2 2 11 18 1 7 9 3 2 23 7 3 2 23 7 4 1 15 1 8 6 4 1 25 5 32 3 4 1 27 + 3 4 1 20 5 2 3 4 1 19 5 2 4 4 1 18 7 1 4 23 7 2 3 24 4 5 2 25 2 6 2 + 32 4 32 2 33 2 33 2 33 2 33 2 33 2 33 2 2 4 27 3 32 3 32 2 32 4 4 1 + 27 3 5 1 26 3 4 2 26 3 3 5 24 3 3 5 24 3 3 6 22 4 3 10 15 2 1 5 2 7 3 + 1 4 2 8 8 2 8 2 1 17 5 2 9 19 5 2 10 19 3 5 8 20 3 5 8 19 3 5 10 17 3 + 6 9 17 2 7 9 17 2 8 7 18 2 10 5 19 2 3 3 1 1 2 7 15 3 4 13 7 2 6 3 5 + 5 1 4 8 4 5 3 10 5 1 1 4 8 3 3 11 3 2 4 3 4 6 2 12 8 4 5 3 3 12 3 2 3 + 4 11 11 4 2 3 4 11 11 4 3 1 2 2 2 1 1 9 12 2 3 5 4 8 19 2 6 8 22 2 2 + 9 22 2 2 9 22 5 1 7 29 6 30 5 30 5 19 1 8 7 29 7 28 7 18 3 8 6 18 3 2 + 12 11 1 6 4 2 3 1 6 11 3 2 1 2 4 3 1 2 7 11 2 5 4 7 6 11 1 6 4 7 6 11 + 1 7 2 3 11 19 2 4 10 27 7 29 6 30 6 30 5 30 5 19 1 10 8 6 1 1 1 7 2 8 + 12 2 2 1 1 7 2 8 20 3 4 4 1 3 27 4 1 3 7 1 4 1 8 4 2 8 7 9 3 16 7 18 + 1 10 6 29 6 28 7 18 1 10 5 30 5 29 6 30 5 29 7 29 6 6 1 22 4 8 2 1 2 + 18 5 7 7 15 7 7 6 5 1 9 6 8 7 3 2 9 7 5 10 1 5 8 7 6 8 13 6 8 9 1 1 + 10 7 6 12 10 7 6 12 11 6 7 13 8 7 6 14 8 8 5 16 6 8 6 15 6 7 7 18 3 7 + 7 17 4 7 7 17 4 8 6 19 1 9 6 29 6 29 6 29 5 30 6 30 5 29 6 29 6 29 6 + 30 5 29 5 30 6 30 5 30 5 30 5 30 5 30 5 30 5 30 6 29 6 29 6 30 5 30 5 + 30 5 30 5 30 5 30 5 31 4 31 4 31 4 31 4 33 1 32 3 32 3 24 0 + + + + 5810.0 + + + 0.210843373494 + + + 3081.0 + + + 0.278156442713 + + + 1.06926247056 + + + 0.452794165378 0.430893157475 0.0269868461235 0.466166378989 + 0.0101952991941 0.00085127777921 -0.0217135466197 + -0.000632886817978 0.0750749269672 + + + 35.0 + + + 4.97142857143 0.789156626506 + + + 4.57142857143 4.45714285714 4.8 5.14285714286 0.530120481928 + 1.27710843373 1.13253012048 0.192771084337 + + + 166.0 + + + 24.0 112.0 0.234432234432 12.0 9.0 3.0 + + + 0.0 0.993975903614 + + + 0.530292598967 + + + 0.884146341463 0.660714285714 0.533536585366 0.258928571429 + 0.742547425474 0.65873015873 0.726287262873 0.351851851852 + 0.466124661247 0.883597883598 0.79674796748 0.010582010582 + 0.222222222222 0.608465608466 0.626016260163 0.0952380952381 + + + 0.7125 0.964285714286 0.690476190476 0.52380952381 0.25 + 0.107142857143 0.0 0.0 0.95 0.904761904762 0.5 0.928571428571 0.825 + 0.952380952381 0.77380952381 0.261904761905 0.61 1.0 0.561904761905 + 0.780952380952 0.86 0.733333333333 0.561904761905 0.704761904762 + 0.3 1.0 0.821428571429 0.464285714286 0.775 0.511904761905 0.0 0.0 + 0.125 0.916666666667 0.97619047619 0.785714285714 0.925 + 0.785714285714 0.0 0.0 0.0 0.809523809524 1.0 0.771428571429 0.63 + 0.866666666667 0.0380952380952 0.0 0.0 0.583333333333 0.97619047619 + 0.583333333333 0.8125 1.0 0.25 0.0 0.0 0.314285714286 + 0.552380952381 0.390476190476 0.3 0.495238095238 0.142857142857 0.0 + + + 0.634308932722 0.142918812502 0.0586516340611 0.0256399019056 + 0.531068704687 0.372983606735 0.0725713099838 0.0675871984553 + 0.0332759232457 0.0372852080538 0.295869654035 0.50506679615 + 0.188188295351 0.0460687208431 + + + + + + + + + 63 5 189 6 188 6 188 7 185 10 184 12 182 12 182 11 2 1 180 12 1 2 179 + 15 178 16 178 16 178 17 177 16 178 16 178 15 179 16 178 16 178 17 177 + 18 176 20 1 4 1 1 167 29 1 3 161 20 1 13 159 21 1 3 1 10 158 39 90 1 + 63 43 85 5 62 42 84 6 62 42 85 5 62 31 1 10 85 5 62 43 84 4 63 5 2 3 + 2 31 83 5 63 11 1 32 83 4 63 43 1 1 81 5 64 42 2 1 57 12 11 4 65 17 1 + 24 56 24 1 6 65 4 2 4 1 5 2 26 53 32 65 3 4 1 4 4 2 3 3 21 52 32 65 3 + 3 2 3 10 4 26 46 33 64 4 2 3 3 9 5 26 46 31 65 5 1 15 5 27 45 31 66 4 + 1 16 3 30 43 31 66 22 2 30 43 31 66 22 2 1 1 30 41 31 66 21 8 28 40 + 31 66 22 9 28 37 32 66 5 2 15 10 28 36 32 66 5 2 16 12 26 34 33 75 1 + 2 11 11 29 32 34 78 10 11 28 33 34 66 3 4 15 14 19 4 1 34 33 67 22 16 + 17 4 1 35 33 66 22 16 19 1 3 33 34 66 6 2 14 18 22 33 33 66 6 4 12 19 + 18 37 32 66 22 5 3 15 16 37 30 67 21 4 6 13 17 35 10 1 20 67 33 11 17 + 36 8 4 18 67 21 1 11 13 15 36 9 1 20 67 21 1 14 10 16 33 32 67 8 1 11 + 4 14 9 16 32 32 68 1 9 10 5 14 8 16 32 31 68 1 10 7 9 14 7 15 32 31 + 68 2 9 8 10 14 7 14 31 31 68 4 7 9 9 16 6 14 30 31 68 4 1 1 5 5 1 1 1 + 1 10 19 3 14 29 19 1 5 2 1 71 16 3 1 7 4 1 18 2 15 28 7 2 19 71 20 8 + 22 3 15 27 31 43 3 22 18 10 23 2 15 28 30 36 19 12 17 1 1 19 13 3 16 + 27 30 37 47 26 8 3 17 25 31 37 47 9 5 10 10 3 19 23 31 37 50 3 52 7 1 + 13 31 37 35 3 69 5 3 11 32 36 34 7 7 3 55 6 2 1 1 9 29 1 2 37 34 8 64 + 7 4 7 29 2 2 37 17 2 15 9 43 1 1 1 17 6 8 3 8 2 4 2 7 1 1 1 3 3 3 36 + 17 2 15 11 62 5 17 26 3 36 17 2 15 13 22 3 5 2 29 3 5 2 11 26 3 36 17 + 2 15 18 16 6 2 5 27 2 19 26 3 36 34 20 12 16 9 1 16 2 19 26 3 37 33 + 21 14 14 22 6 18 26 3 37 34 20 10 20 7 1 3 2 8 5 18 26 3 37 33 24 12 + 15 11 4 7 3 19 26 3 37 34 24 14 11 12 8 4 1 20 26 3 37 36 27 8 11 15 + 10 22 25 3 5 2 29 38 29 5 11 15 11 21 25 4 3 4 26 41 29 5 4 9 4 9 10 + 22 23 7 1 6 25 39 32 16 5 9 9 22 23 6 2 6 26 38 38 11 6 9 8 21 23 6 2 + 6 26 38 42 2 2 6 5 8 7 21 24 6 1 7 25 17 3 18 58 9 5 21 24 6 1 6 26 + 17 3 18 60 8 4 20 25 6 1 5 27 17 4 17 62 30 25 5 1 6 27 6 2 9 1 20 64 + 28 25 4 3 5 27 6 5 6 1 20 65 27 25 4 3 5 37 26 1 1 67 25 25 4 3 6 37 + 6 1 20 71 21 24 5 4 8 34 4 2 21 72 21 23 5 4 28 1 2 10 5 1 23 71 21 + 23 5 5 34 6 7 2 20 72 20 22 6 5 33 8 11 1 16 72 20 22 6 5 32 10 2 2 + 23 72 20 22 6 5 69 73 19 22 6 5 69 73 19 22 6 5 69 77 15 22 6 5 69 78 + 2 2 10 22 6 5 34 1 35 83 8 23 5 5 33 8 29 84 8 23 4 5 33 9 2 1 25 85 + 7 23 4 5 33 20 17 89 3 24 3 5 33 29 8 90 2 24 2 6 33 33 4 91 1 25 1 6 + 34 33 3 117 1 6 38 30 3 116 2 5 35 34 1 116 3 5 36 150 3 4 38 149 3 5 + 38 148 3 5 38 149 2 5 38 149 2 7 2 3 30 158 38 157 37 157 37 157 32 3 + 2 157 33 161 36 158 38 156 38 155 40 154 40 155 39 155 39 155 39 155 + 39 155 39 155 39 156 39 155 39 155 5 14 20 155 4 23 12 155 4 26 9 155 + 4 29 6 155 4 29 7 154 4 30 6 155 3 30 6 155 3 30 6 156 2 31 5 155 2 + 32 5 190 4 190 3 191 3 149 0 + + + + 29488.0 + + + 1.27631578947 + + + 8500.0 + + + 0.213294117647 + + + 0.729099479037 + + + 0.476607131972 0.496032723023 0.355421510481 0.120062873252 + -0.08785528694 0.0542963144459 -0.0322010466672 0.0359551779004 + 0.0031617426892 + + + 194.0 + + + 1.59278350515 2.38157894737 + + + 1.01030927835 2.53608247423 1.9175257732 0.845360824742 + 1.07894736842 3.78947368421 4.15789473684 0.5 + + + 152.0 + + + 30.0 181.0 0.260126012601 14.0 4.0 18.0 + + + 0.0 0.993421052632 + + + 0.288252848616 + + + 0.0 0.0679824561404 0.533442982456 0.583881578947 0.472073039742 + 0.543501611171 0.450053705693 0.000537056928034 0.0433114035088 + 0.520285087719 0.253289473684 0.0 0.0982814178303 0.640708915145 + 0.389903329753 0.00859291084855 + + + 0.0 0.0 0.0 0.0 0.116228070175 0.780701754386 0.820175438596 + 0.322368421053 0.0 0.0 0.0 0.271929824561 0.605263157895 + 0.631578947368 0.723684210526 0.469298245614 0.43201754386 + 0.475877192982 0.348684210526 0.489035087719 0.853070175439 + 0.774122807018 0.0 0.0 0.0989473684211 0.88 0.652631578947 + 0.673684210526 0.183157894737 0.0189473684211 0.00210526315789 0.0 + 0.0 0.173245614035 0.793859649123 0.782894736842 0.372807017544 0.0 + 0.0 0.0 0.0 0.0 0.0460526315789 0.458333333333 0.603070175439 + 0.0372807017544 0.0 0.0 0.0 0.118421052632 0.475877192982 + 0.460526315789 0.739035087719 0.493421052632 0.0 0.0 0.0 + 0.271578947368 0.810526315789 0.802105263158 0.170526315789 + 0.174736842105 0.0336842105263 0.0 + + + 0.352760655845 0.185984495083 0.0926614448629 0.126273479799 + 0.0887531450514 0.201916286884 0.117668481144 0.182455375269 + 0.231633036435 0.0811238212001 0.146495525371 0.09462628017 + 0.223765000395 0.0548714312484 + + + + + + + + + 37 1 39 1 39 1 39 1 39 1 39 1 39 1 38 2 13 2 23 2 5 12 6 4 11 2 4 15 + 3 18 3 37 3 37 3 37 3 37 3 37 3 4 1 32 4 3 3 30 4 3 1 32 4 36 4 36 4 + 36 4 36 4 30 1 2 1 2 4 36 2 39 2 39 1 39 1 39 2 10 1 26 3 7 4 26 3 37 + 4 35 5 36 4 4 3 29 4 36 4 36 4 36 4 36 5 35 5 35 5 35 5 35 5 35 5 35 + 5 35 5 35 6 34 6 34 6 34 6 34 6 34 6 34 6 1 11 22 36 4 1 0 + + + + 2200.0 + + + 0.727272727273 + + + 1588.0 + + + 0.139798488665 + + + 1.04518072289 + + + 0.524010204741 0.568651460024 0.0695203701075 0.104454234118 + 0.00679328475173 -0.000623610823054 0.00144559482117 + -0.00150622778327 0.000175460441256 + + + 40.0 + + + 0.35 0.236363636364 + + + 0.8 0.3 0.0 0.3 0.290909090909 0.363636363636 0.218181818182 + 0.0727272727273 + + + 55.0 + + + 2.0 20.0 0.211428571429 0.0 2.0 9.0 + + + 0.0 0.981818181818 + + + 0.721818181818 + + + 0.253846153846 0.814285714286 0.707142857143 0.478571428571 + 0.261538461538 1.0 0.971428571429 0.878571428571 0.261538461538 1.0 + 1.0 0.928571428571 0.284615384615 0.807142857143 0.907142857143 + 0.864285714286 + + + 0.0 0.371428571429 0.714285714286 0.685714285714 0.6 0.342857142857 + 0.171428571429 0.0 0.0 0.571428571429 0.857142857143 1.0 + 0.971428571429 0.914285714286 1.0 0.742857142857 0.0 0.628571428571 + 1.0 1.0 0.885714285714 1.0 1.0 0.714285714286 0.0 0.342857142857 + 1.0 1.0 1.0 1.0 1.0 0.8 0.0 0.542857142857 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.428571428571 1.0 1.0 1.0 1.0 1.0 + 0.857142857143 0.0 0.428571428571 1.0 0.971428571429 1.0 1.0 1.0 + 0.857142857143 0.2 0.457142857143 0.6 0.657142857143 0.828571428571 + 0.8 0.8 0.8 + + + 0.530013581763 0.0457742032031 0.00864045671784 0.0125752215082 + 0.152088541837 0.101024959816 0.0402635693156 0.00272595089634 + 0.0240805454776 0.0080770570225 0.192136629199 0.0501057071816 + 0.108937353363 0.0252389121079 + + + + + + + + + 4 1 4 1 3 2 2 3 2 2 3 2 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 + 3 2 3 3 1 4 1 4 2 2 3 2 3 2 3 2 3 2 3 2 2 3 2 3 2 3 2 2 4 1 3 2 3 2 3 + 2 3 3 2 3 2 3 2 3 2 2 3 2 3 2 3 3 2 2 3 2 3 3 2 3 2 2 3 2 3 2 3 2 3 2 + 3 2 4 2 3 2 2 2 0 + + + + 280.0 + + + 0.0892857142857 + + + 146.0 + + + 0.938356164384 + + + 0.986506746627 + + + 0.422945205479 0.515193026152 0.00652702838179 1.75420129454 + -0.0510835644715 6.1820743457e-05 0.0242080347206 -0.00135341032742 + 0.00960860117896 + + + 5.0 + + + 1.4 0.0 + + + 2.4 0.8 0.0 2.4 0.0 0.0 0.0 0.0 + + + 56.0 + + + 2.0 9.0 0.155172413793 0.0 11.0 1.0 + + + 0.0 0.982142857143 + + + 0.521428571429 + + + 0.0 0.0 0.5 0.642857142857 0.571428571429 0.785714285714 1.0 1.0 + 0.785714285714 1.0 1.0 1.0 0.571428571429 0.392857142857 + 0.0357142857143 0.0714285714286 + + + 0.0 0.0 0.0 0.0 0.571428571429 0.428571428571 0.571428571429 + 0.714285714286 0.0 0.0 0.0 0.0 0.571428571429 0.428571428571 + 0.571428571429 0.714285714286 0.142857142857 1.0 0.714285714286 + 0.857142857143 1.0 1.0 1.0 1.0 0.142857142857 1.0 0.714285714286 + 0.857142857143 1.0 1.0 1.0 1.0 0.571428571429 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 0.714285714286 1.0 0.714285714286 0.857142857143 + 0.142857142857 0.0 0.0 0.285714285714 0.714285714286 1.0 + 0.714285714286 0.857142857143 0.142857142857 0.0 0.0 0.285714285714 + 0.571428571429 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.359451050855 0.296036412858 0.00729676289249 0.0070057002853 + 0.241590123862 0.399383732008 0.267103677758 0.0211933143625 + 0.0142099646351 0.0177563548749 0.362383463281 0.25669960306 + 0.415038317833 0.238050251071 + + + + + + + + + 34 3 41 2 135 1 42 1 28 2 2 5 5 1 22 15 5 2 13 23 5 2 7 29 5 38 5 38 + 5 38 5 38 5 38 5 38 5 38 5 38 5 38 5 38 6 37 5 38 5 38 5 38 5 38 5 38 + 5 38 5 38 5 37 7 33 1 1 1 1 6 37 6 3 4 30 6 1 1 1 4 30 6 4 1 32 6 38 + 5 38 5 38 5 38 5 36 7 4 1 3 3 23 1 1 7 5 1 32 5 3 1 34 5 38 6 37 6 38 + 5 38 5 38 5 37 6 37 6 37 6 21 5 5 2 4 6 13 8 12 1 4 5 4 2 1 20 1 6 4 + 5 2 32 4 5 1 34 3 5 1 34 3 40 3 40 3 40 3 40 3 39 4 38 6 38 4 38 5 39 + 6 37 4 1 1 36 7 35 8 36 7 36 6 36 8 35 8 36 6 36 7 35 7 36 7 36 6 36 + 9 33 10 33 10 34 9 35 8 35 9 34 9 34 10 34 2 1 5 40 1 1 1 40 1 1 1 40 + 1 3 0 + + + + 3827.0 + + + 0.483146067416 + + + 1860.0 + + + 0.194086021505 + + + 1.16363636364 + + + 0.510867895545 0.388288123167 0.0748096521507 0.186920352996 + 0.0413109081229 -0.00303499004493 0.0313275028401 0.0068394314443 + 0.0641031228605 + + + 43.0 + + + 1.04651162791 0.337078651685 + + + 0.93023255814 0.186046511628 0.46511627907 2.51162790698 + 0.224719101124 0.494382022472 0.494382022472 0.134831460674 + + + 89.0 + + + 13.0 51.0 0.205426356589 4.0 3.0 7.0 + + + 0.0 0.988764044944 + + + 0.4860203815 + + + 0.577272727273 0.863636363636 0.331818181818 0.0 0.615702479339 + 0.99173553719 0.338842975207 0.0 0.681818181818 1.0 0.338842975207 + 0.00790513833992 0.413223140496 0.553719008264 0.46694214876 + 0.636363636364 + + + 0.218181818182 0.981818181818 0.872727272727 0.763636363636 + 0.545454545455 0.0181818181818 0.0 0.0 0.109090909091 1.0 + 0.890909090909 0.927272727273 0.763636363636 0.0 0.0 0.0 + 0.19696969697 1.0 1.0 0.969696969697 0.712121212121 0.0 0.0 0.0 + 0.272727272727 1.0 1.0 1.0 0.636363636364 0.0 0.0 0.0 + 0.327272727273 1.0 1.0 1.0 0.636363636364 0.0 0.0 0.0 + 0.393939393939 1.0 1.0 1.0 0.712121212121 0.0 0.0 0.0277777777778 + 0.527272727273 1.0 0.963636363636 0.981818181818 0.709090909091 + 0.145454545455 0.581818181818 0.633333333333 0.0757575757576 + 0.166666666667 0.151515151515 0.257575757576 0.439393939394 + 0.560606060606 0.681818181818 0.638888888889 + + + 0.670596604876 0.0756468202161 0.125154847074 0.058095049201 + 0.667740224741 0.108988246606 0.0561752345311 0.2084433044 + 0.0635916059952 0.059574271644 0.435716177885 0.0850531496157 + 0.0706799971039 0.0536581656497 + + + + + + + + + 61 1 153 2 154 1 154 1 154 1 123 4 26 2 123 25 1 7 122 33 122 33 122 + 33 122 33 123 32 123 3 1 13 3 12 123 3 2 10 5 10 126 3 2 11 1 1 1 10 + 127 2 2 13 1 11 124 4 2 26 124 3 3 25 124 3 4 11 2 11 123 19 1 12 123 + 33 122 33 94 1 27 33 94 1 27 33 94 2 26 32 95 2 26 33 94 2 27 32 94 2 + 27 15 5 12 94 2 27 32 93 3 27 32 93 4 26 32 94 3 27 31 93 5 25 32 19 + 3 70 7 24 32 19 4 69 9 21 34 17 11 63 8 22 35 16 11 63 8 22 34 17 9 + 65 8 23 6 3 24 17 8 66 9 22 33 17 11 63 9 21 34 17 12 62 8 22 18 2 1 + 1 12 15 14 61 8 23 17 5 12 15 15 61 8 22 16 6 9 18 15 61 10 20 18 2 + 12 17 19 57 24 7 32 16 19 2 1 54 64 17 17 2 1 55 36 2 25 16 18 2 3 53 + 36 2 25 16 23 53 34 5 24 14 27 52 34 13 1 6 8 14 28 51 34 25 3 13 29 + 51 34 25 4 12 30 50 34 25 4 12 31 49 34 25 4 11 33 48 34 26 3 11 34 + 47 35 26 2 11 35 46 35 26 2 11 36 44 36 26 1 12 36 44 37 25 1 11 37 + 44 37 25 1 11 16 3 11 1 6 44 37 25 1 12 16 2 9 4 5 44 37 25 2 11 16 1 + 11 3 1 2 1 45 37 25 2 13 26 2 2 49 36 25 2 14 3 1 21 2 2 19 1 29 36 + 25 2 16 1 2 24 19 1 31 1 2 25 31 2 19 24 19 1 1 1 29 1 2 12 2 13 1 2 + 26 2 20 19 1 4 17 6 31 11 2 17 25 3 20 18 2 3 17 2 2 3 26 1 3 12 1 17 + 26 2 11 2 7 15 6 2 17 2 1 5 23 17 2 18 25 2 11 2 7 2 2 10 25 3 1 5 23 + 37 24 3 11 2 7 3 1 10 22 4 1 7 23 27 1 9 24 3 11 2 7 13 23 12 24 33 + 27 3 20 12 24 12 24 34 1 1 24 3 21 4 2 5 24 11 25 36 24 3 27 5 23 11 + 25 38 23 3 14 2 12 5 1 2 19 10 26 38 23 3 12 5 3 2 1 8 1 5 4 1 12 11 + 26 38 23 3 14 3 1 13 1 6 3 1 11 11 27 38 23 3 15 2 1 24 11 12 26 38 + 23 3 16 17 1 7 12 13 25 38 24 3 16 15 1 8 11 15 24 38 24 3 18 22 11 + 15 6 5 13 38 25 2 20 20 11 15 3 9 13 38 24 2 21 19 11 14 3 6 3 1 13 + 38 24 2 22 18 10 4 1 5 2 3 1 9 1 3 12 38 24 2 23 16 11 10 3 10 3 4 11 + 8 5 25 24 2 24 15 11 10 3 8 6 4 10 6 19 13 24 2 24 14 12 11 1 15 4 1 + 10 4 26 7 24 2 26 12 11 29 4 1 9 4 28 5 24 2 27 4 5 2 11 30 4 1 8 5 + 28 5 22 4 35 2 11 35 8 5 28 5 23 3 35 2 11 36 7 5 29 4 23 3 34 2 11 + 15 1 21 7 5 29 4 23 3 28 8 11 37 7 5 29 4 23 3 30 6 11 38 6 4 30 4 22 + 5 30 5 11 39 6 3 30 4 23 4 30 5 11 39 40 3 23 3 33 4 10 5 4 30 41 1 + 24 4 45 5 6 3 5 20 67 4 47 3 5 3 6 3 1 17 66 5 62 3 4 15 67 3 63 2 4 + 6 2 7 68 3 47 4 18 14 69 3 45 7 17 14 118 6 17 14 123 1 16 15 140 1 3 + 10 146 3 2 4 147 2 2 4 147 7 148 7 148 7 147 8 146 8 152 3 154 1 1542 + 3 152 3 152 4 152 3 152 4 152 2 153 2 150 1 2 1 150 5 150 3 1 1 152 1 + 1 1 151 3 153 1 12 0 + + + + 21390.0 + + + 1.1231884058 + + + 5350.0 + + + 0.262242990654 + + + 1.35317252229 + + + 0.420205121981 0.437205812129 0.350943976993 0.126810776765 + 0.0970623591172 0.086025131553 0.0203651643793 0.0760017426074 + -0.00437166272849 + + + 155.0 + + + 1.22580645161 2.21739130435 + + + 0.954838709677 1.10967741935 1.3935483871 1.3935483871 + 0.898550724638 2.95652173913 4.49275362319 0.289855072464 + + + 138.0 + + + 22.0 130.0 0.248447204969 23.0 0.0 8.0 + + + 0.0 0.992753623188 + + + 0.250116877045 + + + 0.16253869969 0.748872180451 0.520897832817 0.0 0.524132730015 + 0.320146520147 0.147812971342 0.0021978021978 0.0052790346908 0.6 + 0.281297134238 0.000732600732601 0.0 0.0161172161172 0.572398190045 + 0.116483516484 + + + 0.0 0.105263157895 0.631578947368 0.804093567251 0.823529411765 + 0.173374613003 0.0 0.0 0.229102167183 0.315789473684 0.588235294118 + 0.956140350877 0.987616099071 0.0990712074303 0.0 0.0 + 0.611764705882 0.973529411765 0.811764705882 0.025 0.132352941176 + 0.147058823529 0.0 0.0 0.179566563467 0.303405572755 0.340557275542 + 0.122807017544 0.142414860681 0.170278637771 0.00928792569659 0.0 + 0.0 0.0216718266254 0.724458204334 0.836257309942 0.467492260062 + 0.0340557275542 0.0 0.0 0.0 0.0 0.167647058824 0.672222222222 + 0.411764705882 0.208823529412 0.00294117647059 0.0 0.0 0.0 0.0 + 0.0643274853801 0.643962848297 0.724458204334 0.0402476780186 0.0 + 0.0 0.0 0.0 0.0 0.123529411765 0.808823529412 0.317647058824 + 0.105555555556 + + + 0.553709100688 0.1245065633 0.1428487273 0.0867667144829 + 0.303462040511 0.256522268214 0.0615533194657 0.245100135887 + 0.158274411232 0.0646475353748 0.0518103568023 0.246732130445 + 0.09784340659 0.0505487124869 + + + + + + + + + 33 2 38 3 36 3 36 4 33 7 32 7 32 1 1 4 32 8 7 6 17 9 7 8 16 7 8 8 16 + 7 8 9 15 7 8 10 13 7 9 9 14 7 8 10 13 8 8 11 12 8 7 11 12 9 7 7 16 9 + 7 6 4 1 2 2 7 9 8 6 2 3 1 4 8 7 7 10 1 6 8 6 8 16 1 1 7 6 7 19 2 2 2 + 7 1 1 5 19 1 3 3 8 5 18 1 1 1 1 3 7 7 19 1 2 3 6 8 21 3 6 8 22 3 6 8 + 18 1 1 5 5 10 9 4 3 8 1 1 2 12 3 2 3 5 2 8 1 1 2 12 2 3 2 6 1 9 1 1 2 + 12 2 5 1 15 1 1 1 13 1 5 3 13 1 15 2 4 5 26 4 4 4 27 1 1 2 4 4 27 1 7 + 4 2 2 1 1 21 1 1 2 3 5 1 5 4 3 14 4 2 12 4 3 14 4 1 14 3 3 14 19 3 2 + 15 19 2 3 14 20 1 5 13 26 13 26 13 19 3 4 13 19 3 4 13 19 2 5 13 19 2 + 5 13 19 2 4 15 24 15 17 2 5 15 16 4 3 17 23 16 22 17 4 1 5 2 5 1 4 17 + 10 3 3 3 3 17 11 2 3 3 2 18 6 1 13 19 22 16 6 1 14 19 4 4 11 20 3 6 9 + 22 1 8 8 21 2 8 8 21 2 8 9 21 1 9 7 22 2 8 7 22 2 8 7 32 6 33 6 33 6 + 34 4 21 0 + + + + 2886.0 + + + 0.527027027027 + + + 1174.0 + + + 0.413117546848 + + + 0.824626865672 + + + 0.40650497624 0.506370913164 0.0796155673639 0.282986548516 + -0.0607212671823 0.0136994264759 0.0211269888172 -0.0235175836674 + -0.00134156438243 + + + 39.0 + + + 1.82051282051 1.25675675676 + + + 1.4358974359 2.25641025641 2.46153846154 0.512820512821 + 0.594594594595 2.27027027027 1.13513513514 0.918918918919 + + + 74.0 + + + 14.0 66.0 0.256603773585 9.0 13.0 2.0 + + + 0.0 0.986486486486 + + + 0.406791406791 + + + 0.16049382716 0.497076023392 0.845679012346 0.374269005848 0.35 + 0.689473684211 0.961111111111 0.731578947368 0.0111111111111 + 0.289473684211 0.438888888889 0.184210526316 0.638888888889 + 0.368421052632 0.0 0.0 + + + 0.0 0.0 0.138888888889 0.275 0.75 0.861111111111 0.527777777778 0.2 + 0.0444444444444 0.533333333333 0.955555555556 0.52 0.755555555556 + 1.0 0.777777777778 0.04 0.0888888888889 0.955555555556 + 0.888888888889 0.7 0.955555555556 1.0 0.822222222222 0.24 0.0 + 0.355555555556 0.888888888889 0.32 0.955555555556 0.933333333333 + 0.911111111111 0.98 0.0 0.0 0.577777777778 0.14 0.511111111111 + 0.666666666667 0.622222222222 0.14 0.0 0.0444444444444 + 0.288888888889 0.18 0.311111111111 0.266666666667 0.0 0.0 + 0.288888888889 0.822222222222 0.977777777778 0.28 0.0 0.0 0.0 0.0 + 0.777777777778 0.666666666667 0.266666666667 0.0 0.0 0.0 0.0 0.0 + + + 0.490453017117 0.151710666856 0.0897752802568 0.0595840647194 + 0.223368680631 0.286746760891 0.0472026099396 0.136311171712 + 0.103574187723 0.0826904341695 0.0100030173301 0.239566560025 + 0.0396011960707 0.0435882589309 + + + + + + + + + 8 12 1 3 29 23 22 32 13 33 12 33 12 33 12 33 12 33 12 33 12 34 11 33 + 11 34 12 33 12 33 12 33 12 34 11 34 11 34 10 36 8 38 8 37 8 36 9 36 9 + 36 9 35 11 35 10 35 10 35 10 35 10 35 10 35 10 35 10 36 9 36 9 36 10 + 34 11 34 11 34 11 34 11 34 11 34 12 33 12 33 12 4 10 20 11 3 19 11 12 + 3 24 4 14 2 26 2 16 1 26 2 44 1 44 1 44 1 359 1 44 1 44 1 44 2 43 2 6 + 9 28 2 5 20 1 1 16 2 5 20 1 7 9 3 5 40 5 40 5 18 1 1 2 18 5 20 2 18 6 + 20 1 19 5 3 4 9 2 22 5 2 5 7 1 2 1 22 5 2 4 4 1 29 5 3 3 34 5 4 2 34 + 5 2 5 33 5 40 5 40 5 41 2 44 2 43 3 9 3 30 3 8 4 30 4 41 4 4 7 29 5 + 40 5 40 6 4 4 31 6 6 1 32 6 39 6 39 6 39 6 40 5 40 6 39 6 39 6 39 6 + 39 6 19 1 19 6 19 1 19 6 39 7 39 6 39 6 39 6 16 2 21 6 4 6 28 8 2 16 + 2 1 17 7 1 26 11 7 1 30 7 7 1 32 5 41 4 42 3 43 2 43 2 44 1 44 1 + + + + 5265.0 + + + 0.384615384615 + + + 3205.0 + + + 0.153822152886 + + + 0.988178633975 + + + 0.545447454262 0.484084673732 0.03830452123 0.363788753014 + 0.000174664082511 -0.000505243206287 0.00318321444838 + 0.00367572012434 -0.0197620178829 + + + 45.0 + + + 1.75555555556 0.333333333333 + + + 2.04444444444 2.13333333333 1.33333333333 1.42222222222 + 0.034188034188 0.17094017094 0.752136752137 0.376068376068 + + + 117.0 + + + 14.0 52.0 0.224783861671 4.0 11.0 7.0 + + + 0.0 0.991452991453 + + + 0.60873694207 + + + 0.300940438871 0.112852664577 0.608150470219 0.375757575758 + 0.996865203762 0.510971786834 0.733542319749 0.648484848485 + 0.965517241379 0.514106583072 0.739811912226 0.675757575758 + 0.695402298851 0.502873563218 0.609195402299 0.738888888889 + + + 0.0 0.0 0.0 0.0 0.466666666667 0.571428571429 0.12 0.0 + 0.511904761905 0.588888888889 0.380952380952 0.0444444444444 + 0.577777777778 0.797619047619 0.955555555556 0.322222222222 1.0 1.0 + 1.0 0.12 0.6 0.857142857143 0.986666666667 0.266666666667 + 0.988095238095 1.0 1.0 0.0 0.5 1.0 1.0 0.333333333333 + 0.952380952381 1.0 1.0 0.0444444444444 0.511111111111 1.0 + 0.977777777778 0.333333333333 0.9 1.0 1.0 0.08 0.48 1.0 1.0 0.4 + 0.857142857143 1.0 1.0 0.177777777778 0.477777777778 1.0 1.0 + 0.466666666667 0.285714285714 0.622222222222 0.702380952381 + 0.177777777778 0.333333333333 0.654761904762 0.766666666667 + 0.722222222222 + + + 0.34894964425 0.245262810474 0.0436635246356 0.0289073580863 + 0.0753124671479 0.447590316561 0.121762486115 0.0635988147804 + 0.0283052630306 0.0367553393765 0.133933708046 0.233016676735 + 0.255224923508 0.0435213558993 + + + + + + + + + 34 6 7 1 23 2 138 31 5 3 137 41 136 41 137 40 137 39 138 39 143 34 + 144 33 144 33 138 1 5 34 137 1 5 34 138 2 5 32 137 5 1 34 137 40 137 + 40 137 40 137 40 138 39 138 39 138 39 138 39 138 39 138 39 138 39 138 + 39 138 39 138 39 138 39 137 41 18 4 115 40 18 4 80 2 33 40 18 4 80 3 + 32 39 19 8 76 1 35 38 18 10 111 38 18 11 110 38 17 14 108 38 16 15 + 108 38 16 1 2 11 73 2 34 38 17 13 73 2 34 38 15 20 68 3 32 40 15 18 + 69 12 8 3 11 41 14 23 65 75 14 24 64 75 13 27 62 40 3 1 8 3 1 6 2 11 + 13 28 61 40 30 5 13 29 61 38 32 4 13 29 61 38 33 3 13 31 59 38 33 3 + 13 32 58 38 33 2 14 32 58 39 32 2 14 34 56 38 32 3 14 35 55 39 31 3 + 13 37 54 39 32 3 12 6 4 12 1 7 61 39 32 1 14 30 8 1 52 39 47 32 6 2 + 51 39 47 35 2 4 50 39 48 35 1 5 49 39 48 34 2 5 49 39 47 16 1 15 6 5 + 48 39 49 3 1 10 2 15 5 5 48 39 54 9 1 16 7 2 14 2 34 4 1 31 60 20 24 + 4 33 1 7 24 64 4 1 15 24 4 32 2 1 1 4 24 66 21 22 5 32 3 4 32 58 22 + 21 4 41 31 58 22 21 4 1 3 36 32 58 23 19 5 1 4 28 39 58 22 20 5 1 5 + 27 39 58 22 19 5 2 5 27 39 56 20 2 2 4 3 12 6 1 7 26 38 53 11 1 11 7 + 3 12 15 26 38 53 11 2 10 3 2 3 2 12 15 26 38 51 12 6 12 3 1 13 15 26 + 38 51 13 2 20 12 14 27 39 50 35 12 16 2 1 22 39 51 33 12 15 3 3 21 39 + 52 32 12 15 4 4 19 39 54 30 12 15 5 3 19 39 55 29 11 16 28 38 56 28 + 11 15 29 38 57 3 2 22 11 15 29 38 59 1 6 18 11 16 28 38 67 12 3 1 11 + 19 31 11 2 20 70 4 2 2 16 20 45 18 70 3 3 7 11 24 5 2 45 7 63 1 13 6 + 11 20 1 3 5 3 47 4 64 17 1 1 11 19 1 13 48 2 65 18 10 35 46 3 65 18 + 10 36 45 4 66 16 9 39 44 2 68 17 7 42 41 3 68 16 6 6 2 35 41 3 68 16 + 6 6 4 34 115 11 8 5 4 27 1 6 116 7 13 3 4 34 119 4 14 2 3 8 1 25 119 + 4 15 2 2 9 1 14 4 6 121 3 14 3 2 8 2 17 2 5 121 3 14 3 3 7 1 18 4 3 + 122 2 13 4 2 3 1 3 2 16 6 3 135 6 3 2 1 2 3 16 5 4 135 5 4 6 3 12 8 4 + 135 3 7 5 5 10 9 3 147 1 8 9 3 2 1 5 157 8 4 8 158 7 4 8 159 7 2 8 + 150 4 5 18 151 3 4 19 158 14 1 4 158 8 3 1 4 3 160 4 11 1 162 3 11 1 + 163 2 1242 2 175 3 174 3 174 3 3 1 170 4 2 1 170 4 1 1 171 5 171 7 + 170 6 171 6 171 6 171 6 171 6 172 5 174 2 176 1 10 0 + + + + 24249.0 + + + 1.29197080292 + + + 6058.0 + + + 0.216738197425 + + + 1.48157560356 + + + 0.438912482367 0.420704027732 0.407688689457 0.131673154272 + 0.121222593499 0.0788999849347 0.0280403465632 0.0915223874456 + -0.0018046933459 + + + 177.0 + + + 0.983050847458 1.69343065693 + + + 0.949152542373 0.112994350282 1.67231638418 1.19774011299 + 0.43795620438 2.42335766423 3.2700729927 0.642335766423 + + + 137.0 + + + 20.0 83.0 0.252696456086 26.0 4.0 5.0 + + + 0.0 0.992700729927 + + + 0.249824735041 + + + 0.196524064171 0.709893048128 0.463235294118 0.0 0.658422459893 + 0.239973262032 0.0 0.0 0.0200534759358 0.594251336898 + 0.399064171123 0.0 0.0 0.0228758169935 0.552941176471 + 0.170158730159 + + + 0.0 0.0160427807487 0.572192513369 0.855614973262 0.839572192513 + 0.0 0.0 0.0 0.358288770053 0.411764705882 0.628342245989 + 0.783422459893 0.890374331551 0.122994652406 0.0 0.0 0.941176470588 + 1.0 0.617647058824 0.0 0.0 0.0 0.0 0.0 0.320855614973 + 0.371657754011 0.299465240642 0.0427807486631 0.0 0.0 0.0 0.0 0.0 + 0.0802139037433 0.858288770053 0.780748663102 0.521390374332 + 0.0320855614973 0.0 0.0 0.0 0.0 0.189839572193 0.548128342246 + 0.620320855615 0.422459893048 0.0 0.0 0.0 0.0 0.0 0.0935828877005 + 0.668449197861 0.751336898396 0.0828877005348 0.0 0.0 0.0 0.0 0.0 + 0.0383631713555 0.76726342711 0.42199488491 0.173913043478 + + + 0.520570286805 0.147927304819 0.145995187153 0.0963679930219 + 0.229851567494 0.312324534835 0.0647373730806 0.239072036547 + 0.170421338809 0.0800949344074 0.102520152798 0.303709261104 + 0.103189836538 0.0506654881791 + + + + + + + + + 1 2 1 7 1 3 1 3 1 3 1 3 1 0 + + + + 28.0 + + + 0.571428571429 + + + 21.0 + + + 1.19047619048 + + + 0.6 + + + 0.380952380952 0.507936507937 0.0375769355361 0.179030342296 + -0.0161969549725 0.000908862516601 0.00316418802076 + -0.00186485123777 0.00381946667471 + + + 4.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 7.0 + + + 2.0 2.0 0.0 0.0 3.0 1.0 + + + 0.0 0.857142857143 + + + 0.75 + + + 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 0.0 0.0 + + + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 + + + 0.105226388819 0.284627764247 0.0507978072804 0.0477489302188 + 0.242465568662 0.0710220231177 0.159186008697 0.0496103599618 + 0.0272166101392 0.0229858970721 0.218151407441 0.184968552169 + 0.202552978666 0.0533604991837 + + + + + + + + + 66 2 68 3 68 3 68 3 68 3 52 3 12 4 50 21 36 35 35 36 35 36 35 36 34 + 37 34 37 34 37 34 37 33 38 34 38 33 38 32 39 32 39 33 38 33 38 33 38 + 33 38 33 38 33 38 33 38 33 38 33 37 34 38 33 39 31 40 31 39 32 39 33 + 39 32 39 31 40 32 38 33 38 34 37 34 38 33 38 33 38 33 38 32 39 31 39 + 24 1 6 41 6 65 4 67 2 36 2 32 1 37 5 2 11 15 1 36 21 12 2 36 22 2 2 7 + 2 36 22 1 4 7 1 35 29 5 2 17 1 16 29 6 2 34 30 5 2 35 29 5 2 36 29 5 + 1 36 28 43 28 5 1 36 30 5 1 36 29 42 29 42 29 4 1 37 29 43 28 5 1 36 + 29 5 1 36 29 4 2 37 28 5 1 37 28 5 1 37 28 5 1 38 27 5 1 38 27 5 1 37 + 28 5 1 37 28 5 1 37 28 5 2 37 27 5 2 37 27 5 2 37 27 5 2 37 27 5 2 37 + 27 5 2 37 27 5 2 38 26 5 2 38 26 5 1 38 27 5 1 39 26 5 2 38 26 5 2 38 + 26 5 2 15 10 13 26 5 2 2 2 6 16 12 27 4 2 2 24 3 1 8 27 4 1 5 29 4 28 + 4 3 2 30 4 28 3 36 4 29 2 35 5 30 1 35 5 67 3 33 0 + + + + 6958.0 + + + 0.724489795918 + + + 3534.0 + + + 0.144312393888 + + + 0.753153153153 + + + 0.529517341741 0.510706013454 0.112357993282 0.169492179157 + -0.0695167876111 -0.00166204429569 0.00515098649766 + 0.00976116676753 -0.00362799581432 + + + 71.0 + + + 0.464788732394 0.612244897959 + + + 0.281690140845 0.338028169014 0.56338028169 0.338028169014 + 0.0408163265306 0.0408163265306 1.14285714286 1.22448979592 + + + 98.0 + + + 3.0 28.0 0.221238938053 2.0 1.0 3.0 + + + 0.0 0.989795918367 + + + 0.507904570279 + + + 0.0 0.0611764705882 0.955882352941 0.654117647059 0.152777777778 + 0.291111111111 0.997685185185 0.691111111111 0.729166666667 1.0 + 0.148148148148 0.231111111111 0.685185185185 0.915555555556 + 0.363425925926 0.228888888889 + + + 0.0 0.0 0.0 0.0769230769231 0.885416666667 0.927083333333 + 0.791666666667 0.432692307692 0.0 0.0 0.0 0.153846153846 1.0 1.0 + 1.0 0.418803418803 0.0 0.0 0.0 0.162393162393 0.990740740741 1.0 + 1.0 0.307692307692 0.138888888889 0.472222222222 0.472222222222 + 0.521367521368 1.0 1.0 1.0 0.504273504274 0.416666666667 1.0 1.0 + 1.0 0.231481481481 0.268518518519 0.435185185185 0.487179487179 0.5 + 1.0 1.0 1.0 0.0925925925926 0.0 0.0 0.0 0.5 1.0 1.0 1.0 + 0.203703703704 0.0 0.0 0.0 0.5 0.740740740741 0.805555555556 + 0.854700854701 0.712962962963 0.537037037037 0.555555555556 + 0.367521367521 + + + 0.398273994184 0.148436649721 0.0283430338544 0.04966883258 + 0.0193767728379 0.307404428381 0.0733455420009 0.0624399318653 + 0.0975760669615 0.0169083081367 0.130998201258 0.239883704621 + 0.117582758 0.036006669224 + + + + + + + + + 7 2 7 3 6 4 6 4 6 4 4 6 5 5 6 5 6 4 7 2 165 2 7 6 4 6 4 7 3 7 3 7 3 7 + 3 7 3 7 4 6 4 6 3 7 3 7 3 7 3 5 5 3 8 2 18 5 4 6 5 5 6 5 5 5 5 4 5 5 + 5 5 5 5 5 6 4 6 4 6 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 5 5 5 5 6 4 5 6 + 4 6 4 6 4 6 4 6 4 5 5 6 4 6 4 6 4 5 5 5 5 5 5 5 4 7 1 1 2 6 3 6 4 6 4 + 6 4 6 4 7 3 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 5 5 5 + 5 5 5 5 5 5 5 4 6 5 5 5 5 5 5 5 5 4 6 3 7 4 6 4 3 1 2 4 2 2 2 8 2 8 2 + 3 3 7 7 3 7 3 7 4 6 5 5 6 4 6 3 7 3 7 3 7 4 6 3 8 2 8 2 8 2 8 2 9 1 8 + 2 8 2 8 2 9 1 8 2 8 2 9 1 9 1 9 1 9 1 9 1 4 0 + + + + 1460.0 + + + 0.0684931506849 + + + 558.0 + + + 0.637992831541 + + + 0.995491941846 + + + 0.567303863003 0.503238165863 0.00605324202138 2.41699259413 + -0.0599562008099 -2.68542256235e-05 0.00245331187414 + -0.000502869991048 -0.243539711323 + + + 10.0 + + + 3.6 0.0205479452055 + + + 1.2 4.0 3.2 2.4 0.0 0.0 0.027397260274 0.0547945205479 + + + 146.0 + + + 3.0 11.0 0.159090909091 4.0 25.0 1.0 + + + 0.0 0.993150684932 + + + 0.382191780822 + + + 0.0 0.0 0.0138888888889 0.202702702703 0.194444444444 + 0.387387387387 0.685185185185 0.495495495495 0.458333333333 + 0.945945945946 0.986111111111 0.702702702703 0.435185185185 + 0.612612612613 0.0740740740741 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.277777777778 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0555555555556 0.555555555556 0.0 0.0 0.0 0.0 0.0 0.0 + 0.444444444444 0.722222222222 0.0 0.0833333333333 0.5 + 0.555555555556 0.605263157895 0.833333333333 1.0 0.75 + 0.394736842105 0.333333333333 0.555555555556 0.944444444444 1.0 + 0.944444444444 1.0 0.944444444444 1.0 0.444444444444 0.5 + 0.833333333333 1.0 1.0 1.0 0.833333333333 0.0526315789474 + 0.555555555556 0.5 0.833333333333 1.0 0.444444444444 0.0 0.0 0.0 + 0.333333333333 0.444444444444 0.583333333333 0.342105263158 0.0 0.0 + 0.0 0.0 + + + 0.480263136401 0.236439355689 0.0306236421829 0.0101279572683 + 0.407968824732 0.39063273406 0.196772707743 0.115737116714 + 0.0889155134782 0.029818801439 0.258967724632 0.504447466365 + 0.287406263754 0.180561496497 + + + + + + + + + 3 2 7 1 15 1 6 2 6 2 6 1 56 1 7 1 6 2 6 2 5 4 4 4 35 2 6 2 23 2 6 2 6 + 2 6 3 5 2 6 2 5 3 6 2 6 2 6 2 6 2 6 2 6 2 6 1 80 1 7 1 6 2 5 3 6 2 6 + 2 6 2 5 4 4 4 4 4 4 4 3 5 3 5 4 4 4 4 4 4 4 4 4 4 4 4 5 3 5 3 5 2 6 2 + 6 3 5 2 6 3 4 4 5 3 5 2 14 2 6 2 6 3 5 3 5 3 4 5 3 5 3 5 3 5 3 5 3 5 + 4 4 4 4 3 6 2 6 2 6 2 6 3 4 4 4 4 4 5 3 4 4 4 6 2 6 2 6 2 5 3 6 2 6 3 + 5 3 5 3 5 3 5 3 5 3 5 3 5 3 4 4 5 3 5 3 5 4 3 5 4 4 4 4 4 5 2 1 0 + + + + 992.0 + + + 0.0645161290323 + + + 346.0 + + + 0.838150289017 + + + 0.995218579235 + + + 0.499174236168 0.646200479346 0.00727127902124 2.81444749201 + 0.0650912602987 0.000259827198696 0.0269041274 0.00427855374701 + -3.41751697908 + + + 8.0 + + + 3.5 0.0 + + + 3.0 5.0 4.0 2.0 0.0 0.0 0.0 0.0 + + + 124.0 + + + 5.0 9.0 0.17 9.0 16.0 1.0 + + + 0.0 0.991935483871 + + + 0.348790322581 + + + 0.0322580645161 0.129032258065 0.241935483871 0.0645161290323 + 0.322580645161 0.661290322581 0.967741935484 0.645161290323 + 0.225806451613 0.0806451612903 0.516129032258 0.983870967742 0.0 + 0.0 0.0 0.709677419355 + + + 0.0 0.0 0.0 0.0625 0.0666666666667 0.0 0.0 0.0 0.0 0.125 + 0.0666666666667 0.375 0.533333333333 0.375 0.266666666667 0.0 0.0 + 0.5 0.666666666667 0.625 1.0 0.9375 0.933333333333 0.0 + 0.266666666667 0.5 0.6 0.75 1.0 0.9375 1.0 0.6875 0.466666666667 + 0.3125 0.0 0.3125 0.8 0.75 1.0 0.9375 0.0 0.125 0.0 0.0 0.0 0.5 1.0 + 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.666666666667 1.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.333333333333 0.8125 + + + 0.665604569066 0.144071656831 0.162187821026 0.054346900709 + 0.718026578131 0.339062081888 0.0949552766193 0.281897108416 + 0.0209766356391 0.069225768205 0.584739926732 0.54920583537 + 0.185317738788 0.0797335052471 + + + + + + + + + 8 2 62 7 58 10 53 2 1 2 1 8 50 16 51 19 48 19 49 18 49 19 50 17 50 17 + 49 15 2 2 46 16 50 11 2 1 54 2 2 4 3 2 58 5 1 3 57 10 56 8 58 8 58 9 + 58 9 56 12 55 1 2 9 53 3 2 9 53 3 3 7 60 7 61 6 61 6 9 2 49 8 6 4 49 + 7 6 4 50 7 6 2 52 7 5 3 52 6 5 3 7 1 45 14 5 3 44 24 43 21 45 22 45 + 23 43 20 47 17 53 13 53 12 54 12 55 6 1 6 53 6 1 6 53 6 1 6 53 6 1 5 + 62 4 62 5 61 6 60 6 60 6 60 9 58 9 57 8 59 6 60 7 58 9 57 11 56 9 57 + 8 58 7 60 5 61 4 62 3 62 5 61 5 61 4 62 4 62 9 1 1 55 11 55 12 54 12 + 54 12 55 11 55 9 1 1 55 8 58 5 1 2 58 4 1 3 58 4 62 4 62 4 62 4 62 5 + 61 5 61 4 62 4 61 6 60 6 61 5 61 5 62 5 61 4 62 3 63 2 64 3 63 3 62 4 + 62 4 62 4 63 3 63 3 63 3 64 2 64 2 64 2 64 2 64 2 64 2 64 2 64 2 64 3 + 63 4 2 2 57 12 54 12 52 15 53 13 51 1 1 13 34 1 16 15 34 1 2 1 1 6 2 + 18 35 31 35 16 1 14 35 2 1 13 3 12 44 7 3 11 50 2 4 10 47 2 1 2 4 8 + 47 7 2 13 43 19 47 3 1 2 2 11 47 3 6 13 44 1 7 16 42 2 4 19 40 4 2 20 + 39 6 1 20 40 26 48 2 4 12 54 11 55 10 56 10 56 10 57 5 61 5 60 12 54 + 13 54 12 54 12 52 13 53 12 55 11 56 10 56 9 57 9 57 9 57 9 57 11 55 8 + 2 1 55 8 58 9 56 11 55 11 56 10 56 10 58 7 60 1 2 2 4 0 + + + + 10824.0 + + + 0.40243902439 + + + 1676.0 + + + 0.442124105012 + + + 1.91650528494 + + + 0.680842665688 0.497302224109 0.149690923601 1.54608544661 + 0.377641271374 -0.0607913796592 -0.195956376572 -0.125819866965 + -0.0811502434192 + + + 66.0 + + + 1.77272727273 0.30487804878 + + + 0.242424242424 0.787878787879 2.18181818182 3.81818181818 + 0.439024390244 0.19512195122 0.219512195122 0.365853658537 + + + 164.0 + + + 12.0 54.0 0.266272189349 11.0 4.0 1.0 + + + 0.0 0.993902439024 + + + 0.154841093865 + + + 0.225609756098 0.0 0.0 0.0 0.296987087518 0.0 0.00717360114778 0.0 + 0.22256097561 0.112804878049 0.0853658536585 0.114329268293 + 0.0487804878049 0.357245337159 0.351506456241 0.626972740316 + + + 0.23125 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.68125 0.0119047619048 0.0 0.0 + 0.0 0.0 0.0 0.0 0.625 0.202380952381 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0333333333333 0.354497354497 0.0 0.0 0.0 0.026455026455 0.0 0.0 + 0.0 0.416666666667 0.0875 0.0 0.0 0.166666666667 0.075 0.0 0.0 + 0.452380952381 0.375 0.0 0.0 0.166666666667 0.39375 0.0 0.0 + 0.202380952381 0.60625 0.72619047619 0.5125 0.577380952381 0.73125 + 0.392857142857 0.0 0.0 0.0166666666667 0.142857142857 0.0 + 0.349206349206 0.622222222222 0.751322751323 + + + 0.281097414806 0.315417155879 0.119544832449 0.0730620766312 + 0.0539697133804 0.424383203517 0.260432203505 0.130543722307 + 0.120857661376 0.135786094275 0.0063644426489 0.319927206159 + 0.383835832329 0.208820099557 + + + + + + + + + 5 1 31 2 29 5 28 6 27 6 28 6 28 6 27 7 23 14 19 13 20 12 21 11 21 12 + 22 10 23 10 24 9 24 15 18 19 14 19 14 17 1 1 13 22 11 23 10 24 9 24 9 + 25 8 27 6 27 6 28 5 29 4 29 5 29 4 29 4 29 4 29 4 4 2 23 3 28 5 28 5 + 28 5 28 5 28 6 8 1 19 5 8 1 18 6 28 5 8 1 7 2 9 6 7 3 3 1 3 2 8 6 4 1 + 1 6 1 2 1 5 6 6 7 8 1 5 6 6 8 7 1 5 5 7 8 7 1 5 6 6 3 2 3 7 1 5 8 4 4 + 1 11 4 9 4 17 3 10 3 8 1 20 4 8 2 19 4 8 3 19 3 7 5 6 2 10 3 6 7 17 3 + 6 8 16 3 6 9 15 3 6 10 13 5 5 11 12 4 6 11 12 4 6 13 10 4 5 15 9 4 5 + 16 8 4 5 16 8 4 4 18 1 1 2 2 2 3 5 17 8 4 4 19 6 3 5 19 6 3 6 19 4 4 + 6 20 3 4 6 27 6 27 6 26 7 26 5 28 7 26 9 2 1 22 13 20 14 19 15 18 18 + 15 18 15 18 15 19 1 1 12 21 12 23 11 23 10 22 1 1 9 23 1 3 5 28 5 28 + 5 28 6 27 6 27 6 4 1 14 1 7 5 5 1 12 7 4 4 5 1 12 9 1 5 19 3 4 7 20 1 + 6 6 20 1 6 6 19 2 7 5 19 2 7 5 19 2 7 5 19 2 6 7 18 1 9 5 28 5 28 5 + 28 6 27 5 7 1 20 4 7 2 4 1 5 2 9 3 8 1 10 2 9 3 19 2 9 3 19 2 9 3 30 + 4 29 4 29 3 30 3 30 3 10 3 18 3 8 4 5 2 11 3 7 7 3 3 10 2 8 7 16 2 7 + 8 3 1 12 3 6 8 16 2 8 7 2 5 9 2 8 7 2 5 8 3 8 8 4 1 10 3 7 11 11 4 9 + 10 10 4 9 12 8 4 9 12 8 4 7 16 6 4 6 17 6 5 5 17 3 8 6 27 7 25 8 26 6 + 27 5 27 6 27 6 27 6 27 6 27 6 27 6 27 6 27 7 26 7 27 6 28 5 28 5 29 4 + 29 4 30 3 29 4 29 4 28 5 28 5 28 5 28 5 28 5 29 4 29 4 29 4 30 3 31 1 + 24 0 + + + + 5577.0 + + + 0.195266272189 + + + 2880.0 + + + 0.255902777778 + + + 1.02921176797 + + + 0.446788194444 0.458021246693 0.0269545208548 0.587134582729 + 0.00663735539105 0.00129392434509 -0.0189673002128 0.00124076252354 + 0.0174519391219 + + + 33.0 + + + 3.66666666667 0.568047337278 + + + 3.39393939394 3.63636363636 4.12121212121 3.39393939394 + 0.094674556213 1.0650887574 0.781065088757 0.331360946746 + + + 169.0 + + + 19.0 97.0 0.217299578059 4.0 9.0 1.0 + + + 0.0 0.994082840237 + + + 0.516406670253 + + + 0.767857142857 0.714285714286 0.690476190476 0.476744186047 + 0.735119047619 0.318452380952 0.907738095238 0.238372093023 + 0.565476190476 0.369047619048 0.860119047619 0.0610465116279 + 0.26455026455 0.507936507937 0.653439153439 0.21188630491 + + + 0.5 0.666666666667 0.488095238095 0.535714285714 0.428571428571 + 0.369047619048 0.22619047619 0.0454545454545 0.928571428571 + 0.97619047619 0.952380952381 0.880952380952 0.964285714286 1.0 1.0 + 0.647727272727 0.654761904762 0.97619047619 0.369047619048 + 0.261904761905 1.0 0.857142857143 0.488095238095 0.465909090909 + 0.309523809524 1.0 0.404761904762 0.238095238095 1.0 0.77380952381 + 0.0 0.0 0.190476190476 1.0 0.595238095238 0.107142857143 1.0 + 0.964285714286 0.107142857143 0.0 0.0714285714286 1.0 0.72619047619 + 0.047619047619 0.678571428571 0.797619047619 0.142857142857 0.0 0.0 + 0.857142857143 1.0 0.285714285714 0.678571428571 1.0 0.452380952381 + 0.0 0.0 0.266666666667 0.52380952381 0.27619047619 0.247619047619 + 0.761904761905 0.419047619048 0.0 + + + 0.557438864723 0.181349031837 0.0193876347901 0.0150212208937 + 0.332530562911 0.44552053976 0.0989588143356 0.0721292532497 + 0.0511171327524 0.0319016542827 0.0881117159741 0.520079135378 + 0.260541211791 0.0602845682498 + + + + + + + + + 0 3 + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.33333333333 + + + 2.0 + + + 0.5 0.5 0.222222222222 0.0 0.0 0.0 0.0 0.0 0.0 + + + 3.0 + + + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 1.0 + + + 0.0 0.0 0.0 3.0 3.0 3.0 + + + 0.0 -1.0 + + + 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.611531923285 0.624075847826 4.84190584415e-17 1.51341087023e-16 + 0.938065357227 0.958148015231 1.01963181359 6.53233907782e-17 + 2.04646500774e-16 3.70897674304e-16 1.15129051676 1.17773290199 + 1.25872203005 1.3993574542 + + + + + + + + + 3 1 31 2 29 5 27 5 27 4 28 5 28 4 26 7 26 7 25 9 23 10 22 10 22 10 22 + 11 21 4 3 5 19 13 19 14 18 15 17 15 17 16 16 17 15 18 14 18 14 19 13 + 19 13 20 12 10 1 10 11 17 1 1 13 16 16 2 2 10 19 1 3 2 1 6 19 1 3 1 3 + 6 17 3 2 3 1 6 17 9 1 9 1 1 11 8 2 12 10 8 2 12 10 8 2 13 9 8 2 12 9 + 7 4 12 9 7 5 11 9 7 5 5 3 4 8 7 7 4 2 4 8 10 2 6 1 5 8 25 7 25 7 6 1 + 17 8 5 6 7 2 4 8 6 5 8 1 4 8 6 5 8 1 6 6 6 1 1 3 7 2 7 5 9 2 16 5 9 3 + 6 1 8 5 9 3 6 2 6 6 4 3 11 1 7 6 3 5 18 6 3 6 17 6 3 7 16 7 2 7 17 6 + 2 10 13 7 2 11 12 7 2 9 14 7 2 10 13 7 2 11 12 7 2 12 2 3 7 6 2 17 7 + 6 2 13 1 4 5 7 3 12 2 2 7 5 4 13 10 5 6 11 10 5 5 13 9 6 5 12 10 5 6 + 12 8 6 8 10 8 6 7 13 6 6 9 12 1 10 10 11 1 10 11 10 1 10 12 9 2 9 13 + 10 1 8 13 10 1 8 15 17 16 16 16 16 18 14 19 13 20 12 20 12 21 11 22 + 10 23 9 17 1 6 8 17 1 7 7 17 4 5 6 4 1 12 15 4 1 12 15 4 1 1 1 10 15 + 18 14 18 14 18 14 18 3 4 7 19 1 6 6 19 1 7 5 28 4 28 4 9 1 8 2 9 3 9 + 2 1 1 5 3 8 4 8 1 8 3 8 4 18 2 8 4 18 1 9 3 29 3 19 1 9 4 18 2 8 4 7 + 1 20 4 4 1 2 2 8 2 9 4 7 2 8 3 8 4 28 5 27 5 27 5 27 5 3 3 21 5 3 7 + 17 5 3 7 17 5 3 7 5 3 9 5 3 8 6 1 9 5 3 8 16 5 3 10 4 1 9 5 3 11 13 5 + 3 11 13 5 4 11 13 4 5 10 14 2 6 11 13 3 5 13 10 3 6 12 11 4 5 13 11 3 + 5 13 11 2 6 16 8 3 4 19 5 4 4 20 2 7 3 29 3 29 3 29 3 29 3 29 3 30 2 + 30 1 31 1 31 1 31 1 31 1 31 1 26 0 + + + + 4832.0 + + + 0.211920529801 + + + 2396.0 + + + 0.30550918197 + + + 1.16068039476 + + + 0.416756421994 0.507156371731 0.0276095686872 0.583745075924 + 0.0363560122745 0.00110388225056 -0.00662755983802 0.00476980790883 + -0.0684821248492 + + + 32.0 + + + 3.8125 0.788079470199 + + + 3.75 3.875 6.0 1.625 0.397350993377 1.29801324503 0.688741721854 + 0.715231788079 + + + 151.0 + + + 34.0 99.0 0.208588957055 4.0 11.0 2.0 + + + 0.0 0.993377483444 + + + 0.495860927152 + + + 0.722972972973 0.644736842105 0.845394736842 0.444078947368 0.625 + 0.460526315789 0.927631578947 0.210526315789 0.199324324324 + 0.815789473684 0.559210526316 0.453947368421 0.0 0.226973684211 + 0.266447368421 0.519736842105 + + + 0.513888888889 0.684210526316 0.960526315789 0.671052631579 0.75 + 0.684210526316 0.302631578947 0.105263157895 0.791666666667 + 0.894736842105 0.684210526316 0.263157894737 0.986842105263 + 0.960526315789 0.736842105263 0.631578947368 0.486111111111 + 0.842105263158 0.473684210526 0.0921052631579 0.986842105263 + 0.934210526316 0.302631578947 0.0 0.166666666667 0.973684210526 + 0.973684210526 0.302631578947 0.802631578947 0.986842105263 + 0.539473684211 0.0 0.0 0.592105263158 0.789473684211 0.578947368421 + 0.513157894737 0.855263157895 0.776315789474 0.0 0.0 0.184210526316 + 0.960526315789 0.934210526316 0.328947368421 0.539473684211 + 0.907894736842 0.131578947368 0.0 0.0 0.276315789474 0.631578947368 + 0.105263157895 0.697368421053 1.0 0.25 0.0 0.0 0.0 0.0 0.0 + 0.263157894737 0.578947368421 0.25 + + + 0.488967750235 0.213741295364 0.061583528171 0.0274159195239 + 0.250814688709 0.440275067721 0.136904921656 0.0733253775048 + 0.0239537361333 0.044483857894 0.146540236327 0.391155394901 + 0.312733585901 0.0899701011658 + + + + + + + + + 4 1 36 3 35 5 33 11 29 15 30 10 31 11 30 1 2 8 31 7 29 1 3 5 29 1 5 3 + 26 6 3 4 29 3 1 9 27 2 1 11 24 17 23 18 12 3 9 16 4 1 7 4 1 23 2 3 5 + 5 2 22 1 4 5 34 6 32 6 34 5 33 7 29 11 28 1 2 8 2 1 3 1 25 8 5 5 6 3 + 7 2 3 8 6 4 5 4 1 1 2 15 1 2 6 2 6 4 3 14 18 4 3 14 18 4 4 15 15 5 6 + 16 13 4 4 19 12 4 4 20 7 8 6 22 3 8 6 24 5 4 6 24 5 4 6 24 4 6 5 25 3 + 6 4 26 3 6 5 25 1 8 4 35 4 35 3 36 3 36 3 36 5 34 6 33 4 35 4 35 4 36 + 3 36 3 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 35 4 36 3 36 3 35 4 36 + 3 36 3 36 3 36 4 34 5 35 4 35 4 35 4 35 5 34 5 34 4 35 5 34 4 36 3 36 + 3 35 8 32 7 1 1 30 9 29 6 33 6 33 5 34 4 35 4 36 3 35 5 34 5 34 7 32 + 10 23 1 3 1 1 5 1 4 19 2 2 5 1 4 2 1 1 2 19 3 2 9 1 6 18 1 4 1 9 5 19 + 1 3 3 7 6 15 2 1 8 7 6 15 10 3 2 1 8 15 10 4 1 1 9 14 10 5 10 14 1 3 + 2 2 2 5 2 1 7 22 2 6 1 2 6 30 2 1 6 29 10 29 10 29 10 30 2 2 3 32 2 + 37 2 36 7 1 1 30 7 1 2 29 7 2 1 30 5 3 1 29 7 1 2 29 10 28 11 29 11 + 28 11 28 12 28 6 2 2 29 11 28 11 28 11 27 11 18 15 1 5 18 1 10 10 29 + 6 2 1 30 3 36 3 38 1 8 0 + + + + 5148.0 + + + 0.295454545455 + + + 1301.0 + + + 0.530361260569 + + + 1.41885008948 + + + 0.587240584166 0.435337467949 0.0648001458694 1.27066029743 + 0.187829869294 -0.0086921310877 0.0514151537925 -0.011219378882 + 0.544830290554 + + + 39.0 + + + 3.53846153846 0.568181818182 + + + 1.94871794872 2.87179487179 4.0 4.41025641026 0.848484848485 + 0.272727272727 0.484848484848 0.666666666667 + + + 132.0 + + + 21.0 69.0 0.255255255255 14.0 3.0 1.0 + + + 0.0 0.992424242424 + + + 0.25271950272 + + + 0.43771043771 0.003367003367 0.0 0.0 0.739393939394 0.118181818182 + 0.0393939393939 0.0818181818182 0.49696969697 0.39696969697 + 0.321212121212 0.221212121212 0.148484848485 0.0272727272727 + 0.281818181818 0.672727272727 + + + 0.1875 0.411764705882 0.0 0.0 0.0 0.0 0.0 0.0 0.2375 0.835294117647 + 0.0125 0.0 0.0 0.0 0.0 0.0 0.4875 0.811764705882 0.1375 0.0 0.0 + 0.0235294117647 0.0875 0.0 0.6375 1.0 0.35 0.0 0.0 0.129411764706 + 0.2125 0.0352941176471 0.3125 0.670588235294 0.0375 0.0 0.0 + 0.188235294118 0.1625 0.0588235294118 0.075 0.894117647059 0.8125 + 0.741176470588 0.575 0.517647058824 0.3375 0.329411764706 0.0 + 0.505882352941 0.1125 0.0 0.3125 0.588235294118 0.8125 + 0.870588235294 0.0 0.0705882352941 0.0 0.0 0.0125 0.2 0.4 0.6 + + + 0.36678507724 0.278120643215 0.226423312735 0.0847344546939 + 0.0342949491608 0.498973108375 0.202351191118 0.224682739129 + 0.0778353463986 0.11909627032 0.168393955022 0.475061412768 + 0.356699963555 0.160574684437 + + + + + + + + + 2 1 4 4 1 5 1 11 1 5 1 1 1 3 4 1 5 1 5 1 5 1 2 0 + + + + 66.0 + + + 0.545454545455 + + + 34.0 + + + 1.14705882353 + + + 0.875 + + + 0.458823529412 0.397058823529 0.0562792591085 0.160009159373 + 0.00976999796458 -0.00271043369198 0.00849371891431 + -0.00232080884876 0.039658572975 + + + 6.0 + + + 0.0 0.0909090909091 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.363636363636 0.0 + + + 11.0 + + + 0.0 2.0 0.133333333333 0.0 3.0 2.0 + + + 0.0 0.909090909091 + + + 0.515151515152 + + + 0.0 1.0 0.666666666667 0.0 0.75 1.0 0.5 0.0 0.5 1.0 1.0 1.0 0.25 + 0.666666666667 0.333333333333 0.0 + + + 0.0 0.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 0.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 + 1.0 1.0 0.5 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 + + + 0.581327950913 0.0911635845499 0.124133532852 0.0596656138019 + 0.453395330466 0.081958296319 0.0827894080848 0.049978316551 + 0.0485161629421 0.0801968252445 0.00437312896963 0.109578537565 + 0.0390186593407 0.0928182071587 + + + + + + + + + 42 1 42 3 40 4 39 5 39 4 39 5 39 5 38 6 38 1 1 4 37 7 37 7 36 7 37 2 + 1 4 36 1 43 1 42 6 1 1 36 7 37 8 32 12 33 10 34 9 18 1 16 9 17 2 15 9 + 16 4 14 9 17 3 16 7 18 7 14 4 18 8 14 3 19 9 11 5 18 10 10 5 19 9 11 + 4 19 13 8 1 3 1 18 13 7 3 1 1 19 14 6 5 18 16 4 6 18 16 4 5 18 26 18 + 25 19 25 18 25 19 4 2 19 18 25 19 4 2 19 19 1 1 1 4 17 29 3 7 1 33 2 + 41 3 41 3 36 2 2 3 36 2 3 4 35 1 4 3 36 2 1 4 37 1 1 5 37 1 1 5 39 4 + 40 5 39 5 39 4 40 4 40 3 40 3 41 4 38 6 35 9 2 2 30 9 4 2 29 18 27 11 + 2 4 27 11 2 3 29 15 30 14 30 13 32 12 32 12 33 10 35 9 35 9 36 7 38 1 + 3 2 83 4 40 4 41 4 41 2 31 0 + + + + 3608.0 + + + 0.536585365854 + + + 783.0 + + + 0.504469987229 + + + 0.632390745501 + + + 0.418188838397 0.500070952178 0.166295186638 0.497747837815 + -0.216382808271 0.0458283892889 0.0452251365916 -0.0649303891033 + 0.0693506381863 + + + 44.0 + + + 1.20454545455 0.426829268293 + + + 1.72727272727 1.63636363636 0.727272727273 0.727272727273 + 0.146341463415 0.829268292683 0.487804878049 0.243902439024 + + + 82.0 + + + 7.0 38.0 0.320987654321 7.0 1.0 2.0 + + + 0.0 0.987804878049 + + + 0.217017738359 + + + 0.0 0.316017316017 0.281818181818 0.519480519481 0.0 0.675324675325 + 0.204545454545 0.316017316017 0.0318181818182 0.445887445887 + 0.0545454545455 0.0 0.472727272727 0.121212121212 0.0 0.0 + + + 0.0 0.0 0.0 0.0727272727273 0.06 0.0 0.62 0.0181818181818 0.0 0.0 + 0.216666666667 0.848484848485 0.316666666667 0.666666666667 + 0.933333333333 0.484848484848 0.0 0.0 0.66 1.0 0.58 0.08 0.7 + 0.563636363636 0.0 0.0 0.116666666667 0.924242424242 0.2 0.0 + 0.116666666667 0.0 0.0 0.0 0.0 0.581818181818 0.22 0.0 0.0 0.0 0.0 + 0.116666666667 0.6 0.530303030303 0.0166666666667 0.0 0.0 0.0 0.08 + 0.68 0.52 0.0 0.0 0.0 0.0 0.0 0.683333333333 0.416666666667 + 0.0333333333333 0.0 0.0 0.0 0.0 0.0 + + + 0.515955991262 0.180176391454 0.0709088747021 0.072340627409 + 0.37890528794 0.3014873331 0.120109207341 0.220907533773 + 0.172241056504 0.0930342632697 0.360308932532 0.154324805562 + 0.237045240642 0.0736414929719 + + + + + + + + + 7 1 36 2 33 4 32 6 31 6 32 6 32 5 34 4 32 6 29 9 25 18 17 17 20 16 21 + 14 1 1 22 16 23 16 21 16 2 2 17 16 2 1 18 16 2 2 17 17 1 3 16 22 15 + 17 1 5 14 24 13 24 13 25 12 27 10 29 8 30 7 30 7 30 6 31 6 30 7 31 7 + 30 7 30 7 30 7 28 8 30 8 29 8 26 1 3 7 26 2 2 8 25 12 25 12 29 8 25 2 + 2 8 9 3 7 1 4 13 8 5 4 3 4 12 9 5 4 1 8 10 10 2 17 9 10 1 20 6 31 6 + 31 6 31 6 19 1 10 7 30 7 7 2 21 7 5 4 20 8 5 5 19 9 4 6 18 9 4 7 17 9 + 4 9 16 8 4 9 15 9 4 8 16 9 4 11 12 10 4 13 1 2 4 1 1 11 4 17 3 13 5 + 16 3 13 5 13 1 2 4 11 8 2 1 8 6 12 10 10 3 14 10 12 1 14 10 12 3 12 + 11 12 1 14 9 29 8 6 1 23 15 22 16 21 17 20 19 16 21 17 22 15 24 12 27 + 10 27 10 28 9 31 6 31 5 32 5 32 6 31 6 31 6 30 7 30 7 31 5 27 10 28 9 + 30 8 30 8 29 9 29 10 27 10 27 12 25 13 3 1 15 2 3 14 2 2 15 1 3 13 3 + 1 8 2 4 19 11 3 8 14 25 7 30 7 30 7 4 1 25 8 29 8 29 7 18 1 11 7 30 8 + 3 1 1 1 23 8 8 1 20 7 8 4 18 7 5 10 15 8 4 9 17 6 5 9 17 6 5 9 16 7 6 + 8 16 7 5 10 1 3 11 7 5 10 2 2 11 8 5 9 1 5 9 8 6 17 5 9 5 19 4 9 4 21 + 3 10 3 21 2 11 3 21 2 11 2 112 2 31 5 33 3 35 2 34 2 35 3 26 0 + + + + 5180.0 + + + 0.264285714286 + + + 2839.0 + + + 0.238112011272 + + + 1.16320215364 + + + 0.496790732261 0.491083850074 0.0277839081756 0.429700627982 + 0.0312576878722 0.000545889778327 -0.00598975387675 + 0.00102408185726 -0.000187725458239 + + + 37.0 + + + 3.2972972973 0.5 + + + 2.37837837838 4.0 2.81081081081 4.0 0.171428571429 0.885714285714 + 0.228571428571 0.714285714286 + + + 140.0 + + + 20.0 72.0 0.188775510204 13.0 7.0 3.0 + + + 0.0 0.992857142857 + + + 0.548069498069 + + + 0.622222222222 0.552380952381 0.361904761905 0.196825396825 + 0.749206349206 0.625396825397 0.901587301587 0.457142857143 + 0.466666666667 0.847619047619 0.822222222222 0.485714285714 0.16 + 0.474285714286 0.528571428571 0.568571428571 + + + 0.279411764706 0.291666666667 0.132352941176 0.0 0.0 0.0 0.0 0.0 + 0.776470588235 1.0 1.0 0.888888888889 0.705882352941 0.6 + 0.435294117647 0.277777777778 0.661764705882 1.0 0.970588235294 + 0.319444444444 1.0 0.875 0.720588235294 0.5 0.341176470588 1.0 + 0.835294117647 0.411111111111 0.776470588235 0.966666666667 + 0.694117647059 0.0 0.0705882352941 0.922222222222 0.964705882353 + 0.655555555556 0.705882352941 1.0 0.894117647059 0.0777777777778 + 0.0 0.805555555556 0.970588235294 0.833333333333 0.544117647059 1.0 + 0.911764705882 0.111111111111 0.0 0.544444444444 0.741176470588 0.8 + 0.376470588235 0.977777777778 0.976470588235 0.255555555556 0.0 + 0.0777777777778 0.164705882353 0.188888888889 0.105882352941 + 0.622222222222 0.752941176471 0.322222222222 + + + 0.478300483401 0.211885541577 0.00847634596493 0.00964430924664 + 0.200159750244 0.444405990411 0.124258847254 0.00430979180248 + 0.0145335000416 0.0242289789986 0.0769633911199 0.374056886705 + 0.2989781701 0.0690757842449 + + + + + + + + + 7 20 2 10 + + + + 39.0 + + + 4.33333333333 + + + 30.0 + + + 1.2 + + + 1.01111111111 + + + 0.583333333333 0.583333333333 0.426666666667 0.017962962963 + -0.0188888888889 -0.111978833979 0.00378672385436 0.00304290309725 + -0.000653660665335 + + + 13.0 + + + 0.0 0.333333333333 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 3.0 + + + 1.0 2.0 0.0416666666667 0.0 1.0 7.0 + + + 0.0 0.666666666667 + + + 0.769230769231 + + + 0.0 0.0 1.0 0.333333333333 0.0 0.0 1.0 1.0 0.666666666667 + 0.666666666667 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 + 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.5 + 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + + + 0.452389878575 0.231951947966 0.188186661026 0.0717180140717 + 0.408058946175 0.303343804795 0.194778351982 0.0391889997369 + 0.167124470808 0.123474211448 0.145018975452 0.448224153686 + 0.162072607628 0.180710256399 + + + + + + + + + 60 4 67 2 67 2 32 1 35 1 32 2 34 1 32 6 1 3 60 18 51 30 39 31 4 1 33 + 33 1 2 33 36 33 36 33 36 33 36 33 36 33 37 32 37 32 37 32 37 33 36 33 + 36 33 36 33 35 34 36 33 36 33 36 33 36 33 36 8 1 25 5 6 24 7 2 25 3 8 + 24 7 2 25 35 7 2 25 35 7 1 26 35 7 1 26 35 7 2 25 35 7 2 25 35 7 2 25 + 36 6 2 25 24 1 11 6 2 25 36 6 2 25 36 6 3 25 35 6 3 25 23 1 11 6 4 24 + 35 6 4 23 36 6 5 22 36 6 9 18 36 6 18 8 37 6 32 1 30 6 30 11 6 1 15 6 + 17 2 11 25 8 6 16 1 13 28 6 5 30 30 4 4 32 23 2 5 3 4 32 23 2 5 3 4 + 32 23 4 3 3 4 34 28 3 3 34 28 5 1 35 29 3 2 36 28 2 3 35 30 1 3 35 30 + 1 3 36 29 1 3 36 29 2 2 36 30 2 2 35 28 4 3 33 29 4 3 33 30 3 3 33 29 + 4 4 32 30 3 4 3 1 3 1 25 29 3 4 3 1 8 2 19 30 2 4 3 2 5 1 2 1 9 3 7 + 30 2 4 10 1 22 30 2 4 33 30 2 4 34 29 2 4 33 30 2 4 33 30 2 4 34 29 2 + 4 34 29 2 4 34 29 2 4 34 29 3 3 34 29 3 3 34 29 3 4 33 29 3 3 34 29 3 + 3 34 29 3 3 35 28 2 5 16 1 17 29 2 4 3 3 4 1 23 30 1 4 3 12 19 35 3 + 20 10 36 3 22 8 36 3 24 6 36 3 24 7 35 3 24 7 35 3 25 6 36 2 25 6 36 + 2 25 6 36 2 26 5 36 2 27 4 36 2 27 3 37 1 29 4 35 1 29 4 35 1 30 3 35 + 1 30 2 31 0 + + + + 7245.0 + + + 0.657142857143 + + + 3201.0 + + + 0.195563886286 + + + 0.795513654096 + + + 0.492460995645 0.470817412828 0.103530570156 0.194618196304 + -0.0732950444802 0.00161853308531 0.00255195802149 0.00327444433506 + 0.0045517179214 + + + 69.0 + + + 0.826086956522 0.990476190476 + + + 0.463768115942 0.753623188406 1.04347826087 0.985507246377 + 0.190476190476 1.18095238095 1.44761904762 1.10476190476 + + + 105.0 + + + 20.0 50.0 0.233890214797 7.0 5.0 4.0 + + + 0.0 0.990476190476 + + + 0.44182194617 + + + 0.0 0.300904977376 0.873303167421 0.39651416122 0.276018099548 + 0.373303167421 0.993212669683 0.498910675381 0.764705882353 + 0.828054298643 0.0904977375566 0.202614379085 0.547008547009 0.75 + 0.15811965812 0.0555555555556 + + + 0.0 0.0 0.182692307692 0.538461538462 0.903846153846 0.615384615385 + 0.548076923077 0.258928571429 0.0 0.0 0.0 0.495726495726 1.0 + 0.948717948718 0.820512820513 0.0 0.0 0.0 0.0 0.394230769231 1.0 + 1.0 0.894230769231 0.0 0.435897435897 0.606837606838 0.452991452991 + 0.606837606838 1.0 0.974358974359 0.982905982906 0.166666666667 + 0.564102564103 1.0 0.888888888889 0.683760683761 0.136752136752 + 0.205128205128 0.367521367521 0.396825396825 0.490384615385 1.0 1.0 + 0.75 0.0 0.0 0.0 0.0 0.435897435897 1.0 0.991452991453 + 0.777777777778 0.0598290598291 0.0 0.0 0.0 0.222222222222 + 0.529914529915 0.581196581197 0.649572649573 0.290598290598 + 0.282051282051 0.230769230769 0.0 + + + 0.489661603914 0.134661507001 0.0250185069773 0.00753727145292 + 0.093139534912 0.33034096395 0.0472012847811 0.0497664490532 + 0.0326594609024 0.00196463412267 0.177118259289 0.337377339246 + 0.125034140913 0.0126328705518 + + + + + + + + + 1 2 5 3 4 3 3 5 2 4 3 3 5 2 4 3 4 3 5 2 5 3 4 3 4 3 4 3 4 4 3 4 3 4 3 + 5 2 5 2 6 1 6 1 6 1 4 2 0 + + + + 161.0 + + + 0.304347826087 + + + 86.0 + + + 0.802325581395 + + + 1.05191256831 + + + 0.393410852713 0.566067653277 0.0245843133309 0.535061378243 + 0.0513712629077 0.00233783484562 -0.000808414380829 0.0054902740146 + -0.117146515585 + + + 7.0 + + + 0.428571428571 0.0 + + + 0.571428571429 0.0 0.571428571429 0.0 0.0 0.0 0.0 0.0 + + + 23.0 + + + 1.0 8.0 0.178571428571 0.0 6.0 1.0 + + + 0.0 0.95652173913 + + + 0.534161490683 + + + 0.4 0.5 0.0 0.0 1.0 1.0 1.0 1.0 0.5 0.0833333333333 0.75 1.0 0.0 + 0.0 0.0 0.666666666667 + + + 0.0 0.666666666667 0.666666666667 0.333333333333 0.0 0.0 0.0 0.0 + 0.0 0.666666666667 0.666666666667 0.333333333333 0.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 + 1.0 0.0 0.333333333333 1.0 1.0 1.0 1.0 0.0 0.333333333333 0.0 0.0 + 0.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.666666666667 0.0 0.0 + 0.0 0.0 0.0 0.0 0.333333333333 0.666666666667 + + + 0.380765684378 0.267111056791 0.167933450689 0.0670240683817 + 0.172666252756 0.414741886741 0.200180461706 0.0888669381127 + 0.0877669001524 0.103293740128 0.17662285177 0.308149960391 + 0.314141584729 0.154857963001 + + + + + + + + + 75 2 112 1 520 6 6 3 2 17 77 39 73 40 73 39 72 40 72 40 72 40 72 40 + 72 40 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 + 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 73 39 + 73 39 73 39 73 39 73 39 31 1 7 2 32 39 11 21 7 2 32 71 7 3 31 71 7 3 + 30 73 6 19 11 1 1 74 6 106 6 105 6 43 20 1 2 40 7 39 29 38 6 37 32 37 + 6 37 32 38 5 17 1 19 32 38 5 37 32 39 3 39 31 39 2 41 29 40 2 41 29 + 40 2 41 29 39 2 41 30 40 1 41 30 38 2 42 32 36 4 40 32 36 4 40 32 36 + 5 39 31 36 6 39 32 36 5 39 32 36 4 40 32 36 5 4 2 33 32 36 5 4 3 32 + 32 36 5 4 2 33 31 37 6 38 31 37 6 38 31 37 7 37 31 37 6 38 31 37 6 38 + 31 38 5 38 31 37 6 38 31 37 6 38 31 37 7 38 30 37 7 38 30 37 7 38 30 + 37 7 38 30 37 7 38 30 31 1 5 7 38 31 7 2 1 7 4 1 1 2 3 4 5 6 38 31 3 + 30 4 6 38 31 2 32 2 7 3 1 1 3 30 31 1 34 1 7 1 19 18 31 1 34 1 7 2 30 + 6 66 1 39 6 66 1 41 4 109 3 109 3 109 3 110 2 110 1 70 0 + + + + 10752.0 + + + 1.16666666667 + + + 4851.0 + + + 0.121418264275 + + + 0.974879227053 + + + 0.50787893645 0.543223860517 0.187637374887 0.0971810486189 + -0.00905204688177 0.000950920725599 -0.00250700579629 + 0.027711220077 -0.0107078255746 + + + 112.0 + + + 0.214285714286 0.739583333333 + + + 0.285714285714 0.178571428571 0.214285714286 0.178571428571 + 0.0833333333333 0.333333333333 1.20833333333 1.33333333333 + + + 96.0 + + + 5.0 29.0 0.184782608696 7.0 1.0 3.0 + + + 0.0 0.989583333333 + + + 0.451171875 + + + 0.0 0.114583333333 0.889880952381 0.52380952381 0.480654761905 + 0.678571428571 0.505952380952 0.389880952381 0.558035714286 0.8125 + 0.397321428571 0.202380952381 0.0 0.260416666667 0.94494047619 + 0.459821428571 + + + 0.0 0.0 0.0 0.238095238095 0.797619047619 0.767857142857 + 0.672619047619 0.154761904762 0.0 0.0 0.0 0.220238095238 + 0.994047619048 1.0 1.0 0.267857142857 0.166666666667 0.303571428571 + 0.285714285714 0.428571428571 0.97619047619 1.0 1.0 0.458333333333 + 0.452380952381 1.0 1.0 1.0 0.047619047619 0.0 0.0357142857143 + 0.0654761904762 0.5 1.0 1.0 1.0 0.0119047619048 0.0 0.0 0.0 + 0.232142857143 0.5 0.5 0.75 0.839285714286 0.738095238095 + 0.767857142857 0.0416666666667 0.0 0.0 0.0 0.559523809524 1.0 1.0 + 0.946428571429 0.0 0.0 0.0 0.0 0.482142857143 0.928571428571 + 0.85119047619 0.833333333333 0.0595238095238 + + + 0.334262718017 0.10051433491 0.0794898760756 0.146218182474 + 0.134402293879 0.126892488515 0.0236277717054 0.15218748961 + 0.293488687699 0.0463887217471 0.18736743239 0.0354229958814 + 0.0899310305481 0.0284539664989 + + + + + + + + + 153 2 258 2 258 2 258 2 258 2 258 2 258 2 258 2 258 2 258 2 258 2 258 + 2 258 2 225 11 22 2 225 25 8 2 225 29 4 2 107 3 115 24 1 10 106 5 114 + 35 106 6 113 35 106 7 112 18 1 16 106 9 111 17 1 17 105 10 110 35 105 + 10 110 35 105 10 2 2 106 35 105 11 1 3 105 35 106 10 1 3 105 35 106 + 15 104 35 106 16 104 34 106 16 104 34 106 16 104 34 105 13 108 34 105 + 12 109 34 105 13 108 35 105 14 1 1 104 35 18 4 83 16 11 1 92 35 17 5 + 82 15 9 1 4 1 91 36 16 7 1 1 79 14 8 9 88 37 16 8 80 17 6 8 88 36 17 + 7 81 19 5 15 81 35 17 8 78 21 3 17 81 35 17 10 77 21 1 18 52 2 26 37 + 15 11 77 39 53 4 24 36 15 11 78 39 52 5 26 34 15 15 73 41 52 1 30 33 + 15 16 1 2 70 24 4 14 50 1 30 18 1 12 1 1 15 21 70 40 81 28 1 1 17 20 + 1 2 69 40 81 30 18 14 2 2 73 41 80 33 15 24 67 44 77 33 14 26 66 41 + 80 33 14 27 65 46 45 2 28 33 14 28 64 47 44 14 16 33 14 29 63 49 42 + 63 14 30 63 49 41 63 13 32 61 25 1 25 41 62 13 33 60 52 40 34 4 24 13 + 35 59 52 39 34 6 3 1 18 13 35 59 53 38 33 23 7 11 37 58 54 37 33 28 1 + 12 38 57 20 2 33 36 4 2 27 41 38 57 20 3 33 36 3 4 25 41 39 57 17 5 + 20 5 3 1 5 35 1 5 26 41 34 3 3 56 16 8 18 8 7 34 4 3 25 40 33 1 2 3 2 + 56 4 3 10 10 15 50 31 40 33 6 3 55 4 3 9 12 12 52 31 41 31 8 3 54 4 4 + 8 13 12 50 32 40 6 2 25 6 4 18 1 35 3 8 4 16 11 49 32 40 6 5 25 3 2 1 + 1 17 4 33 3 10 3 17 10 48 33 39 6 5 24 24 6 32 4 10 3 1 1 15 12 46 32 + 50 23 3 2 20 6 32 3 11 5 16 12 45 32 51 22 3 3 19 8 30 3 14 2 18 11 + 44 32 40 3 8 21 2 1 1 3 19 10 28 4 13 3 18 11 43 32 40 3 8 28 19 11 + 27 4 14 1 20 10 43 15 5 7 46 1 8 29 20 10 27 4 36 11 41 28 1 3 50 30 + 19 11 26 4 38 10 40 32 50 24 2 4 19 11 27 3 39 10 40 12 1 18 51 6 2 + 11 1 2 4 3 18 12 26 4 40 12 37 32 50 6 2 14 4 2 19 12 26 4 41 12 36 + 32 49 7 2 15 3 2 17 14 27 3 42 13 34 32 45 12 2 19 16 15 27 3 43 14 + 32 32 45 33 16 12 1 1 28 3 45 13 31 32 46 31 17 12 30 3 46 14 9 1 5 1 + 13 32 46 7 3 21 16 13 8 2 21 2 48 13 5 5 4 2 12 32 47 30 16 14 5 5 20 + 2 39 4 7 11 7 5 1 6 9 33 48 28 16 14 6 3 21 2 39 23 7 3 2 4 1 3 7 33 + 49 27 16 17 1 4 22 3 30 31 12 4 1 4 6 33 50 25 16 22 23 2 32 30 13 9 + 4 34 51 2 1 21 16 21 24 2 33 16 4 9 13 5 2 4 1 35 55 20 16 21 5 3 16 + 2 34 14 6 9 1 3 10 2 3 40 54 21 16 20 7 3 15 3 37 14 1 8 2 5 13 41 57 + 17 16 21 1 2 7 1 14 3 37 12 7 12 11 42 59 15 16 30 1 1 14 3 39 3 6 1 + 8 11 11 43 59 3 4 7 16 33 13 3 47 4 7 11 12 41 60 1 5 7 15 35 13 2 47 + 4 8 11 11 10 3 28 58 2 1 1 2 8 16 35 13 2 40 1 6 6 7 11 10 11 17 13 + 59 13 16 36 12 2 41 12 9 5 12 12 30 1 60 13 14 40 8 3 42 12 9 5 5 1 5 + 13 90 13 13 42 7 3 42 14 7 7 2 3 3 15 91 10 14 42 7 3 43 50 92 9 14 + 42 7 4 42 31 1 1 3 14 93 9 13 6 2 34 7 5 48 10 6 2 1 4 7 13 94 7 14 5 + 5 5 1 26 8 3 49 8 13 1 5 1 1 14 93 7 18 2 12 24 9 4 48 8 14 2 2 18 95 + 3 25 2 8 12 3 7 9 4 70 21 97 2 22 6 8 11 3 7 9 5 69 20 123 5 9 9 4 6 + 10 3 71 21 119 1 1 6 10 7 6 5 10 3 72 20 120 7 11 6 4 6 12 2 72 20 + 127 2 19 6 12 2 67 3 2 20 127 3 18 2 2 2 12 2 68 2 2 20 127 3 17 6 13 + 2 72 20 146 7 13 2 72 20 145 7 14 2 73 19 122 1 22 6 15 2 74 18 123 1 + 21 6 15 2 79 1 2 11 144 6 16 1 82 1 1 9 147 3 16 1 81 1 2 9 166 1 84 + 9 166 1 86 7 166 2 85 7 166 2 85 7 166 2 81 11 165 3 82 3 5 2 165 4 + 81 3 172 4 81 3 173 1 1 1 81 5 171 1 83 7 253 11 139 3 108 10 139 5 + 109 8 137 6 110 7 137 6 111 6 137 5 112 6 137 5 114 4 137 5 115 3 137 + 5 115 3 138 3 117 2 139 1 118 2 259 2 258 2 259 1 165 2 258 2 258 2 + 259 1 259 1 259 1 259 1 246 0 + + + + 38480.0 + + + 1.75675675676 + + + 8333.0 + + + 0.261130445218 + + + 1.31668595998 + + + 0.473416156723 0.453098123925 0.601582543444 0.082989816194 + 0.0492608747202 -0.00278461250279 0.000739697784019 0.0286187180806 + 0.00222805212779 + + + 260.0 + + + 1.19230769231 3.10135135135 + + + 1.55384615385 1.53846153846 0.661538461538 1.01538461538 + 1.08108108108 4.32432432432 5.97297297297 1.02702702703 + + + 148.0 + + + 27.0 148.0 0.271897810219 42.0 2.0 9.0 + + + 0.0 0.993243243243 + + + 0.216554054054 + + + 0.10893970894 0.565072765073 0.183783783784 0.0174636174636 + 0.0889812889813 0.344698544699 0.519334719335 0.0914760914761 + 0.265280665281 0.537214137214 0.112266112266 0.0 0.0 0.128066528067 + 0.471517671518 0.0307692307692 + + + 0.0138888888889 0.416118421053 0.897569444444 0.483552631579 + 0.0885416666667 0.09375 0.0555555555556 0.0164473684211 0.0 + 0.00159489633174 0.375420875421 0.518341307815 0.409090909091 + 0.145135566188 0.0 0.0 0.0 0.0 0.0451388888889 0.0263157894737 + 0.298611111111 0.534539473684 0.131944444444 0.0 0.0841750841751 + 0.261562998405 0.360269360269 0.913875598086 0.976430976431 + 0.274322169059 0.164983164983 0.07336523126 0.201388888889 + 0.817434210526 0.829861111111 0.0871710526316 0.0173611111111 + 0.0115131578947 0.0 0.0 0.0 0.0398724082935 0.558922558923 + 0.684210526316 0.400673400673 0.0239234449761 0.0 0.0 0.0 0.0 + 0.0625 0.337171052632 0.454861111111 0.284539473684 + 0.00347222222222 0.0 0.0 0.0 0.0 0.106858054226 0.461279461279 + 0.677830940989 0.0606060606061 0.0574162679426 + + + 0.421285505734 0.205744383849 0.0307921354026 0.0278153723202 + 0.284039033992 0.25423301302 0.170666569486 0.101411251241 + 0.0287795283661 0.0372276128672 0.274426407444 0.244589913903 + 0.269613336129 0.13356597075 + + + + + + + + + 29 1 59 2 58 2 33 1 11 5 7 3 33 17 7 3 30 3 1 18 4 4 30 18 1 11 30 18 + 1 11 30 30 30 30 30 30 30 30 30 30 30 2 5 23 30 1 6 23 30 2 4 24 30 5 + 2 10 1 12 30 17 1 12 30 5 1 24 30 30 31 29 30 30 29 31 29 33 28 31 29 + 31 28 32 29 10 1 20 29 30 30 18 1 11 21 5 4 18 1 11 22 7 2 29 22 6 3 + 29 23 3 5 17 1 11 22 5 4 29 22 4 5 17 1 10 23 4 5 17 1 11 22 4 5 17 2 + 10 22 5 4 17 3 9 23 4 4 17 3 9 23 4 4 31 2 8 1 1 9 4 4 55 5 55 5 55 5 + 55 5 44 1 10 6 2 3 6 5 1 2 24 1 10 6 2 19 22 2 9 6 2 21 19 4 8 6 2 22 + 15 7 7 7 2 23 14 1 2 3 8 7 2 23 13 1 4 2 9 6 3 22 18 2 10 6 2 22 18 1 + 10 7 2 22 18 1 10 7 1 23 29 7 1 23 29 8 1 23 28 8 1 23 28 32 28 32 28 + 31 11 5 2 2 9 31 8 53 8 12 8 32 8 7 3 2 8 32 10 3 5 1 9 32 10 1 1 2 + 14 32 18 2 8 32 28 32 28 32 11 3 14 32 28 32 28 32 28 32 28 32 28 33 + 28 32 28 32 11 2 1 1 13 32 9 7 12 32 14 1 1 2 10 32 17 2 9 32 28 31 8 + 4 17 31 6 14 10 31 4 15 10 31 5 15 10 30 5 15 10 30 3 17 10 29 5 16 + 10 31 1 18 10 51 7 1 1 52 6 54 6 54 7 53 7 53 7 53 7 55 5 55 5 55 5 + 55 5 54 7 54 5 56 4 1 0 + + + + 6300.0 + + + 0.571428571429 + + + 2608.0 + + + 0.225076687117 + + + 1.42394657637 + + + 0.515935322866 0.439000560406 0.107650814376 0.234528269006 + 0.110916070699 -0.0008429185667 0.0114289416567 0.00195791002618 + 0.0248737625171 + + + 60.0 + + + 1.45 0.857142857143 + + + 0.933333333333 0.666666666667 1.86666666667 2.33333333333 + 0.533333333333 1.52380952381 0.8 0.571428571429 + + + 105.0 + + + 21.0 79.0 0.209090909091 2.0 5.0 4.0 + + + 0.0 0.990476190476 + + + 0.413968253968 + + + 0.738461538462 0.725641025641 0.0282051282051 0.0 0.833333333333 + 0.802564102564 0.0794871794872 0.00740740740741 0.074358974359 + 0.479487179487 0.902564102564 0.254320987654 0.0 0.430769230769 + 0.738461538462 0.56049382716 + + + 0.56043956044 0.703296703297 0.78021978022 0.516483516484 + 0.120879120879 0.0 0.0 0.0 0.692307692308 0.971153846154 + 0.990384615385 0.596153846154 0.0 0.0 0.0 0.0 0.714285714286 + 0.978021978022 0.89010989011 0.516483516484 0.0 0.0 0.0 0.0 + 0.644230769231 1.0 1.0 0.778846153846 0.192307692308 0.105769230769 + 0.0288461538462 0.0 0.131868131868 0.186813186813 0.153846153846 + 0.912087912088 0.989010989011 1.0 0.758241758242 0.0 0.0 0.0 0.0 + 0.865384615385 0.730769230769 0.913461538462 0.326923076923 0.0 0.0 + 0.0 0.0 0.659340659341 0.791208791209 0.967032967033 0.582417582418 + 0.0102040816327 0.0 0.0 0.451923076923 0.586538461538 + 0.586538461538 0.644230769231 0.865384615385 0.741071428571 + + + 0.553642785247 0.149848587858 0.0530144029035 0.0244683265287 + 0.297656810787 0.342627027629 0.0802895002778 0.0312187351149 + 0.0340902971585 0.03392439977 0.00401325123299 0.3597690904 + 0.178170103616 0.0527707573325 + + + + + + + + + 62 1 248 2 248 2 247 2 35 3 245 5 244 5 208 1 36 4 207 4 33 5 207 6 + 31 6 206 3 34 5 208 2 33 6 208 2 34 5 208 2 34 4 210 31 3 5 210 39 + 210 39 210 39 210 39 210 39 210 39 211 38 211 38 211 39 210 39 210 39 + 210 39 210 39 210 39 210 39 210 39 211 38 211 38 211 38 211 38 211 36 + 29 2 182 38 26 4 181 38 26 5 181 37 25 6 181 38 24 7 180 38 24 8 179 + 5 3 30 23 10 146 2 30 2 1 2 3 30 23 11 144 3 1 5 32 30 23 12 143 13 + 34 24 22 14 142 19 23 2 3 24 22 14 142 24 18 29 22 14 143 24 1 4 2 1 + 1 1 6 30 22 14 143 37 3 4 1 25 21 15 143 24 1 10 14 21 21 11 2 2 143 + 24 1 5 1 3 15 21 21 11 147 30 19 21 21 12 146 33 5 32 20 13 8 1 137 + 70 20 15 5 4 135 71 18 19 2 5 134 19 1 18 2 31 18 28 132 19 1 28 15 8 + 19 28 131 37 30 4 19 30 129 37 31 3 18 32 129 36 31 3 17 31 1 1 129 + 36 31 3 17 34 128 37 30 3 17 35 93 2 32 37 30 3 17 35 91 6 30 37 30 3 + 17 36 90 6 29 38 30 4 16 35 92 5 29 39 29 4 16 35 92 4 30 40 27 5 16 + 35 92 4 30 41 26 7 12 37 91 6 30 39 28 5 12 39 13 2 75 7 29 6 2 31 28 + 5 12 39 12 5 73 5 30 6 7 27 28 5 13 38 11 6 73 5 30 6 9 1 2 22 29 2 1 + 1 13 4 4 29 12 6 74 4 30 6 9 2 1 22 29 5 12 5 4 27 13 6 74 4 31 5 3 8 + 1 22 29 4 13 4 8 2 3 19 12 8 74 3 12 1 27 3 2 1 2 6 3 13 28 5 12 8 1 + 2 9 17 12 9 73 27 17 1 8 4 2 14 28 5 13 12 8 2 1 13 11 10 73 31 23 3 + 1 8 1 3 31 5 14 13 10 5 4 3 11 10 73 38 16 10 5 1 32 4 15 12 7 1 1 6 + 4 2 13 9 73 37 17 3 1 8 2 5 29 4 16 11 6 10 2 3 12 11 72 33 20 3 2 15 + 29 4 18 9 6 9 18 12 4 1 66 40 13 3 2 15 29 4 19 9 4 10 18 13 1 3 66 + 41 11 21 29 4 25 1 6 10 17 15 2 1 66 42 9 22 30 3 20 1 11 3 3 4 17 14 + 70 48 5 21 28 4 21 2 9 1 6 3 17 12 2 1 1 4 64 41 3 8 1 21 29 3 22 1 + 15 3 18 22 62 40 5 29 29 3 38 3 17 22 1 1 61 40 5 29 29 3 39 2 17 25 + 60 39 12 23 29 3 39 3 16 26 59 39 20 15 29 3 39 3 15 28 58 38 28 8 29 + 4 37 5 14 29 57 39 31 4 30 3 36 6 14 30 56 37 33 4 30 2 36 8 13 5 1 + 25 55 38 32 5 29 1 36 9 13 4 1 27 54 39 32 3 30 1 36 8 13 4 2 28 53 + 40 31 3 31 1 35 8 13 4 3 27 53 41 31 2 70 5 13 4 4 27 59 33 32 2 72 3 + 13 4 5 27 57 34 32 1 90 4 3 5 1 14 2 7 57 33 123 26 8 2 58 32 124 4 1 + 20 9 2 49 40 124 4 1 21 9 1 49 40 125 2 3 8 1 9 1 1 10 1 48 40 125 2 + 3 6 1 11 1 1 9 1 49 40 124 3 2 6 2 13 9 1 50 40 131 1 5 12 9 1 50 40 + 137 12 60 40 137 12 26 3 31 40 138 10 27 4 30 40 139 9 26 6 30 16 1 + 22 139 9 26 6 30 17 1 21 139 9 25 8 29 39 124 10 8 3 28 9 28 39 127 8 + 7 3 2 2 24 10 27 39 133 2 6 10 21 11 27 39 139 13 20 11 27 40 125 1 6 + 1 4 7 2 5 20 11 27 40 126 1 4 24 16 10 28 40 126 2 4 22 16 8 31 3 20 + 17 127 1 2 24 16 9 30 3 26 11 129 25 15 10 31 2 27 10 136 18 15 10 31 + 2 28 9 136 18 15 10 31 2 30 7 136 12 2 3 15 11 31 2 32 5 137 16 15 11 + 30 4 31 6 138 13 15 13 29 3 32 6 144 3 19 14 30 1 33 5 142 5 19 14 64 + 4 138 4 3 3 19 15 1 1 1 2 59 4 135 7 1 4 19 20 59 3 137 13 16 22 1 4 + 2 2 49 3 138 13 14 33 189 13 12 18 4 14 191 10 12 14 2 3 3 15 191 9 + 12 15 1 4 2 20 189 6 12 42 191 3 13 2 2 37 208 41 208 41 209 16 1 23 + 208 17 1 23 208 17 1 24 207 16 4 10 4 7 208 15 5 10 3 7 210 5 4 3 2 1 + 4 11 2 7 210 5 4 3 2 1 5 11 1 7 219 2 10 10 1 7 233 8 1 6 234 5 5 5 + 233 4 4 1 1 6 233 4 4 8 234 3 4 7 232 7 2 8 232 5 1 1 2 8 233 4 1 10 + 235 3 3 2 1 5 236 1 9 3 247 1 2234 2 246 3 246 4 244 6 243 6 243 6 + 242 7 242 6 243 6 243 5 245 4 246 2 248 1 12 0 + + + + 44073.0 + + + 1.40677966102 + + + 8115.0 + + + 0.25224892175 + + + 1.20746117488 + + + 0.420909605867 0.446034980115 0.606813204868 0.148508941092 + 0.125240984816 0.19549722485 0.0544925928003 0.187320142271 + 0.00756988918414 + + + 249.0 + + + 1.17269076305 2.33333333333 + + + 1.140562249 1.140562249 1.39759036145 0.995983935743 0.587570621469 + 4.54237288136 3.38983050847 0.813559322034 + + + 177.0 + + + 34.0 170.0 0.255502392344 37.0 0.0 10.0 + + + 0.0 0.994350282486 + + + 0.184126335852 + + + 0.00843108504399 0.529325513196 0.450146627566 0.0 0.451979472141 + 0.351539589443 0.0161290322581 0.0 0.0289589442815 0.440249266862 + 0.183651026393 0.0 0.0 0.00901875901876 0.262265512266 + 0.22962962963 + + + 0.0 0.0 0.033724340176 0.649560117302 0.878299120235 0.315249266862 + 0.0 0.0 0.0 0.033724340176 0.840175953079 0.593841642229 + 0.353372434018 0.25366568915 0.0 0.0 0.41935483871 0.82991202346 + 0.543988269795 0.409090909091 0.0469208211144 0.0 0.0 0.0 + 0.197947214076 0.360703812317 0.271260997067 0.181818181818 + 0.0175953079179 0.0 0.0 0.0 0.0 0.115835777126 0.75366568915 + 0.552785923754 0.0762463343109 0.0 0.0 0.0 0.0 0.0 0.033724340176 + 0.42082111437 0.460410557185 0.197947214076 0.0 0.0 0.0 0.0 0.0 + 0.0366568914956 0.266862170088 0.42082111437 0.183284457478 0.0 0.0 + 0.0 0.0 0.0 0.0369318181818 0.329545454545 0.657670454545 + 0.085597826087 + + + 0.527181558536 0.147888816698 0.195499888831 0.114164430636 + 0.316302428959 0.282493238654 0.0803769494762 0.33325600931 + 0.16381310287 0.104887095033 0.00475099286534 0.296502207811 + 0.104764525231 0.0817488563258 + + + + + + + + + 5 3 6 1 13 2 7 1 30 4 4 4 4 4 21 1 7 2 28 4 5 3 5 3 5 3 5 3 5 3 5 4 4 + 4 3 4 5 3 5 3 4 4 4 4 4 4 4 4 5 2 23 1 5 3 5 4 4 4 4 4 4 4 3 4 4 4 4 + 4 5 3 5 3 5 3 5 3 5 3 4 1 1 2 5 3 5 4 4 4 3 5 3 4 4 4 4 4 4 4 4 4 4 4 + 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 5 3 5 4 5 3 4 1 1 2 4 4 3 5 3 5 3 5 3 + 5 3 5 4 3 4 5 3 5 3 4 4 4 5 3 5 3 4 4 4 4 4 4 4 4 5 3 4 4 4 3 5 3 5 4 + 4 4 4 4 4 3 5 4 3 5 3 5 3 5 3 4 4 4 4 4 4 4 4 4 4 4 5 2 7 1 23 2 6 2 + 5 2 5 3 5 4 4 4 4 4 5 3 6 2 22 1 5 3 5 3 6 1 31 1 8 1 13 3 6 1 6 0 + + + + 1080.0 + + + 0.0592592592593 + + + 397.0 + + + 0.906801007557 + + + 0.972844158723 + + + 0.470672903922 0.503985112222 0.00667803800346 2.66143932727 + -0.0963109885186 -1.01028964741e-05 0.0107874651806 + -0.000198821097615 -0.331239789579 + + + 8.0 + + + 5.375 0.0148148148148 + + + 5.0 7.0 6.0 3.5 0.0 0.0296296296296 0.0296296296296 0.0 + + + 135.0 + + + 5.0 11.0 0.126213592233 10.0 19.0 1.0 + + + 0.0 0.992592592593 + + + 0.367592592593 + + + 0.0 0.0 0.367647058824 0.5 0.0909090909091 0.676470588235 + 0.970588235294 0.544117647059 0.636363636364 0.926470588235 + 0.632352941176 0.0147058823529 0.409090909091 0.102941176471 0.0 + 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.117647058824 0.588235294118 0.235294117647 + 0.0 0.0 0.0 0.0 0.529411764706 0.823529411765 0.705882352941 + 0.470588235294 0.0 0.0 0.176470588235 0.823529411765 0.941176470588 + 1.0 0.882352941176 0.470588235294 0.0 0.352941176471 0.764705882353 + 0.941176470588 0.941176470588 1.0 0.647058823529 0.176470588235 + 0.25 0.882352941176 0.823529411765 1.0 1.0 0.823529411765 + 0.0588235294118 0.0 0.5 0.882352941176 0.882352941176 1.0 + 0.705882352941 0.0 0.0 0.0 0.375 0.882352941176 0.235294117647 + 0.176470588235 0.0 0.0 0.0 0.0 0.25 0.117647058824 0.0 0.0 0.0 0.0 + 0.0 0.0 + + + 0.521415093738 0.216239200376 0.0314311326451 0.0104963329237 + 0.460283670806 0.390996671142 0.172048450019 0.0306635005417 + 0.0159404108177 0.0157379917501 0.414706134626 0.443241023311 + 0.307238951787 0.149016238814 + + + + + + + + + 1 4 18 4 17 6 16 7 15 7 16 6 15 6 16 6 16 6 16 7 15 6 16 9 13 6 1 1 + 14 5 17 5 18 3 19 2 21 2 42 1 20 4 17 5 17 5 17 6 2 1 13 9 14 5 16 6 + 17 5 16 6 2 2 6 1 5 6 3 2 4 4 4 4 1 1 1 3 4 6 2 6 2 2 2 9 1 6 2 2 2 9 + 1 6 1 6 3 5 1 14 3 4 1 6 1 6 2 5 2 6 1 5 3 5 2 5 3 2 12 2 7 1 21 2 20 + 2 20 2 20 2 21 2 9 0 + + + + 968.0 + + + 0.5 + + + 302.0 + + + 0.698675496689 + + + 1.29468599034 + + + 0.305897193314 0.546588633913 0.112755453098 0.468109915012 + 0.117698523737 0.0394162111574 -0.0251416031023 0.0296337841762 + -0.169750306284 + + + 22.0 + + + 1.18181818182 0.5 + + + 1.63636363636 2.18181818182 0.545454545455 0.363636363636 0.0 + 0.0909090909091 1.09090909091 0.818181818182 + + + 44.0 + + + 6.0 18.0 0.22619047619 5.0 4.0 5.0 + + + 0.0 0.977272727273 + + + 0.311983471074 + + + 0.945454545455 0.672727272727 0.909090909091 0.4 0.19696969697 + 0.0909090909091 0.409090909091 0.439393939394 0.0 0.0 + 0.145454545455 0.327272727273 0.0 0.0 0.318181818182 0.287878787879 + + + 0.8 0.916666666667 0.9 0.333333333333 0.9 0.666666666667 0.5 + 0.0833333333333 1.0 1.0 0.933333333333 0.555555555556 1.0 1.0 1.0 + 0.0555555555556 0.333333333333 0.444444444444 0.333333333333 0.0 + 0.4 0.444444444444 0.666666666667 0.0 0.0 0.0 0.0666666666667 0.0 + 0.133333333333 0.611111111111 0.933333333333 0.277777777778 0.0 0.0 + 0.0 0.0 0.0 0.0 0.8 0.5 0.0 0.0 0.0 0.0 0.0 0.444444444444 + 0.266666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.722222222222 0.6 0.0 0.0 + 0.0 0.0 0.0 0.0 0.444444444444 0.666666666667 0.0 + + + 0.390448233682 0.207113291813 0.195263935585 0.13078445463 + 0.0906430099471 0.310726253585 0.122624979551 0.263201022345 + 0.131671241345 0.134237284655 0.0606039652304 0.213654988628 + 0.103719264164 0.123921575937 + + + + + + + + + 35 1 140 2 140 2 108 1 31 2 108 3 1 5 23 2 108 21 10 4 107 27 4 4 107 + 35 107 35 107 35 107 35 107 35 107 35 107 3 4 6 1 3 1 17 107 2 4 2 3 + 2 2 2 1 17 107 3 1 13 1 17 107 36 106 36 106 38 102 40 102 39 104 38 + 104 38 105 6 5 26 105 5 7 17 3 5 105 3 9 9 1 1 2 4 112 10 2 26 105 36 + 107 35 107 35 107 35 107 35 107 35 107 35 107 35 107 35 107 35 108 34 + 108 34 108 34 108 34 108 34 109 33 109 33 109 33 109 33 109 2 1 4 3 3 + 4 16 31 1 80 1 19 11 29 3 79 1 21 9 29 4 101 3 2 3 28 6 101 1 4 2 28 + 7 100 1 4 2 28 8 99 2 32 10 99 1 32 10 99 1 32 11 98 1 31 14 96 1 31 + 15 95 2 30 16 94 1 31 17 93 1 31 18 92 1 31 18 92 1 30 18 93 2 29 18 + 1 4 88 2 29 24 86 3 29 26 60 1 3 1 3 19 29 27 56 18 1 11 29 28 54 18 + 2 11 29 4 1 25 51 19 2 12 27 2 1 2 2 25 50 19 2 12 29 7 3 15 3 3 49 + 19 2 12 27 9 3 22 48 17 4 12 27 11 1 22 48 17 4 12 26 34 49 5 2 10 4 + 12 26 34 57 8 5 12 26 34 57 25 25 16 1 18 17 3 30 2 4 26 25 15 2 17 + 17 5 28 34 24 14 4 17 15 6 29 33 25 35 13 10 26 38 22 33 13 9 25 40 + 19 16 1 19 13 8 26 40 16 38 14 10 25 40 15 38 13 11 25 40 16 5 3 29 + 12 11 28 37 17 2 7 23 1 4 11 13 28 14 2 21 16 2 2 1 6 4 2 1 1 11 4 3 + 12 10 1 1 27 15 2 21 16 2 2 10 6 10 3 3 13 14 23 13 1 2 4 19 17 2 1 + 11 6 16 13 15 23 16 3 20 16 14 5 12 18 15 24 14 4 20 16 13 5 12 20 13 + 25 14 4 20 18 8 9 11 18 15 1 2 22 38 19 7 9 11 18 15 1 2 3 2 18 37 24 + 2 9 11 18 24 17 37 35 4 3 4 17 26 16 37 43 3 17 28 14 37 43 3 17 28 + 14 37 43 5 15 29 13 38 42 5 15 30 13 37 41 6 14 32 12 37 40 6 15 33 + 11 37 38 8 15 34 10 37 38 7 16 35 9 37 38 7 15 19 2 16 8 37 38 7 15 7 + 2 11 1 8 3 6 8 36 38 8 14 7 2 19 4 5 9 36 39 7 16 26 18 15 11 10 42 3 + 17 25 19 4 24 9 61 25 18 4 25 9 61 4 2 19 1 4 14 2 27 8 61 4 1 20 1 4 + 14 2 27 7 63 1 6 20 16 2 28 6 71 2 2 15 16 2 28 6 72 17 17 2 29 5 72 + 16 3 6 9 2 29 5 74 14 3 6 10 1 29 4 79 10 1 8 10 1 29 4 80 9 2 7 10 1 + 30 3 80 2 2 4 3 7 41 3 82 1 1 4 2 9 40 3 83 4 2 9 41 2 84 15 42 1 84 + 14 43 1 85 13 128 14 123 1 2 16 115 26 116 26 117 25 118 23 121 21 + 124 13 1 4 124 17 125 17 127 5 2 8 130 1 4 6 128 5 1 8 128 14 128 14 + 128 16 128 13 131 10 133 9 134 8 135 7 136 6 137 2 9 0 + + + + 20732.0 + + + 0.972602739726 + + + 5416.0 + + + 0.229689807976 + + + 1.57761845387 + + + 0.406821919817 0.505395252891 0.349945832246 0.213830135716 + 0.171873386432 0.10320790937 -0.004829523203 0.0625445914455 + -0.0345515436601 + + + 142.0 + + + 1.40845070423 1.58219178082 + + + 2.42253521127 0.816901408451 0.760563380282 1.60563380282 + 0.575342465753 1.3698630137 3.20547945205 1.12328767123 + + + 146.0 + + + 41.0 130.0 0.232947232947 11.0 2.0 6.0 + + + 0.0 0.993150684932 + + + 0.261238664866 + + + 0.769841269841 0.457142857143 0.763492063492 0.011583011583 + 0.0725308641975 0.155405405405 0.335648148148 0.0435435435435 0.0 + 0.254826254826 0.394444444444 0.0 0.0 0.0 0.524691358025 + 0.432432432432 + + + 0.617647058824 0.803921568627 0.447712418301 0.303405572755 + 0.705882352941 0.565359477124 0.0490196078431 0.0 0.682098765432 + 0.969135802469 0.66049382716 0.418128654971 0.913580246914 + 0.854938271605 0.0 0.0 0.101851851852 0.188271604938 0.148148148148 + 0.0146198830409 0.305555555556 0.481481481481 0.179012345679 0.0 + 0.0 0.0 0.0895061728395 0.365497076023 0.527777777778 + 0.0277777777778 0.0 0.0 0.0 0.0 0.0653594771242 0.795665634675 + 0.869281045752 0.258169934641 0.0 0.0 0.0 0.0 0.0 0.154970760234 + 0.358024691358 0.111111111111 0.0 0.0 0.0 0.0 0.0 0.0 + 0.524691358025 0.969135802469 0.259259259259 0.140350877193 0.0 0.0 + 0.0 0.0 0.00308641975309 0.601851851852 0.740740740741 + 0.59649122807 + + + 0.436582403324 0.169961889415 0.130498740459 0.106930712807 + 0.144614362015 0.244400369243 0.11172930624 0.150918785055 + 0.228507816082 0.0959140265739 0.00788979008694 0.197810212746 + 0.165688660511 0.0708702227364 + + + + + + + + + 10 5 18 5 17 7 16 7 15 7 5 3 8 9 3 2 9 10 1 2 9 13 9 13 10 10 15 4 1 + 2 18 3 2 2 21 2 21 3 21 1 32 1 22 2 2 3 15 10 3 2 8 16 6 18 5 18 5 5 + 2 3 2 6 4 11 1 6 5 15 8 6 1 7 9 3 10 1 9 3 4 1 5 1 9 2 5 3 2 1 17 3 2 + 1 16 4 19 6 15 8 15 8 11 1 2 9 11 11 13 10 13 10 13 9 15 8 16 6 16 7 + 16 7 17 5 19 4 15 0 + + + + 1035.0 + + + 0.511111111111 + + + 371.0 + + + 0.625336927224 + + + 0.750716332378 + + + 0.400147022789 0.496018132811 0.0621372710064 0.406852695489 + -0.088663913786 0.00366346938409 0.00675244790471 -0.00647288684851 + -0.00952990927267 + + + 23.0 + + + 1.5652173913 0.4 + + + 1.04347826087 1.91304347826 2.08695652174 0.521739130435 + 0.355555555556 0.266666666667 0.888888888889 0.0888888888889 + + + 45.0 + + + 3.0 19.0 0.306818181818 4.0 3.0 4.0 + + + 0.0 0.977777777778 + + + 0.35845410628 + + + 0.0 0.309090909091 0.509090909091 0.583333333333 0.484848484848 + 0.424242424242 0.651515151515 0.805555555556 0.818181818182 + 0.454545454545 0.333333333333 0.0277777777778 0.19696969697 + 0.0909090909091 0.0454545454545 0.0 + + + 0.0 0.0 0.0 0.166666666667 0.916666666667 0.2 0.5 0.0 0.0 0.0 0.0 + 0.833333333333 0.777777777778 0.0666666666667 0.833333333333 + 0.777777777778 0.0 0.277777777778 0.0 0.722222222222 0.555555555556 + 0.6 1.0 1.0 0.6 1.0 0.0666666666667 0.777777777778 0.666666666667 + 0.8 0.944444444444 0.277777777778 1.0 0.944444444444 0.133333333333 + 0.555555555556 0.611111111111 0.266666666667 0.111111111111 0.0 + 0.466666666667 0.833333333333 0.466666666667 0.611111111111 + 0.388888888889 0.0 0.0 0.0 0.0 0.388888888889 0.0666666666667 + 0.277777777778 0.166666666667 0.0 0.0 0.0 0.2 0.166666666667 0.0 + 0.0 0.0 0.0 0.0 0.0 + + + 0.32215574524 0.261515101437 0.0433065648539 0.0146040679543 + 0.202575843232 0.221682447835 0.224596102409 0.0758136487756 + 0.0064842858784 0.0233720223202 0.25653555492 0.0607378345699 + 0.261782731501 0.167374536301 + + + + + + + + + 230 2 22 1 10 2 21 2 10 1 22 1 11 1 22 1 34 1 11 1 22 2 10 2 21 5 7 2 + 21 4 78 2 20 8 4 5 18 9 2 8 17 8 3 6 17 9 4 3 19 8 5 3 20 2 1 1 8 2 + 21 6 7 1 21 4 32 1 2 1 30 2 3 1 99 2 33 2 2 1 30 6 29 2 1 2 30 2 34 1 + 33 2 33 2 33 3 1 1 30 6 29 5 30 3 32 3 32 5 31 5 33 1 104 2 33 2 30 1 + 33 2 33 2 34 1 186 1 21 2 11 1 21 3 9 2 21 5 8 1 21 2 2 1 30 2 33 2 + 33 2 34 1 209 1 34 5 30 1 1 3 30 1 1 1 183 2 33 2 25 1 7 2 24 3 6 1 + 18 2 3 1 1 3 6 2 17 2 3 1 1 3 6 1 22 6 6 1 22 6 6 2 22 1 1 2 7 2 20 7 + 6 2 22 1 1 2 7 2 34 1 34 1 24 3 6 2 24 3 7 1 24 3 7 1 33 2 33 2 25 2 + 6 2 24 3 7 1 25 2 7 1 33 2 34 1 25 2 7 1 24 3 7 1 24 3 6 3 24 2 7 1 + 34 1 34 1 34 1 34 1 63 1 34 1 5 1 28 1 5 2 24 4 30 5 31 4 32 2 33 1 + 34 1 7 2 25 2 6 2 24 4 5 2 23 5 5 1 25 4 5 1 25 4 31 4 31 4 31 4 31 4 + 32 3 33 2 21 1 11 2 5 2 14 2 10 3 4 2 13 3 9 4 3 3 13 3 10 3 3 3 13 3 + 1 1 9 1 5 2 14 4 8 4 3 2 14 2 10 4 3 3 14 1 9 6 1 6 10 3 9 5 3 3 12 3 + 7 3 1 1 5 2 15 1 7 1 9 1 16 1 52 1 16 1 17 1 14 1 1 1 1 1 15 3 12 5 + 15 2 15 3 15 2 17 1 16 1 33 2 33 4 154 1 34 1 33 4 3 1 25 6 2 3 24 6 + 2 4 23 6 3 3 23 4 1 1 2 2 25 11 14 4 6 12 14 5 4 6 3 1 20 4 1 6 3 2 + 24 6 3 2 23 2 1 1 1 2 2 3 108 2 21 1 2 3 6 2 20 5 28 0 + + + + 6055.0 + + + 0.202312138728 + + + 648.0 + + + 1.40740740741 + + + 0.976886864085 + + + 0.367783224401 0.56371124031 0.0661912868444 4.30667932432 + -0.0663970217002 0.00594991657472 -0.118287658376 0.0614340745886 + -2.59928150184 + + + 35.0 + + + 4.08571428571 0.606936416185 + + + 2.74285714286 9.6 3.65714285714 0.0 0.439306358382 0.346820809249 + 0.531791907514 1.1098265896 + + + 173.0 + + + 10.0 30.0 0.195020746888 49.0 9.0 1.0 + + + 0.0346820809249 0.994219653179 + + + 0.107018992568 + + + 0.0116279069767 0.0116279069767 0.00290697674419 0.326704545455 + 0.312661498708 0.170542635659 0.255813953488 0.181818181818 + 0.105943152455 0.0413436692506 0.118863049096 0.126262626263 0.0 + 0.0 0.0 0.0328282828283 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.363636363636 0.386363636364 + 0.0357142857143 0.0113636363636 0.0 0.0454545454545 0.0113636363636 + 0.0 0.102272727273 0.454545454545 0.352380952381 0.609090909091 + 0.285714285714 0.245454545455 0.290909090909 0.12380952381 + 0.0272727272727 0.281818181818 0.130952380952 0.0681818181818 + 0.0357142857143 0.0681818181818 0.136363636364 0.5 0.386363636364 + 0.0454545454545 0.190476190476 0.0227272727273 0.0119047619048 + 0.0795454545455 0.113636363636 0.0 0.0909090909091 0.0 + 0.180952380952 0.0363636363636 0.0380952380952 0.0363636363636 + 0.209090909091 0.12380952381 0.381818181818 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0795454545455 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0545454545455 + + + 0.319242800995 0.308372256692 0.203767437362 0.0750490846846 + 0.156219742977 0.403509460442 0.26815635644 0.130413377706 + 0.122727933707 0.117716102459 0.347010073187 0.173965844217 + 0.422026700228 0.223730467798 + + + + + + + + + 13 1 36 2 35 3 34 3 31 8 29 7 30 8 32 4 33 6 29 8 29 8 29 9 27 9 3 1 + 26 2 7 3 25 3 4 5 22 14 23 12 1 4 20 18 19 10 1 7 19 19 17 21 16 22 + 15 23 15 23 14 24 12 25 12 25 12 18 3 5 12 3 3 3 1 7 3 4 19 3 3 5 4 3 + 18 4 3 6 2 5 12 3 2 4 4 5 2 5 12 9 4 11 13 3 1 5 4 10 14 3 2 4 3 7 1 + 3 14 3 2 4 3 11 14 3 2 4 4 11 12 10 4 11 13 10 2 12 13 10 1 13 13 5 2 + 2 2 12 15 4 7 11 16 2 9 11 16 1 9 12 12 6 3 1 2 13 12 25 3 2 7 25 3 4 + 5 25 5 2 5 4 3 12 1 5 12 4 4 17 12 4 4 17 12 4 5 16 12 1 1 2 5 16 12 + 1 1 2 6 15 12 1 1 1 8 14 12 3 10 12 12 3 10 12 13 2 11 11 26 4 2 5 12 + 4 11 2 4 4 12 5 17 3 12 4 17 4 12 4 13 8 12 6 10 10 11 9 8 9 11 7 12 + 7 11 9 10 5 13 6 1 1 11 5 13 9 13 3 12 10 27 12 25 13 24 13 23 6 1 8 + 22 17 20 18 19 19 18 19 18 21 16 22 15 23 14 24 13 25 12 26 11 4 1 21 + 12 3 1 20 13 24 14 17 1 6 16 13 3 5 13 24 11 26 11 11 1 13 12 10 2 13 + 11 26 11 5 2 4 2 7 1 5 11 5 3 3 2 13 12 1 1 1 4 2 3 13 11 2 1 1 4 2 3 + 13 11 4 4 2 3 13 11 3 6 1 2 14 11 2 10 14 11 2 11 5 1 7 11 1 11 13 23 + 15 19 18 17 21 16 6 2 2 1 10 16 1 1 4 6 9 10 16 1 10 10 7 1 19 10 7 1 + 19 10 7 3 17 11 6 3 17 11 6 4 16 10 7 9 11 11 5 9 12 11 5 10 11 12 3 + 12 8 1 1 10 5 15 4 14 4 12 2 2 2 16 3 12 1 2 4 14 4 1 1 11 9 10 10 8 + 10 7 9 14 8 6 10 14 7 7 6 17 8 6 5 19 5 8 3 21 1 13 1 21 2 6 0 + + + + 4773.0 + + + 0.286821705426 + + + 2142.0 + + + 0.361811391223 + + + 1.06273304651 + + + 0.564101566553 0.52614379085 0.0278386418696 0.53804113526 + 0.0115738493555 -0.000234457413716 -0.00684388636745 + 0.00303408330468 -0.0209278902692 + + + 37.0 + + + 4.16216216216 0.937984496124 + + + 1.2972972973 7.02702702703 4.64864864865 3.67567567568 + 0.496124031008 1.36434108527 0.558139534884 1.3023255814 + + + 129.0 + + + 22.0 86.0 0.293827160494 10.0 10.0 1.0 + + + 0.0 0.992248062016 + + + 0.448774355751 + + + 0.0208333333333 0.03125 0.0729166666667 0.16835016835 + 0.736111111111 0.59375 0.9375 0.417508417508 0.510416666667 + 0.649305555556 0.711805555556 0.548821548822 0.171875 0.609375 0.4 + 0.60303030303 + + + 0.0 0.0 0.09375 0.03125 0.0 0.0 0.0 0.0 0.0 0.075 0.0125 0.0 0.0875 + 0.175 0.25 0.352941176471 0.375 0.84375 0.84375 0.8125 1.0 0.84375 + 0.328125 0.764705882353 0.75 0.925 0.725 0.0875 0.9375 0.9625 + 0.4875 0.141176470588 0.225 0.8375 0.5 0.425 0.5875 0.9125 0.7875 + 0.129411764706 0.03125 0.9375 1.0 0.765625 0.34375 0.984375 + 0.921875 0.441176470588 0.0 0.55 0.9875 0.8375 0.2875 0.9375 1.0 + 0.764705882353 0.0 0.1375 0.2 0.4125 0.125 0.25 0.275 + 0.376470588235 + + + 0.460402806742 0.223164341822 0.0227509535865 0.0142846260617 + 0.218326357111 0.427200317939 0.143489928199 0.0326060111234 + 0.0170768686114 0.0304949437073 0.165823845126 0.323434179435 + 0.313327351965 0.0883108424599 + + + + + + + + + 4 2 7 2 3 2 71 30 58 19 3 10 1 2 52 38 1 2 47 42 46 38 50 17 5 18 48 + 21 1 19 47 20 2 19 47 41 47 41 47 42 46 42 46 42 46 42 46 42 45 43 46 + 41 47 41 45 43 46 43 45 43 45 43 44 45 45 43 45 43 45 42 46 42 46 42 + 46 41 47 41 47 20 2 19 47 20 2 19 47 20 2 19 47 20 2 20 46 20 2 19 40 + 1 6 20 3 18 10 6 1 1 4 10 7 2 7 58 5 13 2 4 5 21 2 36 4 19 6 21 3 34 + 5 19 6 20 4 35 4 19 6 20 3 36 4 19 7 19 3 36 3 20 7 3 7 9 5 34 3 20 7 + 2 30 25 4 20 7 2 34 22 3 20 7 1 37 20 3 20 8 1 36 20 3 20 45 20 3 20 + 45 20 3 20 45 20 3 20 45 20 3 20 45 20 3 20 45 20 3 20 45 21 2 20 45 + 20 2 21 45 20 3 20 45 20 3 20 45 20 3 20 45 20 3 20 45 20 3 20 45 20 + 3 20 45 20 3 20 45 20 3 20 45 20 3 20 45 6 1 12 4 20 44 21 3 20 44 21 + 3 21 43 21 3 21 44 20 3 20 44 20 4 21 43 20 4 20 44 21 3 21 43 21 3 + 21 43 7 2 11 5 20 43 20 5 20 43 17 8 20 43 20 5 20 43 15 11 21 41 5 + 24 3 1 13 42 5 30 11 42 6 3 2 24 12 41 6 3 2 24 12 41 5 31 11 40 6 33 + 1 1 8 40 2 38 6 83 5 85 3 85 3 85 3 85 4 84 4 84 4 84 4 85 3 1 0 + + + + 8360.0 + + + 0.926315789474 + + + 3561.0 + + + 0.166807076664 + + + 1.52027315408 + + + 0.494724134703 0.43922637079 0.164934155877 0.146119381834 + 0.111187136543 0.00333733967112 0.00211418509457 0.00241748951215 + 0.0043255050091 + + + 88.0 + + + 0.534090909091 0.905263157895 + + + 0.318181818182 0.909090909091 0.681818181818 0.227272727273 + 0.336842105263 1.26315789474 1.05263157895 0.842105263158 + + + 95.0 + + + 10.0 42.0 0.19018404908 5.0 2.0 3.0 + + + 0.0 0.989473684211 + + + 0.425956937799 + + + 0.883399209486 0.789772727273 0.00189393939394 0.0 0.875494071146 + 0.831439393939 0.143939393939 0.111742424242 0.0 0.36553030303 + 0.861742424242 0.268939393939 0.0 0.361742424242 0.823863636364 + 0.498106060606 + + + 0.743801652893 0.863636363636 0.833333333333 0.590909090909 + 0.00757575757576 0.0 0.0 0.0 0.917355371901 1.0 1.0 0.734848484848 + 0.0 0.0 0.0 0.0 0.842975206612 1.0 0.939393939394 0.560606060606 + 0.0 0.0 0.0 0.0 0.661157024793 0.977272727273 0.962121212121 + 0.863636363636 0.272727272727 0.30303030303 0.363636363636 + 0.0833333333333 0.0 0.0 0.0227272727273 0.848484848485 1.0 + 0.992424242424 0.727272727273 0.0151515151515 0.0 0.0 0.0 + 0.590909090909 0.742424242424 0.712121212121 0.333333333333 0.0 0.0 + 0.0 0.0 0.901515151515 1.0 1.0 0.765151515152 0.00757575757576 0.0 + 0.0 0.0 0.545454545455 0.636363636364 0.659090909091 0.780303030303 + 0.439393939394 + + + 0.506455003601 0.160881549636 0.0217247659025 0.00350347668905 + 0.152920889808 0.374640652126 0.0639740371492 0.0103229966308 + 0.0457742631135 0.0175758450838 0.11862436213 0.348098626157 + 0.121932804972 0.0459188598023 + + + + + + + + + 41 1 41 1 42 1 48 2 33 3 5 1 33 6 38 4 39 3 39 3 5 3 32 2 7 1 32 2 41 + 1 25 6 11 1 24 7 10 2 23 9 8 2 24 10 7 2 23 11 7 2 23 13 4 2 24 15 1 + 3 23 20 23 19 23 20 23 20 23 19 24 19 23 20 23 19 24 12 1 6 23 20 25 + 5 2 3 2 5 27 2 5 1 4 4 27 2 4 3 2 5 27 2 4 3 2 4 25 5 4 2 3 3 25 7 3 + 2 3 1 1 1 25 7 3 1 31 8 35 7 37 5 37 6 37 6 37 5 38 5 38 5 38 4 39 4 + 39 5 9 1 27 9 5 2 27 15 28 15 29 14 29 7 2 5 30 12 31 12 31 12 32 10 + 34 9 34 9 35 8 35 7 37 6 38 5 124 4 40 3 41 1 67 2 41 3 40 3 40 3 40 + 2 41 2 41 2 41 2 41 2 41 2 41 2 41 2 41 2 41 2 41 1 42 1 42 1 42 1 42 + 0 + + + + 3698.0 + + + 0.5 + + + 642.0 + + + 0.579439252336 + + + 0.897314375987 + + + 0.462468476487 0.406413780465 0.113165536351 0.505733615821 + -0.158558939171 0.00263795269968 -0.0671795292848 0.00482312029804 + 0.199833944121 + + + 43.0 + + + 0.744186046512 0.337209302326 + + + 0.279069767442 1.58139534884 0.744186046512 0.279069767442 + 0.511627906977 0.697674418605 0.139534883721 0.0 + + + 86.0 + + + 3.0 13.0 0.357723577236 6.0 3.0 1.0 + + + 0.0 0.988372093023 + + + 0.173607355327 + + + 0.0333333333333 0.0 0.0142857142857 0.159090909091 0.17316017316 + 0.54958677686 0.640692640693 0.0330578512397 0.281385281385 + 0.51652892562 0.108225108225 0.0 0.199134199134 0.0289256198347 0.0 + 0.0 + + + 0.12 0.0181818181818 0.0 0.0 0.0 0.0 0.309090909091 0.327272727273 + 0.0 0.0 0.0 0.0 0.06 0.0 0.0 0.0 0.0 0.030303030303 0.378787878788 + 0.818181818182 0.883333333333 0.378787878788 0.0 0.0 0.0 + 0.690909090909 0.818181818182 0.163636363636 0.5 0.818181818182 + 0.145454545455 0.0 0.0 0.781818181818 0.836363636364 0.145454545455 + 0.34 0.145454545455 0.0 0.0 0.0 0.333333333333 0.939393939394 + 0.136363636364 0.0 0.0 0.0 0.0 0.0 0.381818181818 0.127272727273 + 0.0 0.0 0.0 0.0 0.0 0.4 0.0151515151515 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.700428743783 0.103760318574 0.081893403886 0.0350797421905 + 0.742531036624 0.266974159291 0.05260057622 0.142484393726 + 0.0517462787933 0.037834447486 0.54292099021 0.453234924517 + 0.0812789251397 0.0452774921815 + + + + + + + + + 100 2 198 4 197 4 197 3 197 6 162 4 29 6 162 4 29 5 162 3 31 5 163 4 + 30 4 163 7 27 3 164 20 9 1 4 3 164 36 165 36 166 35 165 36 165 36 165 + 36 165 36 165 36 165 36 165 36 166 36 165 36 165 36 165 36 165 36 165 + 36 165 36 165 36 165 36 20 2 143 36 20 3 142 29 26 5 141 36 19 6 140 + 36 19 7 139 36 19 7 139 36 19 9 137 36 19 9 137 36 20 8 137 36 20 9 + 136 36 20 9 136 35 20 9 138 32 20 11 138 32 19 15 135 34 17 15 135 35 + 16 15 100 2 32 36 15 16 4 2 94 3 31 36 15 16 3 4 93 11 22 37 15 17 2 + 4 93 70 15 3 2 12 2 5 92 70 15 3 1 25 87 70 14 4 1 25 87 21 1 48 15 + 32 85 38 5 26 15 33 84 38 16 2 6 7 15 34 83 38 24 7 15 35 82 38 25 6 + 14 37 81 38 25 6 14 38 80 39 25 5 13 39 80 39 25 5 13 40 79 39 21 1 4 + 4 13 40 78 40 20 1 5 4 13 39 79 40 24 1 1 4 12 40 17 2 59 41 25 5 12 + 41 15 4 58 43 25 2 13 36 2 2 15 7 56 42 40 41 14 7 1 1 55 42 40 8 1 + 32 13 11 55 41 40 7 2 33 10 18 50 41 41 5 5 30 11 17 52 39 41 6 6 29 + 11 18 51 40 41 5 7 28 11 13 4 2 50 39 46 2 5 4 2 23 11 12 5 2 50 40 + 45 2 1 8 5 20 10 13 4 4 49 40 41 5 2 2 2 5 5 13 3 2 11 13 4 6 48 39 + 41 4 1 5 2 3 8 3 1 6 3 2 12 15 1 8 47 39 49 2 11 11 4 2 12 15 1 3 3 2 + 47 39 50 2 11 11 1 4 12 14 2 4 3 2 47 38 50 4 9 15 12 13 5 3 2 4 46 + 39 63 9 2 4 10 14 6 2 52 38 65 1 4 3 3 2 11 15 6 1 52 38 63 4 4 2 3 2 + 11 5 1 9 7 4 3 1 44 38 63 4 4 6 12 20 1 11 43 37 64 3 5 5 12 32 43 37 + 65 1 5 6 10 35 42 37 65 13 10 36 40 37 66 12 10 36 40 37 68 9 11 37 + 39 38 67 7 12 39 38 38 67 8 11 39 38 38 66 9 11 39 39 2 7 5 2 20 67 9 + 11 40 38 2 16 19 67 3 1 4 11 5 1 35 37 2 25 1 1 8 72 2 13 4 3 33 38 1 + 28 7 72 2 13 30 6 1 71 6 87 4 4 5 2 15 79 5 87 4 3 6 2 15 79 5 96 4 2 + 14 80 5 98 18 5 3 73 4 98 18 5 2 74 4 99 17 4 3 10 1 62 5 97 20 2 5 9 + 1 62 1 1 3 99 19 1 5 8 3 63 3 105 2 1 9 3 3 8 4 62 1 1 2 105 5 4 3 2 + 5 8 3 65 1 106 4 10 3 8 3 166 2 5 5 9 3 8 4 165 2 6 3 10 2 9 4 166 2 + 7 1 4 1 6 1 9 5 174 1 3 2 16 7 176 3 5 2 8 15 20 2 146 5 2 3 8 26 1 + 10 139 4 2 11 8 37 139 5 3 8 8 38 130 5 2 18 8 38 131 24 8 38 132 23 + 8 38 133 22 7 39 135 20 8 39 136 18 8 39 136 18 7 40 139 14 8 40 143 + 9 7 41 161 41 160 42 136 5 2 5 11 42 137 15 7 42 139 12 12 37 141 11 + 11 39 141 9 12 38 143 9 10 39 143 8 12 38 146 4 13 2 3 34 146 3 12 2 + 7 31 161 5 4 31 161 2 8 30 161 2 1 1 4 32 161 5 5 21 4 2 1 2 162 30 4 + 2 2 1 162 31 1 7 160 42 159 42 159 4 2 36 160 3 2 36 161 2 1 37 161 9 + 1 7 3 20 162 16 3 20 162 39 162 39 161 40 161 16 4 20 161 16 4 21 160 + 13 6 22 160 4 19 18 160 4 20 16 162 2 27 10 162 2 27 10 162 2 27 11 + 161 2 31 6 161 3 31 6 162 1 32 6 196 5 196 6 196 5 197 4 197 4 198 3 + 156 0 + + + + 33366.0 + + + 1.21084337349 + + + 7672.0 + + + 0.213242961418 + + + 0.849176538573 + + + 0.436615615224 0.472536891333 0.409132690744 0.186870084394 + -0.0738971435365 0.113505115761 -0.055137345516 0.096586189874 + 0.0218164583255 + + + 201.0 + + + 1.1592039801 1.77108433735 + + + 1.1144278607 0.557213930348 0.995024875622 1.97014925373 + 0.457831325301 3.32530120482 2.33734939759 0.89156626506 + + + 166.0 + + + 23.0 101.0 0.275820170109 27.0 6.0 11.0 + + + 0.0 0.993975903614 + + + 0.229934664029 + + + 0.0 0.289523809524 0.338048780488 0.560952380952 0.527317073171 + 0.567619047619 0.118048780488 0.0 0.0785365853659 0.509047619048 + 0.0370731707317 0.0 0.0 0.21802054155 0.398852223816 + 0.0331465919701 + + + 0.0 0.0 0.0 0.0 0.018 0.68 0.79619047619 0.28 0.0 0.0 + 0.495238095238 0.662857142857 0.19 0.441904761905 0.700952380952 + 0.466666666667 0.242 0.361904761905 0.712380952381 0.918095238095 + 0.482 0.00190476190476 0.0 0.0 0.5 0.990476190476 0.632380952381 + 0.00761904761905 0.0 0.0 0.0 0.0 0.08 0.152380952381 0.4 0.2 0.0 + 0.0 0.0 0.0 0.0 0.0780952380952 0.750476190476 0.685714285714 0.152 + 0.0 0.0 0.0 0.0 0.0 0.0647619047619 0.521904761905 0.36 + 0.0285714285714 0.0 0.0 0.0 0.0 0.0 0.291208791209 0.769230769231 + 0.437728937729 0.130036630037 0.0 + + + 0.328714845872 0.140222804827 0.205750329893 0.200941043289 + 0.0298184448407 0.175197728578 0.0322117781684 0.349507560054 + 0.231179352974 0.115066617633 0.0395131304198 0.0360178803427 + 0.0676057835571 0.117868005256 + + + + + + + + + 3 4 4 5 1 2 1 3 1 3 1 11 1 6 2 3 1 2 2 4 1 1 2 3 5 3 2 1 2 6 2 3 1 2 + 2 3 2 1 2 3 2 1 2 3 2 1 2 3 2 1 2 2 3 1 2 2 6 2 6 2 6 2 6 2 6 2 6 2 6 + 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 1 7 2 6 1 7 1 7 1 7 2 6 1 + 7 1 7 0 + + + + 344.0 + + + 0.186046511628 + + + 127.0 + + + 1.0157480315 + + + 0.936764705882 + + + 0.271091113611 0.356205474316 0.0315995592621 1.05082789693 + -0.106671945627 0.00485049804372 -0.0348502205711 -0.0116640570675 + 0.720397897602 + + + 8.0 + + + 1.0 0.255813953488 + + + 1.0 1.5 1.0 0.5 0.46511627907 0.558139534884 0.0 0.0 + + + 43.0 + + + 10.0 8.0 0.119402985075 1.0 3.0 2.0 + + + 0.0 0.976744186047 + + + 0.369186046512 + + + 0.75 1.0 1.0 0.727272727273 0.65 0.318181818182 0.0 0.0 0.8 + 0.409090909091 0.0 0.0 0.35 0.0 0.0 0.0 + + + 0.4 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.6 1.0 1.0 1.0 1.0 1.0 0.8 + 0.166666666667 0.6 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.6 0.4 + 0.166666666667 0.0 0.0 0.0 0.0 0.0 1.0 0.4 0.333333333333 0.0 0.0 + 0.0 0.0 0.0 1.0 0.8 1.0 0.2 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.604634425783 0.168495604266 0.188996749365 0.0677860005612 + 0.559320847664 0.369314415085 0.114326123165 0.307910790904 + 0.0210896624162 0.0862334231345 0.351418546503 0.541964595519 + 0.211156694154 0.0965029061969 + + + + + + + + + 42 1 77 2 36 2 9 3 2 1 7 4 1 9 1 4 36 20 4 19 36 20 5 18 36 20 4 19 + 36 20 4 19 36 19 5 19 36 4 2 13 5 18 45 12 3 12 1 4 40 2 3 14 3 12 2 + 4 39 1 4 14 3 20 42 15 2 20 37 1 5 14 2 20 36 4 1 16 2 20 36 4 2 1 1 + 13 2 20 36 20 4 19 37 20 2 20 36 21 1 21 37 19 3 20 37 19 3 20 37 19 + 3 20 37 19 3 20 37 4 1 14 3 20 37 3 5 11 3 20 37 20 2 20 37 20 2 20 + 37 20 2 20 37 20 2 20 36 21 2 20 37 20 2 21 36 21 1 21 36 43 36 42 37 + 20 2 21 37 19 2 20 38 19 3 18 36 1 2 19 3 18 36 1 2 18 5 17 36 1 2 18 + 5 17 36 1 2 19 3 18 35 2 2 19 2 20 10 1 23 2 2 19 3 20 3 23 6 3 2 19 + 3 55 2 19 3 55 2 19 2 56 2 11 25 41 2 4 34 39 2 3 36 38 2 3 35 39 3 2 + 35 39 3 1 36 39 40 39 40 39 40 39 40 39 40 39 40 39 41 38 40 39 40 39 + 40 39 40 39 42 1 2 2 1 26 54 21 49 39 40 39 41 5 3 30 41 38 41 38 41 + 38 41 38 41 38 41 38 41 38 41 38 40 39 40 39 41 38 41 38 41 38 41 38 + 41 38 41 38 41 37 42 10 1 7 1 17 43 5 25 5 282 1 77 2 36 0 + + + + 7268.0 + + + 0.858695652174 + + + 3356.0 + + + 0.169845053635 + + + 1.56668226486 + + + 0.51699978607 0.480657899907 0.147356146344 0.164405869546 + 0.109113503454 -0.0044405511728 0.00111599017284 -0.000712697333819 + 0.00108588034931 + + + 79.0 + + + 0.810126582278 0.847826086957 + + + 1.01265822785 0.607594936709 1.16455696203 0.405063291139 + 1.47826086957 1.39130434783 0.391304347826 0.130434782609 + + + 92.0 + + + 7.0 38.0 0.160377358491 3.0 3.0 4.0 + + + 0.0 0.989130434783 + + + 0.461750137589 + + + 0.79176201373 0.910755148741 0.0549199084668 0.0 0.754347826087 + 0.880434782609 0.00217391304348 0.0 0.176086956522 0.332608695652 + 0.90652173913 0.684782608696 0.0 0.178260869565 0.969565217391 + 0.741304347826 + + + 0.606060606061 0.759259259259 0.838383838384 0.787037037037 + 0.20202020202 0.0 0.0 0.0 0.763636363636 1.0 1.0 1.0 + 0.0363636363636 0.0 0.0 0.0 0.463636363636 0.75 0.827272727273 0.7 + 0.0 0.0 0.0 0.0 0.781818181818 1.0 1.0 1.0 0.00909090909091 0.0 0.0 + 0.0 0.3 0.4 0.427272727273 0.541666666667 0.9 0.733333333333 + 0.818181818182 0.466666666667 0.0 0.0 0.0 0.341666666667 1.0 1.0 + 1.0 0.491666666667 0.0 0.0 0.0 0.333333333333 1.0 1.0 1.0 + 0.491666666667 0.0 0.0 0.0 0.35 1.0 0.883333333333 1.0 + 0.516666666667 + + + 0.373389219239 0.20415342347 0.012334390152 0.0103595444972 + 0.0410567098484 0.369809108192 0.0793095875698 0.0260668540213 + 0.0308773448414 0.0109688872834 0.0939815426878 0.219569530642 + 0.0799690887625 0.0559339457192 + + + + + + + + + 238 2 62 4 60 5 61 6 59 7 58 7 57 8 57 9 55 10 55 9 57 8 58 9 2 2 51 + 15 50 15 16 6 28 16 15 9 25 16 15 12 22 17 14 1 1 13 19 18 13 8 2 8 4 + 2 9 20 12 9 1 14 10 19 12 24 10 20 10 25 10 21 9 25 9 23 8 25 9 23 8 + 9 2 14 10 23 7 9 3 13 9 24 7 25 9 25 6 25 9 10 1 14 6 24 10 9 3 12 7 + 10 2 12 10 10 1 13 7 25 9 4 1 5 2 6 1 5 6 25 9 5 1 5 2 12 6 7 1 1 3 + 13 10 4 1 5 2 12 6 10 1 14 10 4 1 5 1 13 6 22 1 2 10 10 1 13 6 19 4 1 + 11 10 1 13 6 10 1 13 11 10 2 12 5 26 10 9 3 12 5 26 10 3 2 13 2 4 8 1 + 10 3 1 7 13 1 2 5 1 7 3 2 6 4 10 12 10 3 2 13 3 3 6 3 10 12 10 3 3 12 + 3 2 6 1 12 4 3 6 10 3 4 1 2 7 12 11 1 5 3 6 10 4 7 6 12 26 9 6 2 1 3 + 6 12 26 9 6 2 1 3 6 13 25 9 10 1 7 3 1 8 26 9 25 6 25 10 18 1 4 6 12 + 2 12 10 17 3 3 6 26 10 4 1 12 3 3 6 26 10 4 3 17 5 26 10 4 3 17 5 25 + 11 4 4 16 6 24 11 4 6 13 8 23 11 3 11 9 8 24 9 4 11 2 2 4 8 25 9 4 9 + 10 9 6 2 15 6 3 1 4 10 9 10 4 5 13 6 8 11 8 10 4 8 9 7 8 12 7 10 4 12 + 1 3 2 5 9 12 2 15 3 18 1 5 10 27 5 10 7 6 10 12 1 2 2 10 5 11 5 5 13 + 12 5 9 5 13 3 6 11 11 7 9 4 15 2 6 10 15 3 10 5 15 2 5 9 29 5 15 1 6 + 9 29 6 14 1 5 10 30 5 13 4 3 11 2 7 20 4 15 3 3 21 19 4 14 4 3 21 19 + 4 14 4 2 23 18 4 15 3 3 23 17 4 15 2 4 24 15 5 16 1 4 26 14 4 21 27 + 13 4 21 27 13 4 15 2 4 28 12 4 15 2 4 28 12 4 15 2 4 29 10 5 15 2 4 4 + 1 25 9 5 15 2 3 30 11 4 15 1 4 30 11 4 15 1 5 6 2 2 1 18 11 4 32 5 1 + 5 1 6 11 5 30 6 1 12 10 6 31 18 11 4 32 6 1 11 11 4 32 5 4 9 11 4 32 + 6 3 9 10 5 31 9 2 8 11 4 31 10 3 6 11 3 33 9 4 5 11 3 33 7 8 3 10 5 + 35 2 11 2 11 3 37 1 24 3 62 3 61 5 61 3 62 3 61 4 42 3 16 4 41 5 15 4 + 32 7 2 9 5 2 4 4 32 18 5 2 4 4 32 8 1 9 5 1 5 4 33 17 10 6 32 17 5 1 + 4 6 33 16 5 1 4 5 35 15 6 1 3 5 37 13 5 3 2 5 38 12 5 3 2 4 40 11 5 3 + 2 4 41 10 10 4 42 9 10 4 43 7 14 1 44 6 14 1 45 5 14 1 46 1 2 1 12 3 + 49 1 11 4 48 2 12 2 49 2 63 2 6 0 + + + + 8320.0 + + + 0.5078125 + + + 3238.0 + + + 0.341877702285 + + + 0.975603241505 + + + 0.547150054046 0.45363133654 0.101363670202 0.263018131593 + 0.00875272090829 -0.00862028986771 0.0100533476489 0.00566371593276 + 0.0590309536975 + + + 65.0 + + + 2.89230769231 1.859375 + + + 2.89230769231 2.33846153846 2.03076923077 4.30769230769 0.75 + 3.09375 2.28125 1.3125 + + + 128.0 + + + 25.0 113.0 0.250889679715 17.0 0.0 7.0 + + + 0.0234375 0.9921875 + + + 0.389182692308 + + + 0.265625 0.587890625 0.27734375 0.255859375 0.3203125 0.8046875 + 0.119140625 0.0 0.38671875 0.400390625 0.73828125 0.107421875 + 0.419117647059 0.691176470588 0.46875 0.360294117647 + + + 0.0 0.1796875 0.3671875 0.375 0.1875 0.15625 0.2265625 0.359375 0.0 + 0.8828125 0.703125 0.90625 0.375 0.390625 0.2734375 0.1640625 0.0 + 0.71875 0.8671875 0.9609375 0.046875 0.0 0.0 0.0 0.0 0.5625 + 0.6953125 0.6953125 0.3203125 0.109375 0.0 0.0 0.0 0.0 0.015625 + 0.1484375 0.921875 0.5390625 0.0 0.0 0.6171875 0.9296875 0.8046875 + 0.6328125 0.6484375 0.84375 0.328125 0.1015625 0.171875 0.96875 + 0.8125 0.6875 0.3515625 0.8984375 0.375 0.53125 0.0 0.569444444444 + 0.645833333333 0.631944444444 0.138888888889 0.520833333333 + 0.215277777778 0.340277777778 + + + 0.554683047022 0.0893018098226 0.107810436723 0.0317630375054 + 0.326989338565 0.15840253381 0.00977617354898 0.136183772145 + 0.0878415634904 0.0345542409645 0.00801313538542 0.110133988199 + 0.0504819572434 0.0471826369665 + + + + + + + + + 3 1 69 1 67 4 66 5 65 4 67 3 66 4 66 5 31 2 32 6 29 3 32 7 27 6 31 3 + 32 3 32 3 32 3 32 3 32 2 33 3 32 2 33 3 20 7 4 3 34 30 2 4 33 37 33 + 37 33 37 33 37 33 37 33 37 33 37 33 37 33 37 33 37 33 37 33 37 33 37 + 33 36 34 36 34 36 34 36 34 36 34 36 34 36 34 36 36 1 1 32 34 36 34 36 + 33 37 33 37 33 37 33 36 34 36 34 36 34 36 34 36 34 36 34 36 30 1 4 35 + 30 1 4 35 29 2 3 36 29 2 3 36 29 2 4 35 5 18 6 2 4 66 4 20 9 37 4 4 + 26 36 4 3 29 34 4 3 29 34 4 3 29 34 3 4 29 34 2 5 29 34 3 4 28 35 3 4 + 29 36 1 3 30 36 1 4 28 37 1 3 29 37 1 3 28 38 1 3 28 38 33 35 35 35 + 36 34 36 34 36 34 36 34 36 34 36 34 35 35 35 35 35 35 35 35 35 35 35 + 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 34 + 36 34 36 11 4 19 36 5 21 8 36 3 27 4 36 2 29 3 36 2 30 2 36 1 31 2 68 + 2 68 2 68 2 3 0 + + + + 7350.0 + + + 0.666666666667 + + + 3164.0 + + + 0.14791403287 + + + 1.37773882559 + + + 0.492561241503 0.522883642906 0.116333986736 0.18889092061 + 0.100669605973 -0.000519868593725 0.00106072424046 0.00168368132769 + -0.00172798764548 + + + 70.0 + + + 0.328571428571 0.361904761905 + + + 0.742857142857 0.228571428571 0.342857142857 0.0 0.380952380952 + 0.152380952381 0.685714285714 0.228571428571 + + + 105.0 + + + 4.0 19.0 0.175732217573 5.0 2.0 3.0 + + + 0.0 0.990476190476 + + + 0.430476190476 + + + 0.495475113122 0.898190045249 0.278280542986 0.0 0.433760683761 1.0 + 0.241452991453 0.09670781893 0.153846153846 0.162895927602 + 0.920814479638 0.703703703704 0.0 0.00854700854701 0.84188034188 + 0.670781893004 + + + 0.471153846154 0.682692307692 0.721153846154 0.846153846154 + 0.596153846154 0.153846153846 0.0 0.0 0.0 0.846153846154 1.0 1.0 + 0.384615384615 0.0 0.0 0.0 0.0 0.854700854701 1.0 1.0 + 0.350427350427 0.0 0.0 0.0 0.0 0.880341880342 1.0 1.0 + 0.435897435897 0.179487179487 0.222222222222 0.166666666667 + 0.182692307692 0.471153846154 0.403846153846 0.288461538462 + 0.836538461538 1.0 1.0 0.464285714286 0.0 0.0 0.0 0.0 + 0.846153846154 1.0 1.0 0.396825396825 0.0 0.0 0.0 0.0 + 0.837606837607 1.0 1.0 0.444444444444 0.0 0.0 0.0 0.034188034188 + 0.666666666667 0.863247863248 0.777777777778 0.492063492063 + + + 0.493375533455 0.161813529076 0.00146038384218 0.00692875265497 + 0.12249377653 0.372063618843 0.0655713290723 0.0378311577367 + 0.039956834536 0.00570265186683 0.158972603463 0.358708508252 + 0.125630385509 0.0439521562027 + + + + + + + + + 75 1 43 2 44 1 89 3 42 2 88 1 43 3 14 1 6 5 16 3 13 1 8 5 15 3 24 3 5 + 6 3 5 2 4 20 1 4 2 1 1 1 1 4 11 14 11 10 1 4 5 14 11 4 2 3 3 3 5 19 7 + 4 1 3 3 2 6 22 4 8 2 3 6 24 1 9 3 2 6 19 8 1 3 3 3 2 6 19 13 2 3 3 5 + 22 2 1 7 3 1 6 3 26 1 3 1 4 1 35 1 3 1 30 2 1 3 4 1 3 1 4 1 24 3 1 5 + 1 2 3 1 4 2 23 1 3 8 33 1 4 5 35 3 2 4 36 4 1 5 35 10 35 10 35 4 1 5 + 35 2 5 3 42 3 43 3 42 2 44 1 44 1 43 2 25 0 + + + + 1800.0 + + + 1.125 + + + 299.0 + + + 1.07692307692 + + + 1.00265926697 + + + 0.508437214959 0.509561787154 0.279614239686 0.198668589485 + -0.0911499085758 0.0436133535195 -0.0252086180592 -0.0293827515905 + 0.0266270496589 + + + 45.0 + + + 1.02222222222 1.2 + + + 0.266666666667 2.4 1.33333333333 0.0888888888889 0.0 2.6 2.0 0.2 + + + 40.0 + + + 5.0 17.0 0.240384615385 11.0 3.0 5.0 + + + 0.025 0.975 + + + 0.166111111111 + + + 0.0 0.1 0.0454545454545 0.0363636363636 0.0 0.472727272727 + 0.509090909091 0.381818181818 0.118181818182 0.372727272727 0.2 0.0 + 0.0 0.375 0.0666666666667 0.0 + + + 0.0 0.0 0.08 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.233333333333 + 0.0666666666667 0.0 0.166666666667 0.133333333333 0.0 0.0 0.0 0.56 + 0.36 0.24 0.56 0.6 0.0 0.0 0.0 0.3 0.666666666667 0.466666666667 + 0.733333333333 0.6 0.3 0.0 0.0 0.166666666667 0.2 0.433333333333 + 0.0333333333333 0.0 0.0 0.16 0.36 0.64 0.56 0.24 0.08 0.0 0.0 0.0 + 0.0 0.466666666667 0.8 0.2 0.0 0.0 0.0 0.0 0.0 0.0666666666667 + 0.166666666667 0.0666666666667 0.0 0.0 0.0 + + + 0.492670567499 0.09639015046 0.0255902323783 0.0758605261465 + 0.119228110855 0.254491575605 0.0248880220911 0.122377141833 + 0.234970316077 0.0377422891815 0.116331208235 0.204482994526 + 0.0665344727322 0.0143121103697 + + + + + + + + + 1 6 1 5 2 5 2 6 1 6 1 5 2 5 1 6 1 6 1 5 3 3 4 3 4 3 4 3 3 0 + + + + 98.0 + + + 0.5 + + + 67.0 + + + 0.686567164179 + + + 0.860416666667 + + + 0.465174129353 0.442020665901 0.0372186738395 0.21222690291 + -0.0281916326144 0.00166951173134 -0.00422518464314 + -0.00290531877989 0.0191398010639 + + + 7.0 + + + 0.142857142857 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 14.0 + + + 3.0 8.0 0.0454545454545 0.0 4.0 1.0 + + + 0.0 0.928571428571 + + + 0.683673469388 + + + 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.666666666667 0.75 + 0.333333333333 0.0 + + + 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 + 1.0 1.0 0.5 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 + + + 0.394417921644 0.206576978977 0.080111860455 0.0509115290227 + 0.211766026889 0.223303624066 0.137466880843 0.0832021290862 + 0.0786302051994 0.0955666054356 0.0441975487398 0.130169705388 + 0.0893718252332 0.0954490270551 + + + + + + + + + 2 2 29 1 29 1 26 11 2 2 1 2 6 3 3 12 1 15 2 11 2 5 6 4 3 11 1 2 1 3 5 + 4 3 18 3 6 3 11 2 4 4 5 5 3 9 2 5 7 3 4 2 3 4 2 8 3 4 9 3 4 9 1 4 10 + 2 6 4 4 4 11 2 14 3 29 1 28 1 30 1 26 4 27 2 28 2 28 2 28 3 27 3 27 3 + 12 10 5 3 11 11 5 3 11 3 1 6 6 3 16 6 5 3 12 11 4 3 7 15 5 4 6 16 4 3 + 6 25 7 23 3 28 1 28 2 28 3 27 5 25 8 22 4 2 1 23 5 1 1 23 4 1 4 21 8 + 22 5 1 1 23 7 23 8 22 8 22 7 23 6 24 6 25 5 25 5 24 6 24 6 24 6 24 6 + 25 5 25 5 25 5 26 3 27 3 27 3 28 2 23 0 + + + + 1890.0 + + + 0.47619047619 + + + 774.0 + + + 0.427648578811 + + + 0.956591639871 + + + 0.389378953934 0.365716429107 0.0875248054269 0.274656226403 + -0.0528721207404 0.0151185627341 -0.0359394052929 -0.00599489585005 + 0.125257356021 + + + 30.0 + + + 1.96666666667 0.539682539683 + + + 1.86666666667 2.8 1.46666666667 1.46666666667 1.39682539683 + 0.444444444444 0.253968253968 0.0 + + + 63.0 + + + 10.0 35.0 0.195530726257 4.0 3.0 2.0 + + + 0.0 0.984126984127 + + + 0.409523809524 + + + 0.704761904762 0.883928571429 0.607142857143 0.589285714286 + 0.583333333333 0.8125 0.1796875 0.1015625 0.428571428571 + 0.589285714286 0.0 0.0 0.466666666667 0.703125 0.0 0.0 + + + 0.571428571429 0.625 0.833333333333 0.625 0.333333333333 + 0.333333333333 0.25 0.0416666666667 0.678571428571 0.875 1.0 1.0 + 0.6875 0.9375 1.0 0.84375 0.571428571429 0.8125 1.0 0.8125 0.15625 + 0.5625 0.28125 0.125 0.357142857143 0.5625 1.0 0.4375 0.0 0.0 0.0 + 0.0 0.47619047619 0.791666666667 1.0 0.25 0.0 0.0 0.0 0.0 + 0.178571428571 0.34375 1.0 0.125 0.0 0.0 0.0 0.0 0.357142857143 + 0.78125 1.0 0.75 0.0 0.0 0.0 0.0 0.25 0.4375 0.5625 0.5 0.0 0.0 0.0 + 0.0 + + + 0.62402922787 0.0981889657408 0.153006512907 0.0795213932614 + 0.545473506396 0.157279097555 0.0691065300159 0.279817278342 + 0.122377886731 0.0749340592111 0.292063710071 0.129586885108 + 0.086739306191 0.0631647026256 + + + + + + + + + 11 3 18 3 18 2 19 1 20 1 20 2 649 1 19 2 19 2 19 2 20 1 19 2 7 1 11 3 + 6 2 10 2 19 1 20 1 20 2 19 2 19 2 19 2 20 1 20 1 20 2 18 4 17 4 101 4 + 17 4 18 3 165 1 19 4 17 3 18 2 124 3 17 4 17 3 18 2 19 2 19 2 19 2 20 + 1 20 1 20 1 19 4 17 5 16 4 17 4 18 3 18 3 17 5 16 4 17 4 17 4 18 2 19 + 1 1089 2 19 3 19 1 20 1 83 2 19 4 16 5 16 4 19 1 291 2 19 3 18 5 15 6 + 15 6 15 5 17 4 17 2 1 1 17 2 1 1 17 2 19 1 20 1 3313 1 20 1 19 2 62 1 + 1 3 16 5 16 5 16 5 17 2 18 3 17 5 16 6 15 6 15 6 15 6 15 6 15 6 15 6 + 15 3 1 1 16 2 19 2 19 2 19 2 19 3 18 3 81 2 19 3 18 2 19 2 19 2 19 3 + 18 4 17 3 18 3 60 1 20 1 20 1 1 1 18 3 18 1 20 1 1 1 18 4 17 1 1 2 + 101 2 18 4 17 4 17 4 18 1 20 1 20 2 19 1 20 1 19 4 17 4 1 1 15 6 15 6 + 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 6 15 5 16 3 18 3 18 3 18 3 + 186 1 20 1 2 1 17 1 1 3 16 5 16 5 16 5 16 5 16 5 16 5 18 1 41 1 19 4 + 17 3 17 4 17 3 17 5 16 5 16 5 16 5 20 1 58 2 19 2 19 4 17 5 16 5 16 5 + 16 5 16 4 17 4 17 1 1 1 18 1 20 1 20 3 18 1 1 1 18 4 4 2 11 5 3 1 11 + 6 16 5 16 1 1 2 17 5 16 5 16 5 3 1 12 6 2 1 11 6 3 2 10 6 3 1 11 6 15 + 7 14 7 14 6 15 5 16 4 17 5 16 5 16 6 15 7 14 6 1 1 13 6 15 6 15 6 15 + 6 15 6 15 6 16 4 17 4 16 5 16 4 17 3 18 2 19 0 + + + + 10563.0 + + + 0.0417495029821 + + + 753.0 + + + 0.99203187251 + + + 0.549905913978 + + + 0.273837981408 0.685544673894 0.0169165626886 32.2798976911 + -0.651112222275 0.00147644988778 3.46788085496 -0.0667687554404 + -172.938495142 + + + 21.0 + + + 4.7619047619 0.0437375745527 + + + 5.90476190476 7.04761904762 6.09523809524 0.0 0.0159045725646 + 0.0159045725646 0.0159045725646 0.127236580517 + + + 503.0 + + + 7.0 19.0 0.206896551724 32.0 9.0 0.0 + + + 0.0 0.998011928429 + + + 0.0712865663164 + + + 0.0 0.0 0.0714285714286 0.533333333333 0.0224 0.0587301587302 + 0.0873015873016 0.180952380952 0.192 0.0428571428571 0.0 + 0.0031746031746 0.004 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.603174603175 0.0 0.0 0.0 0.0 0.0 + 0.238095238095 0.592592592593 0.783068783069 0.0 0.0 0.0 0.0 0.0 + 0.246031746032 0.428571428571 0.325396825397 0.0 0.0740740740741 + 0.195767195767 0.0 0.0 0.126984126984 0.0634920634921 + 0.037037037037 0.284946236559 0.301587301587 0.142857142857 0.0 0.0 + 0.0 0.0 0.010582010582 0.0564516129032 0.0238095238095 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0161290322581 0.0 0.0 + 0.0 0.0 0.0 0.0 0.0 + + + 0.570668189439 0.192085742354 0.324994985505 0.108338588497 + 0.567226354642 0.362500753592 0.149436128614 0.679469472223 + 0.0148598620153 0.12701013144 0.477094940895 0.491280456827 + 0.25120280471 0.132425369225 + + + + + + + + + 2 2 73 4 21 1 5 9 36 4 21 14 37 4 13 22 37 4 10 26 36 40 36 40 36 40 + 36 40 36 40 36 40 36 40 36 40 36 39 37 39 37 39 37 39 37 39 37 39 37 + 39 37 39 37 39 37 38 37 35 42 34 43 30 1 2 47 1 1 32 45 31 47 29 43 + 33 38 2 1 35 36 40 36 40 38 1 2 35 41 35 48 7 2 19 48 6 3 7 1 11 47 8 + 2 19 36 1 9 30 36 4 1 14 3 18 36 19 3 18 36 18 4 18 37 17 3 19 37 18 + 1 20 31 2 4 18 2 19 16 5 9 3 4 16 6 18 1 3 1 27 4 16 8 48 4 16 19 37 + 4 11 25 36 4 8 27 38 3 6 29 38 4 5 29 38 3 6 29 38 3 6 29 38 4 5 28 + 39 4 5 28 39 4 5 28 39 4 5 27 41 3 4 28 42 3 2 29 41 4 2 29 41 35 41 + 35 40 37 39 37 39 37 39 37 39 37 39 37 39 37 4 1 35 36 3 2 35 36 40 + 36 40 36 40 36 40 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 + 39 37 39 37 39 37 39 37 40 36 14 15 11 36 8 28 4 36 4 73 2 37 0 + + + + 6992.0 + + + 0.826086956522 + + + 3414.0 + + + 0.145284124194 + + + 1.57382394038 + + + 0.499347783636 0.505079279244 0.125611976718 0.180279942926 + 0.102169603659 -0.00095871263994 -0.000920244857588 + 0.00160281133332 -0.00517133479577 + + + 76.0 + + + 0.605263157895 0.5 + + + 1.36842105263 0.631578947368 0.315789473684 0.105263157895 + 0.217391304348 0.95652173913 0.652173913043 0.173913043478 + + + 92.0 + + + 5.0 35.0 0.235087719298 2.0 3.0 3.0 + + + 0.0 0.989130434783 + + + 0.488272311213 + + + 0.794050343249 0.764302059497 0.233409610984 0.0 0.913043478261 + 0.919908466819 0.176201372998 0.116704805492 0.121281464531 + 0.128146453089 1.0 0.867276887872 0.0 0.0572082379863 + 0.901601830664 0.819221967963 + + + 0.666666666667 0.888888888889 0.575757575758 0.583333333333 + 0.707070707071 0.12037037037 0.0 0.0 0.590909090909 1.0 + 0.981818181818 0.883333333333 0.172727272727 0.0 0.0 0.0 + 0.757575757576 1.0 1.0 0.777777777778 0.030303030303 0.0 0.0 0.0 + 0.872727272727 1.0 0.909090909091 0.991666666667 0.290909090909 + 0.35 0.254545454545 0.191666666667 0.282828282828 0.231481481481 + 0.161616161616 0.268518518519 1.0 1.0 0.969696969697 0.833333333333 + 0.0 0.0 0.0 0.0916666666667 1.0 1.0 1.0 0.691666666667 0.0 0.0 0.0 + 0.12037037037 1.0 1.0 1.0 0.675925925926 0.0 0.0 0.0 0.1 + 0.772727272727 0.85 0.9 0.725 + + + 0.374633239516 0.200638797581 0.0152502529096 0.0127825762814 + 0.0410590906632 0.361015970752 0.0843927074837 0.0275593816085 + 0.0341405507513 0.0081503070924 0.105540464479 0.221484795582 + 0.119049094009 0.0575808617749 + + + + + + + + + 15 1 24 2 23 3 22 4 21 6 20 6 20 7 18 8 18 9 17 9 16 10 16 9 7 1 8 11 + 1 1 3 1 9 15 1 1 9 17 8 18 7 18 8 18 8 17 9 17 8 17 9 10 16 9 14 14 2 + 3 7 22 4 21 4 22 4 11 1 10 4 10 1 10 4 22 5 19 7 18 8 18 7 19 8 17 9 + 13 13 6 1 6 14 4 3 5 14 15 11 15 11 12 15 13 14 1 3 8 14 2 2 8 15 2 1 + 7 19 7 18 8 18 8 18 7 20 6 20 6 21 5 21 5 22 4 12 0 + + + + 1404.0 + + + 0.481481481481 + + + 654.0 + + + 0.32874617737 + + + 0.908212560386 + + + 0.460305810398 0.501298251688 0.0423165412884 0.22745560996 + -0.033846861087 0.00063521861573 0.00431724000764 -0.00200406329509 + 0.0100088091772 + + + 26.0 + + + 0.961538461538 0.222222222222 + + + 0.307692307692 0.923076923077 1.69230769231 0.769230769231 + 0.222222222222 0.148148148148 0.296296296296 0.222222222222 + + + 54.0 + + + 3.0 20.0 0.280701754386 3.0 9.0 3.0 + + + 0.0 0.981481481481 + + + 0.465811965812 + + + 0.0 0.238095238095 0.820512820513 0.130952380952 0.318681318681 + 0.948979591837 0.934065934066 0.755102040816 0.717948717949 + 0.869047619048 0.74358974359 0.285714285714 0.032967032967 + 0.540816326531 0.120879120879 0.0 + + + 0.0 0.0 0.0 0.238095238095 0.722222222222 0.571428571429 + 0.047619047619 0.0 0.0 0.0 0.0 0.714285714286 1.0 1.0 0.47619047619 + 0.0 0.0 0.047619047619 0.761904761905 1.0 1.0 0.809523809524 + 0.619047619048 0.285714285714 0.208333333333 0.821428571429 1.0 1.0 + 0.916666666667 1.0 1.0 0.964285714286 0.833333333333 1.0 1.0 + 0.857142857143 1.0 0.714285714286 0.761904761905 0.380952380952 + 0.111111111111 0.857142857143 1.0 0.619047619048 1.0 0.333333333333 + 0.0 0.0 0.0 0.047619047619 1.0 0.666666666667 0.555555555556 0.0 + 0.0 0.0 0.0 0.0714285714286 0.5 0.142857142857 0.0416666666667 0.0 + 0.0 0.0 + + + 0.494938232178 0.168061393461 0.0303306676648 0.0217051686722 + 0.301177531511 0.259931689157 0.118276634948 0.0430552802112 + 0.0215974938904 0.0282737360218 0.115113756097 0.171862098414 + 0.160953591956 0.0995161969239 + + + + + + + + + 28 4 28 6 28 5 27 5 26 6 28 3 30 2 63 2 30 3 29 3 29 4 28 4 29 4 29 3 + 30 3 30 2 30 3 30 2 31 2 30 3 30 2 31 2 31 2 31 1 31 2 32 1 285 1 32 + 1 32 1 32 2 31 2 3 1 27 1 4 1 27 2 2 2 25 9 23 10 23 10 23 10 23 10 + 23 10 23 4 1 5 23 10 22 10 23 10 23 10 23 10 22 11 22 10 23 10 25 2 + 97 2 30 7 24 10 21 13 21 13 20 11 22 11 22 10 22 13 24 8 26 6 26 7 25 + 2 1 5 25 2 2 2 26 7 26 7 25 10 23 9 24 9 25 4 1 3 25 8 25 8 25 8 25 8 + 25 7 27 6 27 6 27 6 27 6 27 6 27 5 28 5 28 5 28 5 29 4 29 3 30 3 31 2 + 30 3 26 0 + + + + 3267.0 + + + 0.333333333333 + + + 519.0 + + + 0.585741811175 + + + 0.604414191419 + + + 0.300517822736 0.584129605599 0.0968317517947 1.18807074123 + -0.288279685744 0.0447513043665 0.373053395779 -0.136031496177 + -0.871324921784 + + + 33.0 + + + 0.878787878788 0.0707070707071 + + + 1.69696969697 1.45454545455 0.0 0.363636363636 0.0 0.121212121212 + 0.040404040404 0.040404040404 + + + 99.0 + + + 5.0 19.0 0.242990654206 6.0 2.0 0.0 + + + 0.0 0.989898989899 + + + 0.15886134068 + + + 0.0 0.1 0.55 0.64 0.0 0.31 0.475 0.125 0.171875 0.02 0.0 0.0 + 0.194444444444 0.0 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0625 0.461538461538 0.541666666667 0.153846153846 + 0.0 0.0 0.0 0.416666666667 0.729166666667 0.923076923077 + 0.979166666667 0.903846153846 0.0 0.0 0.0384615384615 + 0.729166666667 0.666666666667 0.846153846154 0.4375 0.0769230769231 + 0.0 0.0 0.0 0.520833333333 0.3125 0.0769230769231 0.0 0.0 0.0 + 0.0833333333333 0.0769230769231 0.0 0.0 0.0 0.0 0.0 0.0625 + 0.541666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.375 0.0416666666667 0.0 + 0.0 0.0 0.0 0.0 0.0 0.366666666667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.620582387389 0.160575541144 0.209493954278 0.0749188635949 + 0.746423316924 0.266390667552 0.130329075927 0.228246993666 + 0.0965845051755 0.108528311022 0.696708916231 0.411313622858 + 0.163846766511 0.123667926294 + + + + + + + + + 7 2 10 3 10 3 10 3 10 3 10 3 10 2 10 3 10 3 10 3 11 2 102 2 10 3 10 3 + 10 3 10 3 10 2 11 1 25 1 12 2 11 2 11 1 12 1 12 1 38 1 12 1 11 1 12 1 + 25 2 11 2 24 2 11 1 226 1 13 1 11 2 12 1 9 3 5 1 4 3 5 10 5 5 1 2 4 5 + 8 5 11 2 11 2 12 2 11 1 99 4 1 1 7 3 2 1 7 3 1 2 8 1 2 2 7 1 4 1 12 1 + 44 3 9 9 5 9 4 9 4 9 4 9 4 10 3 9 3 10 4 9 4 9 1 1 1 11 2 11 1 11 6 1 + 51 5 5 10 2 12 3 9 4 8 5 8 5 7 5 7 7 5 10 2 11 3 7 9 4 10 3 10 4 6 2 + 1 4 5 8 4 9 3 10 3 10 3 9 5 9 5 8 5 1 1 7 3 1 3 5 4 9 4 10 3 10 2 11 + 2 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 3 10 3 11 2 11 1 12 1 12 + 1 12 2 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 3 10 3 9 4 9 4 9 4 9 3 1 + 1 8 3 7 0 + + + + 2158.0 + + + 0.078313253012 + + + 497.0 + + + 0.931589537223 + + + 1.0872790404 + + + 0.457746478873 0.595731967563 0.0120652500602 3.18899927179 + -0.0582912557386 0.000468899763685 0.0184719662287 + 0.000523448759257 -4.52896484762 + + + 13.0 + + + 5.61538461538 0.0722891566265 + + + 3.07692307692 7.38461538462 7.07692307692 4.61538461538 0.0 + 0.0722891566265 0.120481927711 0.0722891566265 + + + 166.0 + + + 2.0 16.0 0.235714285714 18.0 16.0 1.0 + + + 0.0 0.993975903614 + + + 0.23030583874 + + + 0.0 0.0 0.325203252033 0.0793650793651 0.186991869919 + 0.126984126984 0.739837398374 0.761904761905 0.325203252033 + 0.18253968254 0.642276422764 0.0873015873016 0.0 0.113095238095 + 0.292682926829 0.00595238095238 + + + 0.0 0.0 0.0 0.0 0.0 0.0952380952381 0.0 0.0 0.0 0.0 0.0 0.0 0.425 + 0.5 0.238095238095 0.0 0.0 0.0 0.0 0.0952380952381 0.65 + 0.666666666667 1.0 0.333333333333 0.1 0.452380952381 + 0.0714285714286 0.261904761905 0.725 0.833333333333 0.690476190476 + 0.928571428571 0.625 0.214285714286 0.0 0.309523809524 0.625 + 0.690476190476 0.0714285714286 0.142857142857 0.3 0.0 0.0 + 0.47619047619 0.7 0.52380952381 0.0952380952381 0.0 0.0 0.0 + 0.0238095238095 0.261904761905 0.675 0.380952380952 0.0238095238095 + 0.0 0.0 0.0 0.0238095238095 0.142857142857 0.1 0.0238095238095 0.0 + 0.0 + + + 0.646854041605 0.152979529335 0.195670883505 0.0652580131403 + 0.851234996541 0.232095173909 0.132906918752 0.205762170984 + 0.0926475795152 0.096706226777 0.904535110786 0.369394347432 + 0.148109879905 0.13015818239 + + + + + + + + + 217 1 66 15 2 2 6 5 5 1 35 33 1 3 34 37 34 37 34 37 34 37 34 37 35 36 + 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 + 36 35 36 35 1 1 1 2 31 35 1 1 1 4 25 39 35 36 36 36 4 1 30 36 35 36 + 35 36 35 36 35 36 35 36 35 36 35 36 35 36 35 37 34 37 34 37 34 37 34 + 37 34 37 34 37 34 37 35 30 1 5 24 1 5 1 5 2 15 12 1 5 2 30 29 2 3 6 1 + 30 34 6 1 30 34 6 1 30 34 38 33 38 33 38 33 38 33 38 33 38 33 37 34 + 37 34 36 35 36 37 34 37 34 36 35 36 36 35 36 34 37 34 37 3 2 29 38 3 + 2 11 3 14 38 17 1 15 38 3 1 29 38 2 2 29 38 33 38 33 38 33 38 33 38 + 33 38 33 38 33 38 33 38 33 38 32 39 32 39 32 39 33 38 33 38 33 38 33 + 38 33 38 5 2 3 4 19 39 1 19 11 67 2 5 0 + + + + 6603.0 + + + 0.763440860215 + + + 2996.0 + + + 0.129506008011 + + + 1.63463626493 + + + 0.49742513828 0.504926859 0.12578973458 0.209623117644 + 0.122037635222 -0.000151899310947 0.00221986625629 + 0.000856983529986 0.00359316859408 + + + 71.0 + + + 0.295774647887 0.301075268817 + + + 0.338028169014 0.056338028169 0.450704225352 0.169014084507 + 0.172043010753 0.215053763441 0.47311827957 0.344086021505 + + + 93.0 + + + 6.0 40.0 0.15444015444 3.0 1.0 3.0 + + + 0.0322580645161 0.989247311828 + + + 0.453733151598 + + + 0.79283887468 0.856777493606 0.0843989769821 0.0 0.797101449275 + 0.995169082126 0.0942028985507 0.0 0.0893719806763 0.1038647343 + 0.93961352657 0.840277777778 0.0 0.0 0.835748792271 0.831018518519 + + + 0.647727272727 0.875 0.715909090909 0.677083333333 0.15625 0.0 0.0 + 0.0 0.616161616162 1.0 1.0 1.0 0.166666666667 0.0 0.0 0.0 + 0.575757575758 1.0 1.0 1.0 0.166666666667 0.0 0.0 0.0 + 0.575757575758 1.0 0.979797979798 1.0 0.148148148148 + 0.0505050505051 0.0 0.0 0.131313131313 0.222222222222 + 0.191919191919 0.222222222222 0.87037037037 0.979797979798 + 0.842592592593 0.731481481481 0.0 0.0 0.0 0.0 0.916666666667 1.0 + 0.990740740741 0.796296296296 0.0 0.0 0.0 0.0 0.861111111111 1.0 + 0.972222222222 0.87962962963 0.0 0.0 0.0 0.0 0.648148148148 + 0.848484848485 0.777777777778 0.694444444444 + + + 0.331946615123 0.239665856755 0.0179765114022 0.00841069246653 + 0.0450788163839 0.380724589663 0.126197440046 0.0208113641763 + 0.0134319684025 0.0129630966799 0.0667577119007 0.230496002254 + 0.149525372238 0.0818982648323 + + + + + + + + + 22 3 23 4 21 5 21 5 20 6 21 4 22 3 22 4 22 4 22 4 22 4 22 3 23 3 21 5 + 21 5 20 6 21 5 20 6 20 6 20 6 20 6 20 6 20 6 20 6 20 5 21 5 20 6 20 5 + 21 5 21 5 21 4 22 5 20 6 20 6 20 6 21 4 21 5 21 5 21 5 21 5 21 5 21 5 + 20 5 21 6 20 6 20 5 20 7 20 5 21 5 21 5 21 5 20 6 20 6 20 6 20 6 20 6 + 20 5 21 5 21 5 21 5 20 6 20 5 21 5 21 5 21 5 21 5 21 5 21 5 20 5 22 4 + 22 4 22 3 22 5 21 5 21 5 21 5 21 5 21 5 21 4 22 4 22 4 21 4 22 4 22 4 + 21 5 21 5 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 3 23 3 23 4 21 4 22 4 + 21 5 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 22 4 + 22 3 23 4 22 4 22 3 23 3 23 3 23 3 24 2 24 2 24 2 24 2 24 2 23 3 23 3 + 23 3 23 3 23 3 23 3 23 1 1 2 22 3 23 3 23 3 23 3 23 3 23 3 23 3 23 3 + 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 2 24 3 + 23 2 24 2 23 3 24 2 24 2 24 2 24 2 24 2 24 3 24 2 24 2 24 2 24 2 24 3 + 23 4 22 4 21 5 21 5 22 4 22 3 23 3 23 3 23 2 24 2 24 2 24 2 25 1 25 1 + 25 1 25 1 25 1 25 1 13 0 + + + + 4810.0 + + + 0.140540540541 + + + 713.0 + + + 0.621318373072 + + + 0.891521998714 + + + 0.574417952314 0.419149033478 0.0225709369698 3.44911105683 + -0.229810864736 0.00205988048369 0.0606297885285 -0.0169282911272 + 2.54218917497 + + + 26.0 + + + 0.807692307692 0.00540540540541 + + + 0.0 0.923076923077 1.07692307692 0.615384615385 0.0 0.0 + 0.0216216216216 0.0 + + + 185.0 + + + 0.0 4.0 0.20320855615 0.0 5.0 1.0 + + + 0.0 0.994594594595 + + + 0.148232848233 + + + 0.0 0.0 0.0 0.0 0.0 0.204968944099 0.472049689441 0.285714285714 + 0.36231884058 0.561594202899 0.00724637681159 0.0496453900709 + 0.400621118012 0.00310559006211 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.0 0.0144927536232 0.0 0.0 0.0 0.0 0.0 0.108695652174 + 0.608695652174 0.945652173913 0.695652173913 0.532608695652 0.46875 + 0.0 0.246376811594 0.942028985507 0.623188405797 0.0289855072464 + 0.0 0.0 0.194444444444 0.246376811594 0.95652173913 0.68115942029 + 0.0 0.0 0.0 0.0 0.0 0.695652173913 0.521739130435 0.0144927536232 + 0.0 0.0 0.0 0.0 0.0 0.478260869565 0.0108695652174 0.0 0.0 0.0 0.0 + 0.0 0.0 + + + 0.549410637661 0.201915374709 0.145940651325 0.0500558785969 + 0.464890368215 0.41108018727 0.148515457839 0.155465673225 + 0.0699514842492 0.0743436371382 0.414277156379 0.462439376818 + 0.314957162634 0.119799397364 + + + + + + + + + 20 1 63 2 62 2 62 3 61 2 77 2 4 2 55 3 4 2 56 2 4 2 43 1 18 2 15 1 26 + 2 18 2 14 2 26 2 18 1 42 3 18 1 42 3 18 2 41 2 19 3 25 2 13 3 18 2 26 + 5 9 4 18 3 22 1 1 5 10 4 18 3 21 2 1 4 12 3 18 4 20 1 2 4 7 2 3 3 13 + 3 2 7 20 4 6 9 13 3 1 9 20 2 7 3 3 3 13 3 1 12 17 2 13 3 14 1 2 12 4 + 2 7 2 2 2 13 3 14 1 2 19 6 2 1 3 13 3 14 1 2 19 6 6 9 1 2 4 14 1 2 22 + 2 9 6 8 24 12 2 2 1 9 3 11 24 5 3 3 4 12 2 11 12 3 10 10 4 12 2 11 12 + 3 10 11 4 11 2 11 12 3 9 12 3 25 12 4 8 11 5 24 12 4 2 2 4 7 1 3 6 23 + 13 3 1 4 3 7 1 3 6 10 1 7 1 4 13 8 2 8 1 4 5 10 1 12 13 4 1 3 2 8 1 4 + 5 9 3 5 2 4 13 8 1 16 8 1 30 8 1 17 7 2 13 2 14 7 2 17 2 3 1 3 12 3 + 14 4 1 2 3 12 2 1 1 1 1 3 2 2 7 3 1 5 13 2 8 12 8 1 2 1 7 10 13 2 9 7 + 2 1 8 2 11 3 1 5 13 3 8 6 3 1 7 4 1 1 12 5 13 3 8 6 3 1 7 7 12 4 13 3 + 9 4 12 11 7 5 13 3 2 2 6 3 12 12 6 5 14 2 3 1 14 1 9 5 11 4 15 1 17 3 + 6 2 1 3 14 1 33 4 6 6 48 5 4 7 13 3 14 2 12 1 3 5 4 5 10 2 2 4 13 3 + 10 3 2 10 1 5 9 2 2 4 12 4 8 17 1 6 8 2 1 5 12 4 8 17 1 6 7 9 12 3 10 + 16 1 8 3 11 12 3 10 16 1 5 6 11 12 3 11 15 1 5 5 12 12 3 12 14 1 5 5 + 8 1 3 12 3 13 13 1 2 9 6 2 3 12 3 13 13 1 1 11 5 3 2 11 1 1 2 15 11 + 21 2 11 1 1 2 15 10 22 2 13 2 16 9 22 2 13 2 17 8 22 3 12 2 17 8 22 3 + 13 1 18 7 23 1 11 4 47 2 11 4 47 2 11 4 47 2 10 7 18 5 21 7 6 8 16 6 + 21 6 7 8 18 4 21 5 9 6 46 3 9 7 58 7 56 8 3 2 51 15 49 15 35 2 12 16 + 34 2 12 17 47 19 32 1 12 20 31 1 12 22 29 1 12 23 28 1 12 24 27 1 12 + 25 25 2 12 26 24 2 12 27 23 2 11 29 22 2 11 29 23 1 11 29 23 1 11 29 + 35 29 35 29 35 19 1 9 35 25 39 26 38 27 37 28 36 28 37 28 37 27 40 13 + 2 9 44 9 3 8 46 8 1 8 48 6 2 8 48 2 2 1 3 9 47 1 8 8 47 1 8 6 1 1 46 + 3 2 1 3 9 46 6 3 9 46 7 2 9 36 7 1 1 1 6 3 9 36 9 1 6 3 9 37 16 1 9 + 42 4 1 7 2 8 44 11 1 8 45 19 46 19 47 17 48 16 49 15 50 14 52 12 54 9 + 56 9 56 8 57 7 58 5 125 4 60 4 60 4 2 0 + + + + 8448.0 + + + 0.484848484848 + + + 2531.0 + + + 0.4855788226 + + + 1.29245826137 + + + 0.616137670662 0.491993931735 0.12538055358 0.422584640123 + 0.107298398967 -0.0320964655661 0.0188012964978 -0.0302885527771 + 0.0424339247106 + + + 64.0 + + + 3.09375 1.84848484848 + + + 2.5 2.0 3.375 4.5 2.39393939394 3.57575757576 0.757575757576 + 0.666666666667 + + + 132.0 + + + 13.0 73.0 0.256880733945 35.0 1.0 8.0 + + + 0.0 0.992424242424 + + + 0.299597537879 + + + 0.3125 0.386363636364 0.0 0.0 0.231060606061 0.267045454545 + 0.0871212121212 0.0 0.257575757576 0.257575757576 0.774621212121 + 0.255681818182 0.261363636364 0.592803030303 0.477272727273 + 0.632575757576 + + + 0.0390625 0.757352941176 0.671875 0.397058823529 0.0 0.0 0.0 0.0 + 0.015625 0.404411764706 0.2578125 0.227941176471 0.0 0.0 0.0 0.0 + 0.234375 0.676470588235 0.515625 0.551470588235 0.203125 + 0.0955882352941 0.0 0.0 0.0 0.0 0.0 0.0 0.0546875 0.0 0.0 0.0 + 0.0546875 0.242647058824 0.3359375 0.352941176471 0.734375 + 0.838235294118 0.2421875 0.0 0.171875 0.544117647059 0.3359375 + 0.0147058823529 0.5078125 1.0 0.625 0.176470588235 0.0 + 0.676470588235 0.6171875 0.529411764706 0.203125 0.992647058824 + 0.671875 0.522058823529 0.0234375 0.316176470588 0.3359375 0.875 + 0.1171875 0.558823529412 0.7109375 0.632352941176 + + + 0.427257330706 0.176502958444 0.0246263909612 0.0729380778138 + 0.0621212773312 0.31006619569 0.0795025972499 0.0977766312643 + 0.161862832891 0.0804390987338 0.100847132219 0.173613038971 + 0.108217371433 0.0505338462299 + + + + + + + + + 2 2 10 3 8 4 9 2 10 2 10 2 10 2 10 2 9 3 9 5 7 3 1 1 7 3 9 3 9 3 9 5 + 7 5 8 2 9 3 9 3 9 3 9 3 1 1 8 3 9 2 10 2 9 3 9 3 9 3 9 3 9 3 9 3 9 4 + 8 4 9 2 9 4 8 4 8 4 8 5 6 6 7 4 8 4 8 4 8 4 7 5 7 5 7 5 7 5 8 5 6 5 8 + 4 8 4 8 4 8 4 8 4 8 4 8 5 7 4 1 1 6 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 + 9 4 8 4 7 5 7 5 7 5 7 4 8 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 + 5 7 5 7 5 7 5 7 5 7 5 7 5 1 1 5 6 6 6 6 6 7 5 7 4 8 4 8 5 7 4 8 5 6 7 + 5 5 1 1 5 6 6 6 7 6 6 5 6 6 6 6 6 6 6 6 7 5 7 5 6 6 7 5 7 5 7 5 7 5 7 + 5 7 5 7 5 8 1 1 2 8 4 8 4 7 5 7 5 7 3 1 1 8 2 1 2 10 2 10 1 11 2 11 1 + 11 1 10 2 10 2 10 2 8 1 1 1 8 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 + 6 6 6 7 5 7 5 7 5 7 4 8 4 8 4 8 4 8 5 7 5 8 4 7 5 8 4 8 4 7 6 6 6 7 5 + 7 5 7 5 7 5 7 5 7 4 8 4 9 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 8 4 8 5 7 1 3 + 1 + + + + 2148.0 + + + 0.0670391061453 + + + 773.0 + + + 0.602846054334 + + + 1.04814843016 + + + 0.369516641185 0.526861636409 0.00636080566357 3.13309320844 + 0.100651067038 0.000277508474025 0.0577088175537 0.00484958839011 + -0.290811881018 + + + 12.0 + + + 3.41666666667 0.0558659217877 + + + 3.66666666667 6.0 3.66666666667 0.333333333333 0.0446927374302 + 0.0223463687151 0.0893854748603 0.0 + + + 179.0 + + + 6.0 29.0 0.210784313725 4.0 23.0 1.0 + + + 0.0 0.994413407821 + + + 0.359869646182 + + + 0.598484848485 0.674074074074 0.325925925926 0.0 0.530303030303 + 0.851851851852 0.785185185185 0.518518518519 0.0 0.0148148148148 + 0.37037037037 0.866666666667 0.0 0.0 0.0 0.214814814815 + + + 0.0 0.136363636364 0.130434782609 0.0 0.0 0.0 0.0 0.0 + 0.795454545455 0.931818181818 0.95652173913 1.0 0.772727272727 + 0.217391304348 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.608695652174 + 0.545454545455 0.0 0.25 0.340909090909 0.586956521739 + 0.977272727273 1.0 0.565217391304 0.977272727273 0.326086956522 0.0 + 0.0 0.0434782608696 0.0 0.818181818182 0.913043478261 1.0 + 0.869565217391 0.0 0.0 0.0 0.0227272727273 0.0681818181818 + 0.173913043478 0.681818181818 0.978260869565 0.0 0.0 0.0 0.0 0.0 + 0.0 0.0 0.739130434783 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.260869565217 + + + 0.438574356602 0.257663813043 0.0281663038192 0.0112906110434 + 0.34671847125 0.397996733781 0.22185244999 0.0727827277194 + 0.062857616936 0.0268935089317 0.448019449781 0.304479461835 + 0.384700446513 0.193753033049 + + + + + + + + + 88 2 186 2 186 2 185 5 182 6 181 7 181 5 1 1 183 3 185 3 185 3 185 3 + 155 1 29 3 155 9 21 3 155 17 2 6 5 2 156 29 1 3 156 32 156 32 156 32 + 156 32 156 32 156 32 156 32 156 32 156 32 156 32 157 31 157 31 157 31 + 157 31 157 31 157 31 22 1 134 32 20 3 133 32 20 4 132 32 19 5 132 11 + 1 20 19 7 130 32 19 8 130 5 7 19 20 8 129 3 10 18 20 9 128 1 11 19 20 + 10 138 1 1 18 20 10 98 8 35 17 20 12 93 22 4 1 4 1 8 2 3 18 19 14 92 + 22 2 4 1 7 3 11 2 10 19 14 93 36 4 24 17 14 94 17 1 17 4 1 3 20 16 15 + 94 17 1 9 2 6 8 20 16 15 94 17 1 8 4 5 9 6 3 10 16 15 94 17 2 1 2 5 3 + 5 2 3 3 8 1 11 16 15 4 3 87 18 1 44 16 15 4 4 86 63 16 15 4 7 83 63 + 15 17 2 8 83 35 3 25 17 24 1 1 83 34 4 24 14 1 1 24 86 33 23 7 13 28 + 2 2 80 33 26 4 14 31 80 33 27 3 13 33 79 33 27 3 13 34 78 34 26 3 13 + 35 77 34 26 3 13 36 76 34 26 3 13 37 75 35 26 3 11 38 73 39 23 5 9 41 + 13 2 57 36 25 4 1 1 8 40 14 3 57 36 24 5 9 40 13 5 57 4 4 1 5 21 25 4 + 9 39 14 5 56 7 9 20 25 4 9 39 14 5 56 36 25 3 10 6 3 15 1 13 13 7 55 + 37 25 5 9 5 7 11 1 13 14 6 57 6 1 6 1 22 24 4 8 7 11 2 2 16 15 7 56 + 11 4 5 2 13 25 3 10 8 2 1 11 15 15 10 53 12 3 3 4 13 25 3 11 7 1 4 9 + 14 15 12 52 17 3 15 26 3 11 14 6 14 15 12 34 4 3 29 1 8 1 7 26 3 12 + 13 6 14 15 13 24 1 1 42 3 15 26 3 13 4 1 7 6 2 1 7 19 14 19 23 1 19 2 + 2 7 2 3 7 26 3 14 2 6 5 4 3 1 5 19 16 18 29 3 3 10 5 1 1 3 11 26 3 32 + 1 2 7 2 1 14 17 17 36 9 21 26 3 35 1 1 8 14 19 15 37 2 3 4 20 26 3 37 + 3 19 19 15 39 1 2 4 20 26 3 37 3 18 22 13 67 25 4 36 7 14 23 12 43 2 + 22 25 4 36 7 14 24 11 37 4 1 5 20 25 4 34 8 14 26 10 36 17 1 1 7 1 4 + 25 4 35 7 14 27 9 36 19 12 25 4 35 5 16 28 8 37 19 3 2 7 24 4 35 5 16 + 29 7 36 21 1 4 1 1 4 25 2 35 6 15 31 7 35 27 5 25 3 33 7 15 8 4 15 3 + 1 7 36 25 1 1 4 25 3 33 7 15 1 1 22 14 36 28 2 26 3 33 3 2 1 15 26 6 + 2 5 36 28 3 25 2 34 3 2 1 15 26 7 2 4 36 28 3 25 1 35 4 1 2 14 26 6 3 + 4 36 29 2 25 1 36 6 14 26 4 6 3 36 29 1 26 1 40 1 15 27 3 7 2 36 56 1 + 56 27 9 2 1 7 2 28 55 1 57 27 7 3 1 6 3 28 113 28 6 3 1 37 114 27 10 + 37 115 26 2 2 5 38 115 2 4 18 4 3 5 37 123 15 5 3 5 37 114 1 7 15 6 5 + 3 37 110 7 2 1 2 15 2 8 5 36 110 27 1 9 5 6 3 28 109 17 3 17 5 37 110 + 14 5 6 1 10 5 8 1 28 113 1 6 4 6 5 1 10 5 8 1 14 8 6 113 12 5 16 5 37 + 115 30 6 37 114 31 6 37 115 30 6 37 116 29 6 38 116 2 5 20 7 38 123 + 20 7 5 18 1 3 11 127 16 7 2 29 7 129 5 1 8 8 1 32 4 129 14 8 1 33 3 + 129 13 44 2 122 3 3 14 169 19 170 19 167 22 171 16 174 14 174 14 174 + 15 175 14 175 9 180 6 184 4 185 3 185 2 187 1 10 0 + + + + 24816.0 + + + 1.42424242424 + + + 6575.0 + + + 0.237566539924 + + + 0.976670399403 + + + 0.451539415628 0.534598438452 0.456903927949 0.114129279874 + 0.0315773536361 0.0964201209581 0.0073993063879 0.104810379024 + -0.00693188666916 + + + 188.0 + + + 1.29255319149 2.45454545455 + + + 1.29787234043 1.55319148936 0.957446808511 1.36170212766 + 0.272727272727 2.90909090909 5.27272727273 1.36363636364 + + + 132.0 + + + 35.0 184.0 0.214358974359 25.0 5.0 14.0 + + + 0.0 0.992424242424 + + + 0.264950032237 + + + 0.0 0.27530625403 0.712443584784 0.350096711799 0.441650548034 + 0.595744680851 0.254029658285 0.0 0.00515796260477 0.482914248872 + 0.232108317215 0.0 0.0 0.0251450676983 0.470664087685 + 0.393939393939 + + + 0.0 0.0 0.0 0.0 0.567934782609 0.95652173913 0.8125 + 0.00511508951407 0.0 0.0 0.393229166667 0.676470588235 + 0.736979166667 0.585784313725 0.606770833333 0.0220588235294 + 0.130434782609 0.501278772379 0.453804347826 0.800511508951 + 0.760869565217 0.156010230179 0.0 0.0 0.2578125 0.838235294118 + 0.8046875 0.330882352941 0.0963541666667 0.0392156862745 0.0 0.0 + 0.0 0.0204603580563 0.317934782609 0.498721227621 0.244565217391 + 0.0358056265985 0.0 0.0 0.0 0.0 0.197916666667 0.884803921569 + 0.515625 0.142156862745 0.0 0.0 0.0 0.0 0.0 0.0997442455243 + 0.410326086957 0.537084398977 0.345108695652 0.0127877237852 0.0 + 0.0 0.0 0.0 0.255208333333 0.664215686275 0.734375 0.482843137255 + + + 0.411452815271 0.165862190063 0.191727123514 0.147729879246 + 0.0890050683797 0.270214671405 0.0656370014404 0.308985002264 + 0.209921966235 0.119309803768 0.0634609274311 0.119403837469 + 0.145646802853 0.0756785286356 + + + + + + + + + 2 1 127 1 127 1 127 1 127 1 127 1 127 1 127 2 126 2 126 2 126 4 7 4 + 21 1 91 33 1 3 91 37 91 37 91 37 91 37 91 37 91 37 91 37 91 37 91 37 + 91 37 91 37 91 37 91 37 91 37 92 36 91 37 90 38 89 39 16 3 71 41 12 6 + 70 40 12 6 69 40 13 5 71 38 14 9 67 38 14 10 66 39 12 12 66 37 13 13 + 65 36 14 13 65 36 14 14 64 36 13 18 61 24 1 5 4 2 13 19 60 30 4 2 13 + 20 59 36 13 19 1 1 58 36 13 22 57 36 13 22 57 36 13 24 55 36 12 27 54 + 35 12 28 53 35 12 29 52 35 12 30 51 35 12 31 50 35 12 31 50 1 30 4 11 + 33 81 3 11 34 80 3 11 34 81 2 11 34 81 2 11 34 81 1 12 27 3 4 93 27 4 + 4 94 27 3 4 95 33 97 30 14 1 84 2 2 21 1 3 14 4 84 26 13 6 83 26 14 6 + 85 14 1 8 14 6 87 11 7 3 14 8 88 7 9 2 14 10 89 2 25 12 89 2 25 12 1 + 1 86 4 3 1 6 1 13 14 81 11 1 2 4 2 12 15 80 9 2 4 3 3 12 15 77 12 2 5 + 2 3 12 15 76 13 2 9 13 15 77 23 12 11 2 3 79 11 3 7 12 15 79 22 12 15 + 4 5 70 22 12 15 2 8 71 20 11 27 71 19 11 28 71 17 12 29 71 16 12 30 + 71 15 12 31 71 14 12 32 72 12 11 34 72 11 11 34 74 1 3 5 11 35 73 1 1 + 6 12 36 75 5 12 36 74 6 12 36 74 6 11 37 75 4 12 38 75 3 12 38 76 2 + 12 38 89 6 1 32 89 6 2 30 90 6 9 23 90 6 10 21 91 2 1 12 1 21 91 16 4 + 16 92 15 6 15 93 13 7 15 96 11 6 15 99 3 2 5 4 14 100 2 3 5 5 1 3 5 3 + 1 106 5 4 1 2 7 2 1 109 1 9 6 1 2 120 7 121 7 121 7 120 8 120 8 121 2 + 1 4 125 2 122 2 3 1 122 4 1 1 121 5 1 1 121 5 1 1 120 8 120 8 120 7 + 121 7 121 7 121 6 122 6 123 5 125 3 8 0 + + + + 16384.0 + + + 1.0 + + + 3945.0 + + + 0.209632446134 + + + 1.8537158984 + + + 0.481652245941 0.454748859815 0.362775887746 0.204828914974 + 0.240892591223 0.0139321102866 0.0231560268192 0.0230162634734 + 0.0209103470542 + + + 128.0 + + + 0.6171875 0.9453125 + + + 0.09375 0.46875 1.0 0.90625 0.1875 1.21875 1.59375 0.78125 + + + 128.0 + + + 13.0 76.0 0.228187919463 11.0 6.0 1.0 + + + 0.0 0.9921875 + + + 0.240783691406 + + + 0.638671875 0.56640625 0.0 0.0 0.1640625 0.5234375 0.0556640625 0.0 + 0.0 0.3828125 0.44140625 0.0458984375 0.0 0.0107421875 0.6552734375 + 0.3681640625 + + + 0.3515625 0.88671875 0.828125 0.19140625 0.0 0.0 0.0 0.0 0.31640625 + 1.0 0.99609375 0.25 0.0 0.0 0.0 0.0 0.13671875 0.4609375 0.43359375 + 0.16796875 0.0 0.0 0.0 0.0 0.0 0.05859375 0.6953125 0.796875 + 0.2109375 0.01171875 0.0 0.0 0.0 0.0 0.3828125 0.95703125 + 0.70703125 0.54296875 0.0 0.0 0.0 0.0 0.0 0.19140625 0.19921875 + 0.31640625 0.18359375 0.0 0.0 0.0 0.0 0.04296875 0.71484375 1.0 + 0.43359375 0.0 0.0 0.0 0.0 0.0 0.0703125 0.8359375 0.67578125 + 0.36328125 + + + 0.439871720616 0.230038662586 0.0719175914716 0.0306466096353 + 0.134949495066 0.45641673301 0.14111424402 0.0483491760218 + 0.0307673305923 0.0397332034155 0.100935596933 0.299949279949 + 0.341624057772 0.0828630066494 + + + + + + + + + 39 1 33 3 48 1 21 1 3 10 11 11 1 7 2 12 37 6 2 4 1 6 3 17 11 11 3 4 3 + 12 37 7 1 11 2 18 12 11 1 20 36 18 4 18 7 1 4 10 1 21 36 19 3 18 6 3 + 3 10 1 21 36 18 4 18 6 3 3 8 1 1 1 21 36 18 4 18 6 3 3 10 1 21 36 20 + 1 19 7 3 1 33 36 40 7 23 2 12 36 40 7 37 37 39 7 37 37 3 3 33 7 36 37 + 6 1 33 7 36 38 39 7 36 38 39 7 36 38 39 7 36 38 39 6 37 38 39 7 36 38 + 39 7 37 37 39 6 38 37 39 6 38 36 41 5 1 1 1 3 31 38 41 3 5 3 30 38 41 + 3 6 2 32 35 41 5 9 1 28 38 39 5 13 1 25 37 40 5 13 1 24 37 39 6 5 1 2 + 1 4 3 22 37 39 6 37 38 39 6 36 39 39 6 36 39 39 6 20 3 2 5 6 39 29 3 + 7 6 9 1 6 3 17 39 29 3 7 6 7 5 4 2 19 38 29 3 2 2 3 6 4 1 2 3 7 1 18 + 35 1 4 8 1 19 3 2 3 2 7 2 3 1 3 6 3 17 34 2 4 26 5 3 2 2 7 3 2 2 2 5 + 5 16 34 2 4 27 4 7 7 3 1 12 1 19 32 3 4 38 7 60 7 4 4 38 7 16 1 54 4 + 38 7 14 4 53 4 38 7 15 3 53 5 37 7 14 3 33 1 20 5 26 6 5 7 5 27 39 5 + 3 5 8 17 5 7 3 28 39 5 2 32 4 7 3 29 38 5 2 33 3 7 2 30 17 1 7 5 8 39 + 2 9 2 30 38 82 38 82 38 82 38 82 38 82 38 82 39 81 38 82 38 82 16 2 + 20 82 16 2 20 82 16 2 20 83 1 3 1 2 22 1 2 92 1 2 17 95 4 4 22 1 6 84 + 3 7 19 1 7 91 1 1 27 82 6 1 31 82 38 82 38 82 38 82 38 82 3 8 5 1 21 + 82 38 82 39 81 39 81 39 81 39 81 39 81 38 82 7 1 30 82 16 2 20 82 17 + 1 20 82 17 2 19 82 14 3 18 85 2 118 1 119 4 35 0 + + + + 10320.0 + + + 1.39534883721 + + + 4728.0 + + + 0.171954314721 + + + 1.68913443831 + + + 0.513262665472 0.415131382502 0.255568181709 0.101664643553 + 0.102382202565 -0.0139633662555 0.0198927943198 0.0163386977361 + 0.0135726048779 + + + 120.0 + + + 1.06666666667 1.83720930233 + + + 0.366666666667 1.0 1.86666666667 1.03333333333 2.37209302326 + 3.02325581395 1.44186046512 0.418604651163 + + + 86.0 + + + 28.0 120.0 0.202435312024 11.0 5.0 11.0 + + + 0.0 0.988372093023 + + + 0.458139534884 + + + 0.844444444444 0.930303030303 0.106349206349 0.0 0.696825396825 + 0.712121212121 0.0904761904762 0.0 0.728571428571 0.775757575758 + 0.295238095238 0.243939393939 0.0 0.177272727273 0.909523809524 + 0.819696969697 + + + 0.766666666667 0.921212121212 0.909090909091 0.818181818182 + 0.213333333333 0.0 0.0 0.0 0.666666666667 1.0 1.0 0.993939393939 + 0.233333333333 0.0 0.0 0.0 0.606666666667 0.666666666667 + 0.745454545455 0.569696969697 0.2 0.0 0.0 0.0 0.62 0.878787878788 + 0.836363636364 0.69696969697 0.18 0.0 0.0 0.0 0.8 1.0 + 0.975757575758 0.824242424242 0.08 0.0 0.0 0.0 0.546666666667 + 0.557575757576 0.6 0.70303030303 0.653333333333 0.460606060606 + 0.50303030303 0.472727272727 0.0 0.0 0.0 0.363636363636 + 0.986666666667 0.951515151515 0.975757575758 0.678787878788 0.0 0.0 + 0.0 0.345454545455 0.9 0.806060606061 0.951515151515 0.672727272727 + + + 0.361631032339 0.212712378237 0.0944533493849 0.0843836034691 + 0.0282611978463 0.307739152219 0.115477221234 0.197653896936 + 0.146445536714 0.0666685053986 0.0554098027826 0.0349535952808 + 0.205779675367 0.0518522797592 + + + + + + + + + 2 2 29 3 30 4 28 6 25 8 25 7 25 7 25 6 26 7 25 9 22 10 22 9 24 9 23 9 + 22 11 2 3 16 17 14 16 1 2 14 19 14 19 12 21 11 22 9 23 9 24 9 23 9 25 + 7 25 7 26 6 26 6 26 5 27 6 4 2 4 1 16 5 1 5 2 4 11 9 2 4 3 1 1 1 11 9 + 5 1 5 2 6 1 3 9 5 1 3 4 3 4 2 10 9 5 3 3 3 9 9 5 4 2 3 10 1 1 6 5 4 3 + 2 10 8 5 4 4 1 10 9 4 4 2 2 11 4 1 4 4 5 1 3 10 4 1 5 1 7 1 3 10 4 1 + 19 8 9 1 16 6 4 1 3 3 7 1 5 8 3 2 3 4 10 10 9 2 13 8 25 7 3 1 6 2 14 + 6 3 2 20 7 3 3 19 7 3 4 18 7 3 9 13 7 3 10 12 7 4 9 12 7 4 9 12 7 4 9 + 12 7 4 7 3 1 11 6 6 6 14 6 7 6 14 5 7 7 13 5 7 8 11 6 8 9 7 9 7 10 8 + 6 8 10 3 4 1 6 10 22 8 23 11 21 12 6 1 13 13 4 1 14 18 14 15 1 1 1 1 + 14 6 1 10 14 14 2 5 12 11 4 6 10 20 13 23 8 25 8 27 5 11 1 16 3 29 3 + 30 3 29 3 28 3 29 3 28 5 28 4 18 4 6 3 17 15 26 6 27 5 28 5 28 4 28 5 + 27 6 26 8 24 4 29 3 29 3 28 4 28 4 3 4 21 4 2 5 11 3 7 5 1 5 12 1 8 5 + 26 6 2 4 20 20 5 1 7 5 12 5 2 2 6 5 27 5 7 5 15 6 5 7 6 5 3 6 6 8 1 7 + 5 5 5 9 1 6 6 7 4 5 16 5 6 4 17 5 6 6 15 5 7 6 14 7 4 9 13 6 3 11 11 + 6 5 11 9 7 4 15 5 8 4 14 6 7 1 3 2 12 7 12 1 13 4 13 2 30 3 27 5 26 7 + 25 7 25 6 27 5 30 1 31 1 22 0 + + + + 4256.0 + + + 0.240601503759 + + + 2350.0 + + + 0.311914893617 + + + 1.14246873301 + + + 0.446286890872 0.507701482914 0.0275353442686 0.471925459985 + 0.0295607857219 0.000743418019799 -0.00755755171728 + 0.00200692954885 -0.0389088323765 + + + 32.0 + + + 5.53125 0.729323308271 + + + 5.75 6.5 6.25 3.625 0.270676691729 1.53383458647 0.270676691729 + 0.842105263158 + + + 133.0 + + + 25.0 100.0 0.248908296943 10.0 11.0 3.0 + + + 0.0 0.992481203008 + + + 0.552161654135 + + + 0.768939393939 0.640151515152 0.784090909091 0.341911764706 + 0.609848484848 0.488636363636 0.920454545455 0.441176470588 + 0.462121212121 0.825757575758 0.757575757576 0.481617647059 + 0.0757575757576 0.265151515152 0.450757575758 0.533088235294 + + + 0.59375 0.75 0.546875 0.485294117647 0.647058823529 0.515625 + 0.205882352941 0.0 0.84375 0.882352941176 0.859375 0.676470588235 + 1.0 0.96875 0.705882352941 0.455882352941 0.40625 0.926470588235 + 0.71875 0.352941176471 0.955882352941 1.0 0.647058823529 + 0.544117647059 0.09375 0.970588235294 0.546875 0.352941176471 + 0.735294117647 1.0 0.573529411765 0.0 0.046875 0.970588235294 + 0.859375 0.75 0.705882352941 0.96875 0.838235294118 0.0588235294118 + 0.0 0.779411764706 0.765625 0.926470588235 0.5 0.875 0.75 + 0.279411764706 0.0 0.294117647059 0.265625 0.75 0.338235294118 + 0.921875 0.911764705882 0.455882352941 0.0 0.0 0.0 0.0294117647059 + 0.161764705882 0.40625 0.544117647059 0.220588235294 + + + 0.480440777707 0.212945674012 0.0502858474472 0.0226311444867 + 0.25367047345 0.415084250532 0.136592151977 0.0872454908004 + 0.0256671154089 0.0361008567234 0.168323498816 0.33985088556 + 0.291116930105 0.0877201434675 + + + + + + + + + 3 2 27 3 26 1 27 2 27 4 17 1 1 10 3 2 10 1 1 6 1 4 4 3 7 3 1 2 5 5 2 + 4 3 3 1 4 7 5 3 4 3 8 9 3 1 9 1 3 1 2 15 4 15 0 + + + + 319.0 + + + 2.63636363636 + + + 98.0 + + + 1.19387755102 + + + 0.924107142857 + + + 0.434402332362 0.647959183673 0.703601390577 0.0531506855137 + 0.0284596554157 0.164079660193 -0.0160314990461 -0.0623960655689 + -0.00936364881127 + + + 29.0 + + + 0.206896551724 1.45454545455 + + + 0.413793103448 0.137931034483 0.137931034483 0.137931034483 0.0 0.0 + 2.18181818182 1.81818181818 + + + 11.0 + + + 2.0 6.0 0.371428571429 2.0 1.0 2.0 + + + 0.0 0.909090909091 + + + 0.307210031348 + + + 0.357142857143 0.333333333333 0.714285714286 0.380952380952 0.0 0.0 + 0.428571428571 0.666666666667 0.0 0.0 0.333333333333 0.52380952381 + 0.0 0.208333333333 0.5 0.208333333333 + + + 0.0 0.0 0.166666666667 0.333333333333 1.0 0.666666666667 + 0.666666666667 0.0 0.5 0.75 0.25 0.75 0.75 0.625 0.75 0.375 0.0 0.0 + 0.0 0.0 0.333333333333 0.5 0.333333333333 0.333333333333 0.0 0.0 + 0.0 0.0 0.25 0.5 0.75 1.0 0.0 0.0 0.0 0.0 0.0 0.375 0.5 0.375 0.0 + 0.0 0.0 0.0 0.0 0.666666666667 1.0 0.5 0.0 0.0 0.0 0.25 0.75 0.625 + 0.75 0.25 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 + + + 0.414562694915 0.23311812742 0.143667274989 0.0805818019206 + 0.139936618066 0.420728330033 0.144978219833 0.16482079241 + 0.0572600944976 0.105548601152 0.0134258180717 0.347882605262 + 0.26325415573 0.116514614077 + + + + + + + + + 1 1 38 1 39 3 3 3 14 10 5 2 21 2 16 20 1 19 22 1 16 19 2 19 39 20 1 + 19 39 20 2 18 39 19 3 18 39 20 1 19 39 40 39 40 39 40 39 40 39 40 38 + 41 39 40 39 40 39 40 39 40 40 38 40 39 39 41 39 41 38 40 39 40 39 40 + 39 40 40 39 41 37 35 3 4 37 36 2 3 38 36 1 4 38 36 1 5 37 35 2 5 37 + 35 2 5 37 35 2 5 37 35 2 5 37 35 2 5 37 15 3 16 4 5 36 7 3 3 6 9 2 1 + 1 1 4 6 39 1 13 1 1 3 15 6 53 4 16 6 53 3 17 6 53 3 17 6 52 3 18 6 24 + 3 25 3 18 6 24 3 25 3 18 6 4 8 4 1 2 12 20 3 19 7 2 29 17 5 19 7 1 31 + 16 5 15 2 1 8 2 30 19 2 18 8 2 29 20 2 18 8 1 31 19 3 19 38 19 2 19 + 39 19 2 19 39 19 2 18 40 39 40 20 1 16 42 39 40 37 42 32 1 2 44 37 42 + 19 1 20 39 37 42 39 40 19 1 20 39 19 1 20 39 6 2 11 1 20 39 6 1 12 2 + 19 39 12 1 6 2 19 39 40 39 40 39 40 38 41 39 20 1 19 39 7 2 11 1 19 + 39 19 1 20 39 18 2 20 40 16 4 19 40 14 6 19 40 16 5 18 41 15 4 19 39 + 7 15 2 1 15 40 5 16 5 1 1 3 9 39 6 16 4 1 1 2 10 39 4 29 8 38 4 29 8 + 37 5 30 7 74 5 75 3 77 1 78 1 77 2 78 1 78 1 78 1 78 1 78 1 2 0 + + + + 7584.0 + + + 0.822916666667 + + + 3386.0 + + + 0.171588895452 + + + 1.46480104941 + + + 0.500855710543 0.434734355084 0.139285780434 0.153732695573 + 0.101206773504 0.00185132710425 0.00234450428759 0.000696279545386 + 0.00343016562275 + + + 79.0 + + + 0.746835443038 0.916666666667 + + + 0.20253164557 0.354430379747 1.06329113924 1.16455696203 0.5 1.5 + 0.833333333333 0.833333333333 + + + 96.0 + + + 16.0 57.0 0.211586901763 7.0 4.0 4.0 + + + 0.0 0.989583333333 + + + 0.446466244726 + + + 0.885964912281 0.756578947368 0.0109649122807 0.0 0.916666666667 + 0.8875 0.104166666667 0.0395833333333 0.0958333333333 + 0.414583333333 0.945833333333 0.327083333333 0.00625 0.4125 + 0.852083333333 0.48125 + + + 0.796296296296 0.898148148148 0.731481481481 0.490740740741 + 0.0462962962963 0.0 0.0 0.0 0.841666666667 1.0 1.0 0.775 0.0 0.0 + 0.0 0.0 0.791666666667 1.0 1.0 0.758333333333 0.0 0.0 0.0 0.0 0.875 + 1.0 1.0 0.791666666667 0.208333333333 0.208333333333 0.133333333333 + 0.025 0.191666666667 0.191666666667 0.125 0.858333333333 1.0 0.975 + 0.791666666667 0.05 0.0 0.0 0.0 0.675 0.883333333333 0.925 + 0.466666666667 0.0 0.025 0.0 0.0 0.783333333333 1.0 1.0 + 0.841666666667 0.0 0.0 0.0 0.141666666667 0.725 0.641666666667 + 0.766666666667 0.816666666667 0.266666666667 + + + 0.517630637638 0.151424605335 0.0155273304739 0.00470790294463 + 0.157360068061 0.368613949601 0.056377411909 0.0106287576732 + 0.0211250381342 0.0119150902646 0.128984815856 0.351165943811 + 0.117970039779 0.0382002864334 + + + + + + + + + 3 3 5 2 3 1 1 10 50 1 1 26 47 29 48 35 41 36 39 37 39 37 39 37 39 37 + 39 37 39 37 39 38 38 38 38 38 38 37 39 37 39 37 39 37 39 38 38 38 38 + 37 44 27 46 2 1 31 40 38 39 4 4 28 39 37 39 37 39 37 39 37 39 38 38 + 37 39 37 39 8 1 16 1 11 39 4 2 1 2 28 39 37 38 38 40 35 41 36 39 37 + 39 37 39 37 39 36 40 20 2 10 44 4 4 6 62 3 33 1 15 6 1 6 5 1 5 3 33 + 13 3 14 3 3 5 2 33 14 1 21 4 3 33 36 4 2 34 36 4 3 33 36 5 2 33 36 5 + 2 33 36 4 2 34 36 4 2 34 36 4 1 35 36 4 3 32 37 5 2 31 38 38 41 35 41 + 35 40 36 39 37 39 36 7 1 33 35 41 37 38 38 38 38 37 39 37 39 37 39 38 + 38 38 38 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 37 39 38 38 + 37 38 38 39 37 39 37 39 37 39 3 1 2 15 2 1 12 70 1 9 0 + + + + 6688.0 + + + 0.863636363636 + + + 3124.0 + + + 0.143405889885 + + + 1.68218733081 + + + 0.485992317542 0.501593153487 0.139187075994 0.197893285833 + 0.121754444084 0.000578088485494 -0.000843981065955 + 0.00134394859411 -0.00284059468567 + + + 76.0 + + + 0.552631578947 0.397727272727 + + + 1.15789473684 0.631578947368 0.263157894737 0.157894736842 + 0.181818181818 0.363636363636 0.909090909091 0.136363636364 + + + 88.0 + + + 11.0 38.0 0.126582278481 4.0 3.0 4.0 + + + 0.0 0.988636363636 + + + 0.467105263158 + + + 0.8995215311 0.894736842105 0.0717703349282 0.0 0.923444976077 + 0.928229665072 0.102870813397 0.102870813397 0.011961722488 + 0.00478468899522 0.952153110048 0.916267942584 0.0 0.0 + 0.856459330144 0.808612440191 + + + 0.79797979798 0.838383838384 0.818181818182 0.808080808081 + 0.252525252525 0.0505050505051 0.0 0.0 0.945454545455 1.0 + 0.981818181818 0.954545454545 0.0 0.0 0.0 0.0 1.0 1.0 + 0.989898989899 0.888888888889 0.0 0.0 0.0 0.0 0.754545454545 + 0.954545454545 0.990909090909 0.845454545455 0.1 0.290909090909 0.2 + 0.190909090909 0.0 0.0505050505051 0.020202020202 0.0 + 0.909090909091 0.989898989899 1.0 0.848484848485 0.0 0.0 0.0 0.0 + 0.909090909091 1.0 1.0 0.818181818182 0.0 0.0 0.0 0.0 + 0.989898989899 1.0 1.0 0.89898989899 0.0 0.0 0.0 0.0 0.618181818182 + 0.845454545455 0.718181818182 0.645454545455 + + + 0.302794801856 0.242301776877 0.00591973386455 0.00979220657212 + 0.10908310814 0.379069822726 0.117863778648 0.00267292146921 + 0.0160119441204 0.0132457809202 0.104927373608 0.200974154509 + 0.119162072227 0.0768648542205 + + + + + + + + + 0 3 2 3 2 5 1 4 1 3 2 4 + + + + 30.0 + + + 0.833333333333 + + + 22.0 + + + 1.22727272727 + + + 1.1 + + + 0.477272727273 0.518181818182 0.0698722764838 0.122558226897 + 0.0375657400451 0.00318905517942 -0.00457971622798 + -0.00166733706869 -0.000305799811725 + + + 5.0 + + + 0.2 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + 6.0 + + + 1.0 4.0 0.0 0.0 1.0 1.0 + + + 0.0 0.833333333333 + + + 0.733333333333 + + + 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 0.75 + + + 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 + 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0 + + + 0.189680459152 0.182460628942 0.027704670728 0.0672066848703 + 0.031764292153 0.0405864805918 0.114253560932 0.0137371444247 + 0.130328103174 0.0401143577482 0.090655113755 0.142726626751 + 0.245867037186 0.176616521181 + + + + + + + + + 2 2 2 4 1 4 1 3 4 1 3 1 3 3 3 1 2 2 3 0 + + + + 45.0 + + + 0.555555555556 + + + 21.0 + + + 1.71428571429 + + + 0.745098039216 + + + 0.535714285714 0.422619047619 0.051182377713 0.301479321887 + -0.0547457078069 -0.000363545006641 -0.0277270390713 + 0.00452074948072 0.0796141123493 + + + 5.0 + + + 0.8 0.0 + + + 0.0 1.6 0.8 0.8 0.0 0.0 0.0 0.0 + + + 9.0 + + + 0.0 3.0 0.5 0.0 2.0 1.0 + + + 0.0 0.888888888889 + + + 0.466666666667 + + + 0.0 0.0 0.0 0.333333333333 0.5 1.0 0.0 0.666666666667 1.0 1.0 0.5 + 0.666666666667 0.75 0.75 0.25 0.166666666667 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 + 1.0 1.0 1.0 0.0 0.0 1.0 0.5 0.0 1.0 1.0 1.0 0.0 0.0 1.0 0.5 1.0 1.0 + 1.0 1.0 0.0 1.0 1.0 0.5 1.0 1.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 + 1.0 1.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 + + + 0.420147853671 0.207140593176 0.239707837976 0.0954251638338 + 0.265698245691 0.265274161731 0.147662071204 0.086184367148 + 0.131218250165 0.127935639107 0.144618756207 0.351681475631 + 0.139492099936 0.13938020223 + + + + + + + + + 32 1 4 4 58 5 5 7 3 6 57 3 1 1 4 6 4 7 55 7 4 17 44 1 4 12 4 18 44 2 + 1 15 2 19 43 3 1 36 44 2 1 36 44 39 44 3 3 33 50 33 51 32 50 33 49 34 + 48 35 48 37 45 38 34 3 6 39 34 4 3 42 35 2 3 44 34 2 5 42 34 2 5 4 4 + 33 35 2 5 4 3 33 36 2 5 40 36 2 6 39 36 2 6 39 28 4 3 3 6 39 21 17 6 + 40 10 2 1 3 3 18 6 40 7 30 7 40 4 32 6 34 1 42 7 28 7 5 4 32 7 30 3 7 + 4 32 7 21 2 5 3 10 3 32 7 41 3 32 8 19 7 14 4 31 7 20 13 9 2 32 7 19 + 14 43 8 18 15 42 8 1 1 16 16 41 7 2 1 15 17 42 6 17 19 41 6 2 3 12 20 + 40 7 1 3 13 25 2 1 31 7 1 3 5 35 32 49 1 2 31 48 2 2 25 54 2 2 25 49 + 4 1 31 1 1 47 1 2 35 44 3 1 35 43 4 1 35 43 41 43 40 43 40 42 41 42 + 41 42 41 42 41 42 41 42 41 42 41 42 41 43 38 1 1 43 38 2 1 42 38 2 1 + 42 37 46 37 46 37 46 17 2 1 7 2 4 1 49 11 72 8 75 4 79 3 80 3 79 6 78 + 4 79 3 80 3 80 3 38 0 + + + + 6640.0 + + + 1.0375 + + + 3066.0 + + + 0.179386823222 + + + 1.34821831304 + + + 0.528256407809 0.454445242637 0.163872288589 0.111233559216 + 0.0775965355683 -0.00645312987656 -0.00147391800369 + -0.00490731171619 0.00328311869325 + + + 83.0 + + + 0.78313253012 0.925 + + + 0.819277108434 0.722891566265 1.20481927711 0.385542168675 0.9 1.6 + 0.9 0.3 + + + 80.0 + + + 12.0 54.0 0.209677419355 8.0 3.0 8.0 + + + 0.0 0.9875 + + + 0.461746987952 + + + 0.6125 0.8075 0.155 0.0 0.9 0.807142857143 0.0214285714286 0.0 + 0.0642857142857 0.566666666667 0.888095238095 0.592857142857 + 0.0261904761905 0.638095238095 0.888095238095 0.407142857143 + + + 0.33 0.39 0.66 0.57 0.18 0.0 0.0 0.0 0.73 1.0 1.0 1.0 0.44 0.0 0.0 + 0.0 0.727272727273 1.0 1.0 0.636363636364 0.0545454545455 0.0 0.0 + 0.0 0.88 1.0 1.0 0.59 0.03 0.0 0.0 0.0 0.09 0.18 0.21 0.8 0.58 0.95 + 0.93 0.46 0.0 0.0 0.245454545455 1.0 1.0 1.0 0.981818181818 + 0.0181818181818 0.0 0.0 0.41 1.0 1.0 1.0 0.92 0.0 0.0 0.1 + 0.427272727273 0.727272727273 0.681818181818 0.890909090909 + 0.718181818182 0.0 + + + 0.357469140821 0.177949935518 0.0374787210275 0.0279745537121 + 0.0905958731301 0.319891131842 0.047533892441 0.0659826661855 + 0.0475208185607 0.00608369142621 0.127596269172 0.165023762409 + 0.0142673275801 0.0456723556881 + + + + + + + + + 5 11 21 1 37 29 4 3 36 2 1 34 37 36 36 37 36 36 37 36 37 17 1 17 38 + 17 1 4 1 12 38 35 38 34 39 32 41 35 38 36 37 36 36 37 36 37 36 37 37 + 36 37 36 37 35 38 35 38 35 38 36 37 35 37 36 37 37 37 36 36 37 36 37 + 36 37 37 35 38 35 38 35 38 35 38 34 39 34 39 35 38 34 39 35 11 2 25 + 62 1 4 6 72 1 6 1 65 1 5 22 44 2 4 26 41 2 4 27 40 2 4 29 38 2 4 29 + 38 2 4 29 38 2 4 29 38 2 4 28 39 2 4 28 40 1 4 28 39 3 3 28 39 35 38 + 35 38 34 39 34 39 34 40 33 40 33 40 33 40 34 39 42 31 33 1 1 2 1 35 + 33 39 34 40 33 40 33 39 34 39 34 39 34 39 34 39 33 40 34 39 34 39 34 + 39 34 39 34 40 33 40 33 40 33 8 3 11 2 3 1 12 33 4 30 6 33 3 70 2 70 + 4 70 4 69 2 71 2 257 0 + + + + 6716.0 + + + 0.79347826087 + + + 3193.0 + + + 0.131537738804 + + + 1.57227974779 + + + 0.493096878589 0.463727315591 0.130976322573 0.167405555066 + 0.10250501069 0.00122122097178 -0.00298289941809 0.000248961306977 + -0.00404002746744 + + + 73.0 + + + 0.479452054795 0.282608695652 + + + 0.219178082192 0.821917808219 0.657534246575 0.0 0.260869565217 + 0.260869565217 0.434782608696 0.173913043478 + + + 92.0 + + + 10.0 41.0 0.136690647482 2.0 2.0 2.0 + + + 0.0 0.95652173913 + + + 0.475431804646 + + + 0.929951690821 0.86231884058 0.0748792270531 0.0 0.929951690821 + 0.903381642512 0.140096618357 0.142512077295 0.0434782608696 + 0.280193236715 0.98309178744 0.562801932367 0.0 0.240274599542 + 0.970251716247 0.551487414188 + + + 0.818181818182 0.916666666667 0.939393939394 0.777777777778 + 0.313131313131 0.0 0.0 0.0 0.979797979798 1.0 1.0 0.75 0.0 0.0 0.0 + 0.0 0.878787878788 1.0 1.0 0.75 0.0 0.0 0.0 0.0 0.858585858586 + 0.972222222222 1.0 0.87962962963 0.272727272727 0.287037037037 + 0.343434343434 0.231481481481 0.111111111111 0.0648148148148 + 0.0606060606061 0.5 1.0 0.935185185185 1.0 0.157407407407 0.0 0.0 + 0.0 0.518518518519 1.0 1.0 1.0 0.166666666667 0.0 0.0 0.0 0.5 1.0 + 1.0 1.0 0.138888888889 0.0 0.0 0.0 0.425 0.909090909091 0.975 + 0.918181818182 0.216666666667 + + + 0.343252907736 0.213424921455 0.0177570498634 0.0159149705975 + 0.0601071786956 0.353871438221 0.0902471201876 0.0252207636881 + 0.0144381602153 0.0230139091236 0.0757976531185 0.198982021291 + 0.0859284734005 0.0639591094615 + + + + + + + + + 99 3 245 4 246 3 246 3 212 6 1 1 3 4 6 2 11 3 210 30 6 3 211 33 2 3 + 211 38 211 38 212 5 1 32 211 37 212 4 1 32 212 38 211 38 211 38 211 + 38 212 37 212 37 212 38 211 38 23 2 186 38 22 3 186 38 22 4 185 38 22 + 6 183 38 22 6 107 1 75 38 21 7 107 1 75 38 21 10 103 2 75 38 22 10 + 102 2 76 37 22 10 102 2 76 38 21 9 73 1 30 1 76 38 20 10 73 1 31 1 75 + 38 20 10 73 1 31 1 75 38 20 11 72 2 30 2 74 38 19 12 72 2 26 10 70 38 + 18 14 71 2 20 16 70 38 18 14 71 5 5 10 2 16 71 35 20 14 71 20 1 18 35 + 1 34 8 2 24 22 13 7 1 63 17 3 19 34 5 31 36 20 14 5 3 62 16 3 20 34 9 + 27 37 19 1 1 13 3 5 61 17 3 18 35 19 17 38 18 1 5 20 58 38 35 28 8 38 + 24 22 55 39 35 21 1 9 5 38 15 4 1 28 54 39 34 21 1 12 2 38 15 35 52 + 39 35 33 1 39 15 36 51 39 35 73 15 37 50 39 35 40 1 32 15 34 53 39 35 + 18 3 19 2 31 15 34 3 3 47 39 35 18 3 19 20 13 14 41 47 39 35 19 3 18 + 22 2 3 6 15 40 47 39 35 20 2 18 22 1 5 5 15 1 1 37 48 39 35 40 29 4 + 15 1 3 36 47 39 35 40 30 3 19 36 47 40 34 40 30 3 21 34 47 40 34 40 + 30 3 14 3 4 35 45 41 34 40 31 3 11 6 4 34 14 1 31 40 34 40 30 4 10 9 + 2 34 11 5 31 39 4 1 30 40 29 4 10 45 10 6 31 40 2 3 29 42 28 3 10 8 1 + 35 11 7 30 39 3 3 28 42 29 3 11 6 3 34 11 7 29 10 1 29 2 6 25 43 29 4 + 11 5 4 32 12 8 28 40 1 7 26 42 29 4 12 3 8 20 2 8 10 11 27 38 3 5 27 + 42 30 3 10 4 10 4 3 11 7 3 11 12 26 38 3 5 28 41 29 4 11 4 12 1 4 12 + 19 13 25 39 2 6 27 41 29 4 35 4 1 4 19 13 25 38 2 7 27 40 30 3 36 4 1 + 3 19 18 21 38 2 8 25 41 31 3 35 4 23 16 23 38 2 7 27 40 31 3 36 4 21 + 21 19 9 1 28 3 5 28 41 30 3 42 2 17 21 20 37 3 5 29 40 31 2 42 2 5 1 + 11 23 18 37 3 5 29 40 31 2 43 2 3 1 11 25 17 37 4 4 29 40 31 2 42 3 2 + 2 11 26 16 37 4 4 29 40 31 2 59 28 15 38 3 5 27 41 31 2 47 1 11 30 13 + 38 3 6 26 41 32 2 46 1 11 31 12 37 4 7 1 2 22 41 32 2 45 1 12 32 11 + 37 4 18 13 42 32 2 57 34 10 37 4 25 5 43 32 2 57 34 10 15 7 15 4 73 + 32 2 41 1 15 35 9 4 19 15 3 73 32 2 40 4 13 36 8 3 21 3 1 10 3 73 33 + 1 39 5 13 38 6 3 21 2 3 9 3 37 5 31 33 1 39 5 12 29 3 8 5 3 21 2 3 9 + 3 36 14 23 33 1 41 4 11 29 3 3 3 1 31 1 4 8 4 36 20 1 3 12 33 2 42 1 + 13 28 4 2 3 1 36 6 6 17 1 18 31 6 32 2 56 28 9 1 36 4 8 36 32 5 33 1 + 56 29 8 2 35 3 9 9 2 23 35 4 33 1 56 29 8 3 34 3 9 1 1 32 35 4 33 1 + 55 30 7 5 33 3 9 1 1 33 35 2 34 1 55 5 2 24 5 6 35 1 9 36 34 2 34 2 + 54 5 3 23 6 4 45 37 35 1 34 2 55 4 5 21 5 5 46 36 70 2 56 3 6 21 4 1 + 1 1 37 3 8 36 70 2 57 1 8 20 43 8 4 37 69 2 54 4 9 19 43 8 4 37 70 1 + 54 4 7 22 2 1 2 1 36 8 4 37 70 1 54 5 4 24 1 5 36 8 3 38 70 1 52 41 + 37 3 1 3 3 36 1 1 123 18 3 20 37 5 5 33 129 17 3 20 37 3 7 38 125 16 + 3 20 37 3 8 37 126 16 1 21 37 3 7 39 128 34 39 2 7 39 128 34 39 2 7 + 39 129 32 40 2 7 39 130 31 41 1 7 39 131 2 6 23 48 39 140 22 49 39 + 141 19 50 39 143 7 2 3 4 1 51 38 145 3 4 3 3 2 50 40 145 2 4 4 54 39 + 136 3 8 12 51 39 137 5 1 16 51 39 138 21 50 40 137 23 50 40 141 17 50 + 41 143 15 51 40 144 13 52 20 2 19 142 14 51 7 1 3 4 6 3 18 142 15 50 + 8 19 15 143 13 51 7 23 12 147 7 53 7 22 13 147 7 54 5 25 11 148 5 55 + 5 25 11 149 3 56 5 26 10 150 2 55 7 27 8 206 8 29 1 1 4 207 6 33 3 + 209 3 247 2 528 2 248 4 496 1 246 5 246 4 244 4 247 1 248 1 248 2 206 + 0 + + + + 35109.0 + + + 1.76595744681 + + + 9815.0 + + + 0.197860417728 + + + 0.796519577377 + + + 0.468974002925 0.460859471654 0.600916638374 0.0820180335178 + -0.0282809194528 0.100040273508 -0.0199102007382 0.050756847824 + 0.00221926780177 + + + 249.0 + + + 0.819277108434 3.02836879433 + + + 0.931726907631 0.481927710843 0.963855421687 0.899598393574 + 1.24822695035 4.93617021277 4.76595744681 1.16312056738 + + + 141.0 + + + 20.0 113.0 0.245417515275 38.0 3.0 10.0 + + + 0.0 0.992907801418 + + + 0.279557948104 + + + 0.0 0.440092165899 0.640552995392 0.323028673835 0.533179723502 + 0.423963133641 0.107834101382 0.0 0.0626728110599 0.476497695853 + 0.301843317972 0.0147849462366 0.0358276643991 0.621315192744 + 0.411337868481 0.0987654320988 + + + 0.0 0.0 0.0 0.13082437276 0.679211469534 0.92220113852 + 0.741935483871 0.0645161290323 0.0 0.0 0.702087286528 + 0.917562724014 0.675627240143 0.280834914611 0.376344086022 + 0.109318996416 0.666034155598 0.856630824373 0.717267552182 + 0.399641577061 0.338709677419 0.00569259962049 0.0 0.0 + 0.231499051233 0.36917562724 0.396584440228 0.197132616487 + 0.0519713261649 0.0246679316888 0.0 0.0 0.0 0.243727598566 + 0.840607210626 0.55017921147 0.0430107526882 0.0 0.0 0.0 0.0 0.0 + 0.0721062618596 0.440860215054 0.645161290323 0.514231499051 + 0.0591397849462 0.0 0.0 0.0250896057348 0.292220113852 + 0.304659498208 0.525089605735 0.508538899431 0.39247311828 + 0.0089605734767 0.0 0.112847222222 0.915441176471 0.951388888889 + 0.493055555556 0.113970588235 0.0 0.0 + + + 0.258121543496 0.266287902219 0.143274078062 0.108973319898 + 0.00222066306326 0.289962918943 0.184269449506 0.204444521321 + 0.134975713042 0.126605177213 0.000332213637674 0.253651744084 + 0.174220675925 0.118105512797 + + + + + + + + + 5 1 176 4 6 1 166 7 1 12 157 28 149 25 3 10 139 38 139 38 139 38 139 + 37 140 38 139 38 139 38 139 38 140 37 140 37 139 38 139 37 140 38 17 + 4 118 38 17 5 117 39 16 7 113 43 13 7 114 46 10 7 115 45 9 10 114 44 + 9 11 113 43 10 11 113 5 4 15 1 18 11 12 111 4 6 14 1 17 12 13 111 5 3 + 15 1 17 11 14 111 39 14 16 108 39 17 13 108 38 16 1 1 13 108 35 17 22 + 103 35 1 2 13 24 102 38 13 25 101 38 13 26 100 38 13 27 99 38 13 28 + 98 7 2 29 13 29 97 38 13 30 97 37 12 33 99 33 12 5 4 25 103 28 12 5 2 + 29 105 24 12 5 2 10 1 19 112 16 11 6 1 10 2 19 124 3 12 39 124 2 12 + 40 137 30 3 7 136 30 5 6 136 30 6 4 137 30 23 1 124 6 1 23 21 2 126 2 + 4 22 21 5 121 4 5 21 20 6 121 4 6 20 20 8 119 4 7 18 21 4 2 4 117 3 8 + 19 19 5 2 5 116 3 8 25 13 4 2 6 127 26 12 4 2 7 127 1 1 12 7 4 11 5 2 + 6 131 2 1 8 8 3 11 6 1 5 135 7 9 2 12 13 129 3 2 8 7 3 11 14 127 6 1 + 7 2 3 3 3 11 13 66 3 58 7 2 6 2 4 2 3 10 13 67 3 55 11 1 16 11 13 68 + 2 58 2 7 6 2 4 1 3 11 12 8 1 60 2 67 5 3 8 11 14 5 5 57 2 59 2 3 10 1 + 8 11 26 55 2 59 24 11 28 54 1 58 24 11 30 52 3 59 22 10 32 51 3 60 21 + 10 32 51 4 4 2 2 5 50 17 9 29 4 1 50 20 4 3 39 17 10 19 1 16 48 20 4 + 4 38 17 9 20 1 10 2 4 48 19 3 6 39 15 10 20 1 10 2 5 47 19 1 13 36 4 + 4 6 9 39 46 17 4 13 35 3 6 5 9 39 45 18 3 15 35 3 5 5 9 40 44 18 4 15 + 35 2 5 4 10 41 42 19 5 18 37 6 8 42 41 20 6 17 35 6 10 42 9 4 27 22 4 + 23 31 4 11 42 8 6 26 48 35 2 10 41 9 7 25 48 34 3 11 39 10 6 26 48 35 + 2 12 4 1 32 10 6 27 48 49 4 5 1 1 26 10 6 27 23 4 22 49 2 1 1 11 11 2 + 8 10 8 24 25 2 21 48 2 1 1 2 4 9 8 4 7 12 5 4 1 22 24 2 20 49 4 2 5 + 11 7 1 8 11 13 22 18 4 22 50 13 8 16 10 14 22 17 7 20 51 2 1 10 7 16 + 10 13 24 19 4 20 55 4 2 4 7 2 9 3 11 4 2 10 21 20 2 21 56 3 2 5 6 3 8 + 1 1 1 11 4 1 12 20 4 1 37 65 1 7 3 9 1 11 20 1 1 16 3 3 36 73 1 11 1 + 11 23 15 42 84 2 11 24 14 42 83 2 12 25 13 43 82 2 11 27 12 22 4 17 + 80 4 11 28 11 21 5 17 80 4 11 28 11 21 5 17 80 3 11 30 10 20 5 18 81 + 2 11 5 3 24 9 20 3 19 82 1 11 5 4 24 8 20 3 19 93 7 1 9 1 16 8 20 3 + 19 77 3 13 6 2 26 9 19 3 19 76 4 13 5 3 26 1 2 6 20 2 19 76 5 12 4 4 + 8 1 20 6 20 1 20 75 6 11 5 4 7 3 10 4 3 8 20 1 20 75 6 11 5 4 6 3 8 + 18 20 1 21 75 5 13 2 4 6 4 7 19 18 3 21 75 5 14 1 1 9 2 9 20 40 78 2 + 14 2 3 7 2 9 20 3 25 12 78 2 14 1 5 6 1 11 18 4 27 11 93 1 7 2 3 10 + 19 4 28 10 106 11 18 4 29 9 106 7 23 3 30 8 105 9 22 3 30 8 105 8 23 + 2 32 7 105 8 4 1 19 1 33 3 1 2 106 8 2 2 19 1 33 7 108 9 19 1 34 6 + 108 9 54 6 95 1 14 7 6 2 47 6 92 11 7 14 47 6 92 12 6 16 46 5 93 12 4 + 16 47 5 94 1 5 4 5 16 48 3 94 3 3 26 48 3 95 2 2 27 48 3 97 28 50 3 + 97 27 51 2 98 26 52 1 104 20 158 13 1 4 159 18 163 13 165 3 4 5 164 3 + 4 6 160 1 2 4 3 7 160 16 162 15 163 15 163 14 165 12 167 9 169 8 169 + 8 169 1 1 6 172 3 174 2 176 1 9 0 + + + + 26904.0 + + + 1.16447368421 + + + 6880.0 + + + 0.254069767442 + + + 1.40298559888 + + + 0.405166490486 0.465922916988 0.397082624997 0.188035257005 + 0.139183023782 0.12455867838 0.00132612524701 0.0859689494711 + -0.00814035958907 + + + 177.0 + + + 1.66101694915 2.30921052632 + + + 2.05649717514 1.67231638418 1.17514124294 1.74011299435 + 0.868421052632 2.71052631579 4.36842105263 1.28947368421 + + + 152.0 + + + 29.0 148.0 0.275653923541 28.0 4.0 6.0 + + + 0.0 0.993421052632 + + + 0.255724055902 + + + 0.79485645933 0.170454545455 0.830741626794 0.0346889952153 + 0.214114832536 0.508373205742 0.0992822966507 0.0472488038278 0.0 + 0.324162679426 0.348684210526 0.0 0.0 0.00409356725146 + 0.404093567251 0.317543859649 + + + 0.698564593301 0.722488038278 0.11961722488 0.198564593301 + 0.875598086124 0.732057416268 0.055023923445 0.0 0.775119617225 + 0.983253588517 0.313397129187 0.0502392344498 0.83971291866 + 0.875598086124 0.0837320574163 0.0 0.0215311004785 0.423444976077 + 0.373205741627 0.0167464114833 0.131578947368 0.133971291866 + 0.186602870813 0.00239234449761 0.0 0.411483253589 0.909090909091 + 0.734449760766 0.131578947368 0.0 0.0 0.0 0.0 0.0 0.191387559809 + 0.502392344498 0.459330143541 0.0 0.0 0.0 0.0 0.0 0.0478468899522 + 0.555023923445 0.791866028708 0.143540669856 0.0 0.0 0.0 0.0 0.0 + 0.0167464114833 0.406698564593 0.485645933014 0.198564593301 0.0 + 0.0 0.0 0.0 0.0 0.0800915331808 0.647597254005 0.578947368421 + 0.473684210526 + + + 0.476966335364 0.142184362821 0.158132279753 0.104030844865 + 0.204670554402 0.202857512041 0.102010093593 0.160706459729 + 0.201974821713 0.0848939350182 0.0431547706143 0.146452257114 + 0.13132934429 0.0803218305318 + + + + + + + + + 531 13 114 36 110 36 110 36 109 37 109 37 108 38 108 38 108 37 110 36 + 109 37 109 37 110 36 110 36 110 36 109 37 109 37 109 37 110 36 110 36 + 109 37 109 33 113 36 111 36 110 36 110 36 110 36 110 36 110 36 110 36 + 110 36 110 36 110 1 2 3 2 28 110 6 3 27 110 7 1 28 110 36 76 11 2 12 + 8 37 75 31 1 39 74 32 1 39 74 72 12 6 55 19 1 81 44 19 2 86 39 108 38 + 63 1 44 38 27 1 13 9 1 20 37 38 40 32 36 38 40 32 36 38 40 32 36 38 + 40 32 36 38 40 31 37 38 40 31 37 38 40 31 37 38 40 31 37 1 2 34 44 26 + 41 35 44 27 40 35 43 27 41 35 43 27 41 35 42 28 40 36 42 28 40 36 42 + 29 38 39 39 31 37 39 39 31 37 39 39 31 37 39 39 31 37 39 39 30 38 39 + 39 30 38 12 1 26 39 30 38 8 13 18 40 29 38 7 28 4 8 1 31 30 37 6 31 1 + 41 30 37 4 23 2 50 29 39 3 75 29 39 2 76 29 39 2 76 29 39 2 76 29 39 + 2 76 29 39 2 76 29 39 2 76 29 39 2 39 2 35 29 38 3 38 30 8 29 39 2 38 + 37 1 30 38 2 37 68 39 2 38 67 7 19 1 4 8 2 38 67 3 29 7 3 37 102 4 3 + 38 101 4 3 38 102 3 2 39 108 38 108 38 108 38 108 38 108 38 108 38 + 108 38 108 38 108 38 108 38 108 38 108 39 107 39 107 39 107 39 107 39 + 107 39 107 39 107 39 107 39 108 38 108 4 1 5 1 27 108 2 27 10 107 2 + 29 8 107 1 32 6 107 2 31 1 1 4 107 2 32 6 105 4 31 6 106 2 33 4 108 1 + 33 4 108 1 33 4 107 2 32 6 107 1 142 0 + + + + 18104.0 + + + 1.17741935484 + + + 6540.0 + + + 0.115596330275 + + + 0.749758454106 + + + 0.494250764526 0.496959299868 0.253492551118 0.112251311175 + -0.0815984223491 -0.000252354584303 -0.0132341211426 + 0.0391169087188 -0.00582278337142 + + + 146.0 + + + 0.328767123288 0.66935483871 + + + 0.246575342466 0.328767123288 0.547945205479 0.0821917808219 0.0 + 0.967741935484 1.29032258065 0.41935483871 + + + 124.0 + + + 12.0 55.0 0.201877934272 5.0 4.0 3.0 + + + 0.0241935483871 0.991935483871 + + + 0.361246133451 + + + 0.0 0.0215053763441 0.705197132616 0.650537634409 0.00959023539669 + 0.721883173496 0.669572798605 0.104620749782 0.875448028674 + 0.594086021505 0.133512544803 0.0 0.00610287707062 0.572798605057 + 0.717523975588 0.0 + + + 0.0 0.0 0.0 0.0 0.418518518519 0.982638888889 0.944444444444 + 0.350694444444 0.0 0.0 0.00740740740741 0.0763888888889 + 0.381481481481 1.0 1.0 0.347222222222 0.0 0.0 0.433333333333 1.0 + 0.996296296296 0.395833333333 0.188888888889 0.239583333333 + 0.0175438596491 0.0197368421053 0.421052631579 0.996710526316 1.0 + 0.328947368421 0.0 0.0 0.722222222222 1.0 0.97037037037 + 0.215277777778 0.140740740741 0.0659722222222 0.0 0.0 + 0.781481481481 0.982638888889 1.0 0.239583333333 0.2 0.131944444444 + 0.0 0.0 0.0259259259259 0.0 0.222222222222 1.0 1.0 0.510416666667 + 0.0 0.0 0.0 0.0 0.143859649123 0.881578947368 0.856140350877 + 0.532894736842 0.0 0.0 + + + 0.431705194702 0.154380148301 0.0889519046887 0.106757100614 + 0.0450368346314 0.299112022154 0.0302805969393 0.166951729843 + 0.209772099077 0.0840918146924 0.0454916979389 0.156707524362 + 0.0355268340523 0.0257974492961 + + + + + + + + + 67 1 99 4 507 3 85 9 3 5 78 24 71 31 65 1 2 34 65 37 64 38 65 37 65 + 37 64 38 64 38 65 38 64 38 64 37 65 38 64 38 64 38 64 38 64 38 64 38 + 64 38 64 38 64 38 64 38 64 38 64 39 63 39 64 38 64 37 65 35 67 38 64 + 36 1 1 64 36 1 1 34 1 29 39 31 3 29 39 16 4 1 2 5 1 2 3 29 40 7 21 2 + 3 29 68 2 2 30 68 2 3 29 68 2 4 21 75 2 7 2 91 2 100 2 58 1 41 2 99 3 + 48 4 4 4 39 3 43 20 36 3 37 2 1 23 37 3 35 27 37 3 34 29 36 3 35 28 + 37 2 34 29 37 2 35 26 39 1 38 24 38 1 38 25 38 1 38 26 36 3 37 26 35 + 3 38 26 35 4 38 25 36 3 37 26 37 3 36 26 37 3 36 26 37 3 35 27 38 2 + 36 26 34 3 1 3 35 26 38 3 35 26 38 3 35 26 38 3 35 27 36 4 35 26 38 2 + 36 26 38 3 35 26 38 3 35 26 37 4 35 26 38 3 36 25 38 3 36 25 38 3 36 + 25 38 4 26 2 7 25 36 6 34 27 35 5 36 26 30 1 3 7 35 26 19 22 35 26 8 + 33 35 26 3 38 36 25 2 39 35 26 2 39 9 5 4 10 7 26 2 39 4 25 6 25 2 40 + 3 27 6 25 1 40 3 28 5 66 3 29 4 66 4 28 3 68 2 30 3 68 1 30 3 68 1 31 + 2 68 1 31 2 68 1 32 1 68 1 101 2 100 1 95 0 + + + + 10506.0 + + + 0.990291262136 + + + 4802.0 + + + 0.129737609329 + + + 0.953710165155 + + + 0.500181442551 0.522602918719 0.161011667503 0.0979558893213 + -0.0114919571291 0.000708467909052 -0.0038757706692 0.0220774741921 + -0.0091470453369 + + + 102.0 + + + 0.450980392157 0.73786407767 + + + 0.274509803922 0.627450980392 0.549019607843 0.235294117647 + 0.0776699029126 0.582524271845 1.04854368932 1.12621359223 + + + 103.0 + + + 13.0 37.0 0.194594594595 6.0 2.0 3.0 + + + 0.0 0.990291262136 + + + 0.457072149248 + + + 0.0 0.210769230769 0.927692307692 0.456923076923 0.469230769231 + 0.770710059172 0.501479289941 0.306213017751 0.536 0.846153846154 + 0.478461538462 0.173846153846 0.0 0.371301775148 0.963017751479 + 0.269230769231 + + + 0.0 0.0 0.0 0.461538461538 0.903846153846 0.794871794872 + 0.698717948718 0.173076923077 0.0 0.0 0.0 0.384615384615 1.0 1.0 + 0.952662721893 0.0 0.0641025641026 0.479289940828 0.431952662722 + 0.662721893491 0.958579881657 0.994082840237 0.94674556213 + 0.10650887574 0.288461538462 1.0 1.0 0.988165680473 0.0532544378698 + 0.0 0.0710059171598 0.100591715976 0.395833333333 1.0 1.0 + 0.955128205128 0.0 0.0 0.0 0.0 0.237179487179 0.502958579882 + 0.550295857988 0.899408284024 0.923076923077 0.917159763314 + 0.650887573964 0.0177514792899 0.0 0.0 0.0 0.751479289941 1.0 1.0 + 0.585798816568 0.0 0.0 0.0 0.0 0.733727810651 0.899408284024 + 0.952662721893 0.491124260355 0.0 + + + 0.42007732014 0.069306152024 0.0571844614791 0.109366129972 + 0.0563351018625 0.127084138054 0.0072418155753 0.128727802123 + 0.270837460383 0.0167420792775 0.254102079851 0.0395846699514 + 0.0630636521663 0.0214176304392 + + + + + + + + + 1 5 3 5 4 3 6 3 4 4 3 2 1 2 4 4 4 4 5 3 6 2 6 2 4 4 3 2 1 2 4 1 1 2 6 + 2 4 1 1 2 3 2 1 2 3 5 2 6 3 5 3 3 5 3 5 3 5 3 5 2 6 3 1 1 3 3 1 1 3 5 + 2 6 2 7 2 6 2 5 3 5 4 4 3 6 2 5 3 6 3 5 3 5 3 5 3 5 3 5 4 4 3 5 4 4 3 + 5 2 6 3 5 3 5 3 4 4 4 3 5 4 4 4 5 3 5 6 1 6 3 5 2 5 4 3 5 4 4 4 3 5 3 + 4 5 2 6 2 6 2 6 2 6 1 7 2 6 3 5 4 4 4 3 5 3 5 3 4 5 3 5 3 5 4 4 3 5 2 + 6 3 5 3 4 4 5 3 5 3 5 3 4 4 4 4 4 4 5 4 4 3 5 3 5 3 5 3 5 3 5 3 5 3 6 + 2 5 3 5 3 5 3 5 4 3 7 2 4 4 4 4 4 3 4 4 4 5 4 4 4 3 5 3 5 3 4 5 3 5 3 + 6 3 4 5 3 33 0 + + + + 976.0 + + + 0.0655737704918 + + + 515.0 + + + 0.650485436893 + + + 1.07457805907 + + + 0.530651872399 0.492080558453 0.00436248761127 2.10618098757 + 0.0222665167055 -4.42333876083e-05 -0.00323266906292 + -0.000490484245209 -0.0967125991729 + + + 8.0 + + + 5.75 0.0573770491803 + + + 5.0 9.0 2.5 6.5 0.229508196721 0.0 0.0 0.0 + + + 122.0 + + + 5.0 18.0 0.197080291971 2.0 15.0 1.0 + + + 0.0 0.959016393443 + + + 0.527663934426 + + + 0.35 0.129032258065 0.133333333333 0.0 0.766666666667 + 0.838709677419 0.866666666667 0.661290322581 0.783333333333 + 0.983870967742 1.0 0.854838709677 0.0166666666667 0.338709677419 + 0.35 0.370967741935 + + + 0.0 0.2 0.0 0.0 0.0666666666667 0.0 0.0 0.0 0.266666666667 + 0.933333333333 0.4 0.125 0.4 0.0666666666667 0.0 0.0 0.666666666667 + 1.0 0.866666666667 0.6875 0.6 0.866666666667 0.733333333333 0.3125 + 0.6 0.8 1.0 0.8125 1.0 1.0 0.933333333333 0.6875 1.0 0.533333333333 + 1.0 0.9375 1.0 1.0 0.933333333333 0.75 0.933333333333 + 0.666666666667 1.0 1.0 1.0 1.0 1.0 0.75 0.0 0.0666666666667 + 0.733333333333 0.625 0.666666666667 0.733333333333 0.933333333333 + 0.4375 0.0 0.0 0.0 0.0 0.0 0.0 0.0666666666667 0.0625 + + + 0.382113514838 0.285288077422 0.0199015734861 0.0065295567725 + 0.329215113815 0.360678758669 0.264898932694 0.0413277888183 + 0.0410598893135 0.0158289269662 0.30670085548 0.363681988255 + 0.329154486169 0.252307587314 + + + + + + + + + 2 1 67 1 67 2 66 2 66 2 66 2 65 3 65 4 64 4 64 4 65 3 65 3 65 3 65 2 + 65 4 64 5 63 5 63 5 63 5 63 6 62 6 24 3 35 7 23 4 33 7 24 2 36 5 27 1 + 36 4 27 1 36 4 27 1 36 4 17 5 4 2 36 5 5 22 36 32 36 32 36 32 36 32 + 36 32 36 32 36 32 36 32 36 32 36 32 36 32 36 32 36 32 36 32 36 32 36 + 32 36 32 36 32 36 32 36 32 36 32 36 32 36 4 1 27 36 32 36 32 36 32 36 + 32 36 32 36 32 36 32 36 5 1 2 1 23 36 32 36 32 36 32 36 32 36 32 19 7 + 10 32 11 18 7 32 8 23 5 33 1 29 5 63 5 22 6 35 5 7 22 34 5 4 26 33 5 + 2 28 34 4 3 26 35 4 3 26 35 4 3 26 35 4 3 26 35 4 3 26 35 3 5 25 37 2 + 3 26 36 32 36 31 37 31 37 31 37 32 37 31 35 33 35 33 35 33 35 33 35 + 33 35 33 35 33 36 32 36 32 36 33 35 33 7 1 27 33 35 33 35 33 34 34 34 + 34 34 34 34 34 34 33 35 33 35 33 36 33 13 17 5 33 10 21 4 33 7 25 3 + 33 4 28 3 33 3 29 3 32 3 1 1 28 3 32 3 30 3 32 3 30 3 32 3 29 4 32 3 + 30 3 32 4 29 3 33 3 29 3 33 3 29 3 34 1 30 3 65 3 65 3 64 4 65 3 65 3 + 65 3 65 3 66 2 66 2 66 2 66 1 2 0 + + + + 8908.0 + + + 0.519083969466 + + + 3068.0 + + + 0.170143415906 + + + 1.21306372878 + + + 0.493023798867 0.516555510982 0.119794091483 0.211623869702 + 0.114269706126 0.000971030802218 -0.00608012077932 + -0.00118782438472 -0.00794706045374 + + + 68.0 + + + 0.382352941176 0.328244274809 + + + 0.588235294118 0.411764705882 0.235294117647 0.294117647059 + 0.274809160305 0.12213740458 0.427480916031 0.458015267176 + + + 131.0 + + + 6.0 32.0 0.156934306569 5.0 2.0 2.0 + + + 0.0 0.992366412214 + + + 0.344409519533 + + + 0.318014705882 0.877005347594 0.171122994652 0.0 0.189338235294 1.0 + 0.260249554367 0.0926916221034 0.00183823529412 0.0106951871658 + 0.982174688057 0.297682709447 0.0 0.0338680926916 0.900178253119 + 0.349376114082 + + + 0.3515625 0.6796875 0.75 0.734375 0.4609375 0.0 0.0 0.0 0.0 + 0.284722222222 1.0 0.993055555556 0.256944444444 0.0 0.0 0.0 0.0 + 0.328125 1.0 1.0 0.2421875 0.0 0.0 0.0 0.0 0.423611111111 1.0 1.0 + 0.458333333333 0.320261437908 0.263888888889 0.0915032679739 0.0 + 0.0078125 0.0 0.0 0.9296875 0.992647058824 0.6953125 + 0.0220588235294 0.0 0.0 0.0 0.0416666666667 1.0 1.0 0.520833333333 + 0.0 0.0 0.0 0.0 0.109375 1.0 1.0 0.5 0.0 0.0 0.0 0.0 + 0.0347222222222 0.770833333333 0.849673202614 0.583333333333 + 0.313725490196 + + + 0.60706616688 0.12926014938 0.0162885556384 0.0102220336928 + 0.398770273992 0.339067651168 0.0557455660218 0.0275806681847 + 0.0151122540803 0.0117629328013 0.0279829888735 0.4519392439 + 0.119809891938 0.0384680279858 + + + + + + + + + 14 1 27 2 26 1 62 2 26 2 26 2 26 2 26 2 26 2 26 2 17 4 5 3 16 5 4 3 + 13 1 2 5 4 4 4 1 6 3 2 3 5 4 4 2 7 1 4 1 5 4 5 1 5 3 2 1 1 1 5 4 4 4 + 2 7 1 1 5 4 4 11 1 1 1 1 5 4 4 13 1 1 5 4 5 12 1 1 5 5 6 1 2 9 5 5 10 + 9 4 4 12 8 5 3 13 6 6 3 13 4 8 3 6 2 6 1 10 3 5 3 5 5 7 4 4 4 1 6 9 3 + 5 4 2 4 10 3 5 4 2 5 9 4 6 2 3 5 8 6 4 2 4 7 5 4 12 8 4 4 12 7 5 3 13 + 7 5 3 15 1 1 3 1 1 4 2 15 1 3 3 3 3 17 6 2 4 14 14 6 3 1 2 1 10 1 4 6 + 17 2 2 9 3 2 10 2 3 13 5 7 2 8 2 5 5 6 2 9 3 2 6 6 2 14 6 1 2 3 2 15 + 1 1 1 1 3 26 2 25 4 20 8 25 2 26 2 26 2 26 2 9 0 + + + + 1540.0 + + + 0.509090909091 + + + 465.0 + + + 0.840860215054 + + + 1.00417457306 + + + 0.551095181203 0.536399840701 0.0925945469487 0.30353312273 + 0.00907421953187 -0.00484696994236 0.0132442184077 -0.0103139474879 + -0.00244563352619 + + + 28.0 + + + 2.14285714286 1.23636363636 + + + 1.42857142857 3.57142857143 2.71428571429 0.857142857143 + 0.145454545455 2.03636363636 1.52727272727 0.872727272727 + + + 55.0 + + + 9.0 22.0 0.155405405405 14.0 9.0 3.0 + + + 0.0 0.981818181818 + + + 0.301948051948 + + + 0.0 0.285714285714 0.224489795918 0.0714285714286 0.043956043956 + 0.673469387755 0.5 0.285714285714 0.0989010989011 0.214285714286 + 0.418367346939 0.520408163265 0.21978021978 0.551020408163 + 0.530612244898 0.132653061224 + + + 0.0 0.0 0.47619047619 0.047619047619 0.190476190476 0.0 0.0 0.0 0.0 + 0.0 0.357142857143 0.25 0.535714285714 0.107142857143 0.25 0.0 0.0 + 0.0 0.666666666667 0.428571428571 0.380952380952 0.0952380952381 + 0.333333333333 0.0 0.0 0.142857142857 0.642857142857 0.892857142857 + 0.857142857143 0.535714285714 0.678571428571 0.0714285714286 + 0.222222222222 0.238095238095 0.47619047619 0.52380952381 + 0.333333333333 0.904761904762 0.904761904762 0.190476190476 0.0 0.0 + 0.0 0.0 0.0357142857143 0.5 0.428571428571 0.571428571429 + 0.222222222222 0.761904761905 1.0 0.809523809524 0.666666666667 + 0.666666666667 0.285714285714 0.0 0.0 0.0 0.25 0.321428571429 0.5 + 0.357142857143 0.25 0.0 + + + 0.544270336741 0.109742282499 0.0233332745983 0.02694067665 + 0.246912670149 0.225679659265 0.0399235356952 0.0260736829988 + 0.0908677168125 0.0312169037949 0.114506408079 0.201726738914 + 0.0462230339685 0.0258503879458 + + + + + + + + + 8 1 9 4 7 4 7 4 7 4 7 4 7 4 7 4 7 3 7 4 7 4 7 4 6 5 6 6 6 4 7 4 6 5 7 + 3 8 4 6 6 4 6 5 7 5 6 4 6 5 6 5 6 5 6 6 4 7 4 7 4 7 3 8 3 8 4 7 3 8 3 + 8 3 7 4 7 5 6 5 6 5 6 5 6 4 7 4 7 4 6 6 5 5 7 4 7 4 6 5 6 5 6 5 6 6 5 + 5 6 5 6 5 6 5 6 6 4 7 5 4 6 5 7 4 6 1 1 3 6 5 6 5 6 5 6 6 5 5 5 6 5 6 + 5 6 4 7 5 6 6 5 6 5 6 6 5 5 6 5 6 5 7 4 6 5 6 6 5 6 4 7 4 7 4 7 4 7 4 + 6 5 6 5 6 6 5 6 5 6 5 5 5 6 6 5 6 5 5 6 5 6 5 6 6 5 6 6 5 6 5 6 5 6 5 + 6 4 7 4 7 5 6 4 7 4 7 4 7 5 6 5 6 4 7 4 7 4 7 4 7 5 6 5 6 4 7 4 7 5 5 + 6 5 6 5 6 5 6 5 6 5 6 5 6 5 5 6 5 6 5 6 5 6 5 7 3 9 2 9 2 96 6 5 6 5 + 6 6 2 9 2 6 0 + + + + 1639.0 + + + 0.0738255033557 + + + 685.0 + + + 0.548905109489 + + + 0.948368061958 + + + 0.478394160584 0.484010652989 0.00658537664801 2.2720550434 + -0.0759384744141 0.00012815012939 0.0557007858345 -0.00324891965309 + -0.0246791827921 + + + 11.0 + + + 3.27272727273 0.00671140939597 + + + 1.09090909091 2.54545454545 3.63636363636 2.18181818182 0.0 + 0.0268456375839 0.0 0.0 + + + 149.0 + + + 6.0 14.0 0.196078431373 2.0 22.0 1.0 + + + 0.0 0.993288590604 + + + 0.417937766931 + + + 0.0 0.0810810810811 0.202702702703 0.157894736842 0.0630630630631 + 0.711711711712 0.990990990991 0.754385964912 0.765765765766 + 0.864864864865 0.648648648649 0.368421052632 0.603603603604 + 0.0720720720721 0.0 0.0 + + + 0.0 0.0 0.0 0.0526315789474 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.263157894737 0.421052631579 0.388888888889 0.473684210526 + 0.157894736842 0.0 0.0 0.25 0.868421052632 0.973684210526 1.0 1.0 + 0.473684210526 0.0 0.368421052632 1.0 1.0 1.0 1.0 1.0 + 0.578947368421 0.166666666667 0.947368421053 1.0 1.0 1.0 1.0 1.0 + 0.315789473684 0.722222222222 1.0 1.0 0.605263157895 0.657894736842 + 0.277777777778 0.289473684211 0.157894736842 1.0 0.684210526316 + 0.333333333333 0.105263157895 0.0 0.0 0.0 0.0 0.666666666667 + 0.315789473684 0.0 0.0 0.0 0.0 0.0 0.0 + + + 0.454107926565 0.249522305638 0.00930887393111 0.00833293997693 + 0.360117950033 0.400788733281 0.210493675792 0.0724424292843 + 0.0307647746105 0.0157484041716 0.406200434778 0.349991612783 + 0.365661000294 0.183011408775 + + + + + + + + + 11 4 14 8 9 13 11 1 7 3 15 5 19 2 19 1 16 1 2 3 12 10 9 15 6 15 5 14 + 7 7 1 5 8 14 7 14 6 15 6 9 1 4 6 2 1 2 8 1 410 1 18 4 14 7 14 7 13 9 + 11 9 12 4 1 2 15 8 13 8 14 7 14 6 15 6 15 5 16 5 16 4 18 2 20 1 16 0 + + + + 1134.0 + + + 0.388888888889 + + + 263.0 + + + 0.665399239544 + + + 0.554041353383 + + + 0.454372623574 0.421551043834 0.0917895096525 1.11329065797 + -0.22537366049 0.00706150407466 -0.122716224987 0.00602302551981 + 0.557728863638 + + + 21.0 + + + 1.33333333333 0.12962962963 + + + 0.761904761905 2.28571428571 1.71428571429 0.571428571429 + 0.222222222222 0.222222222222 0.0 0.0740740740741 + + + 54.0 + + + 2.0 12.0 0.263157894737 3.0 2.0 0.0 + + + 0.0 0.981481481481 + + + 0.231922398589 + + + 0.0153846153846 0.0571428571429 0.0461538461538 0.642857142857 + 0.430769230769 0.314285714286 0.138461538462 0.542857142857 + 0.661538461538 0.271428571429 0.0 0.0 0.448717948718 0.190476190476 + 0.0 0.0 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0555555555556 0.0 0.190476190476 + 0.0 0.0 0.142857142857 0.952380952381 0.857142857143 0.166666666667 + 0.428571428571 0.642857142857 0.0 0.0 0.285714285714 1.0 + 0.642857142857 0.333333333333 0.666666666667 0.619047619048 0.0 0.0 + 0.238095238095 0.619047619048 0.0952380952381 0.5 0.714285714286 + 0.571428571429 0.0 0.0 0.0 0.0 0.0 0.666666666667 0.785714285714 + 0.5 0.0 0.0 0.0 0.0 0.0 0.555555555556 0.857142857143 + 0.619047619048 0.0 0.0 0.0 0.0 0.0 0.0 0.333333333333 + 0.142857142857 0.0 0.0 0.0 0.0 0.0 + + + 0.340530001062 0.284626390834 0.303194905728 0.115427738497 + 0.0230854650625 0.488494842511 0.210852326826 0.512007767667 + 0.0235958887895 0.136399685883 0.129226616487 0.341414189039 + 0.387974124393 0.165535588093 + + + + + + + + + 7 2 10 2 47 2 10 3 8 3 10 1 11 1 23 3 9 3 294 1 10 1 12 1 82 2 9 3 9 + 3 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 9 3 8 4 9 3 9 3 8 + 4 9 3 21 1 12 1 11 1 172 3 11 1 50 1 1 2 8 4 7 5 8 3 9 3 9 3 82 1 11 + 2 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 + 9 3 9 4 8 3 9 3 5 1 3 3 4 1 4 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 + 3 9 3 9 3 8 4 8 4 9 4 10 2 8 4 8 4 8 5 6 7 5 6 7 5 6 6 6 6 6 6 6 6 5 + 6 7 5 7 6 6 5 8 3 9 3 9 3 9 3 9 3 9 3 9 2 10 2 10 3 11 1 7 0 + + + + 1980.0 + + + 0.0727272727273 + + + 327.0 + + + 1.03669724771 + + + 0.910361842105 + + + 0.343619683069 0.670563884538 0.0110367326823 5.54093606312 + -0.131170979354 0.00164305804865 0.491714818449 -0.020817856479 + -12.14772944 + + + 12.0 + + + 2.75 0.0181818181818 + + + 2.33333333333 5.0 1.66666666667 2.0 0.0 0.0 0.0484848484848 + 0.0242424242424 + + + 165.0 + + + 1.0 3.0 0.137254901961 14.0 29.0 1.0 + + + 0.0 0.993939393939 + + + 0.165151515152 + + + 0.0 0.0162601626016 0.227642276423 0.420634920635 0.0243902439024 + 0.39837398374 0.487804878049 0.761904761905 0.0975609756098 0.0 0.0 + 0.0793650793651 0.0650406504065 0.0 0.0406504065041 + 0.00793650793651 + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.047619047619 0.0 0.0 0.025 + 0.0238095238095 0.190476190476 0.5 0.52380952381 0.714285714286 0.0 + 0.0 0.2 0.238095238095 0.380952380952 1.0 0.952380952381 + 0.952380952381 0.0 0.0714285714286 0.75 0.238095238095 + 0.261904761905 0.525 0.619047619048 0.714285714286 0.0 0.0 0.0 0.0 + 0.0 0.0 0.047619047619 0.380952380952 0.3 0.0 0.0 0.0 0.0 0.0 0.0 + 0.0238095238095 0.25 0.0 0.0 0.0 0.047619047619 0.0 0.047619047619 + 0.0 0.075 0.0 0.0 0.0 0.0714285714286 0.025 0.0 0.0 + + + 0.674291571513 0.139918350629 0.200296617763 0.0667448635933 + 0.794297583935 0.296272577201 0.100591327929 0.324963833861 + 0.037670954193 0.0875132193354 0.571318515099 0.610448569581 + 0.115233528103 0.0980929218552 + + + + + diff --git a/rodan/jobs/convert_to_unicode.py b/rodan-main/code/rodan/jobs/convert_to_unicode.py similarity index 80% rename from rodan/jobs/convert_to_unicode.py rename to rodan-main/code/rodan/jobs/convert_to_unicode.py index 09f8f2ffb..c65d22241 100644 --- a/rodan/jobs/convert_to_unicode.py +++ b/rodan-main/code/rodan/jobs/convert_to_unicode.py @@ -1,10 +1,11 @@ # Adapted from http://stackoverflow.com/questions/1254454/fastest-way-to-convert-a-dicts-keys-values-from-unicode-to-str # noqa - +import six import collections def convert_to_unicode(data): - if isinstance(data, basestring): # noqa + if isinstance(data, six.string_types): + # Python2 idiom `unicode` is now `str` in python3 return unicode(data) # noqa elif isinstance(data, collections.Mapping): return dict(map(convert_to_unicode, data.items())) diff --git a/rodan/jobs/core.py b/rodan-main/code/rodan/jobs/core.py similarity index 88% rename from rodan/jobs/core.py rename to rodan-main/code/rodan/jobs/core.py index bce6d0db5..218eefe54 100644 --- a/rodan/jobs/core.py +++ b/rodan-main/code/rodan/jobs/core.py @@ -6,7 +6,6 @@ import subprocess import sys import tempfile -import time import zipfile from celery import task, registry @@ -16,6 +15,7 @@ from django.core.mail import EmailMessage from django.core.exceptions import ObjectDoesNotExist from django.db.models import Q, Case, Value, When, BooleanField +import PIL from pybagit.bagit import BagIt import six @@ -40,6 +40,7 @@ from rodan.jobs.base import TemporaryDirectory from rodan.jobs.diva_generate_json import GenerateJson from rodan.jobs.resource_identification import fileparse + # from rodan.celery import app @@ -102,6 +103,9 @@ def on_failure(self, exc, task_id, args, kwargs, einfo): error_details=einfo.traceback, ) +# class test_task(Task): +# name = "rodan.core.test_task" +# queue = "celery" # @task(name="rodan.core.create_thumbnails") # def create_thumbnails(resource_id): @@ -132,16 +136,10 @@ def on_failure(self, exc, task_id, args, kwargs, einfo): # return False -# if ENABLE_DIVA set, try to import the executables kdu_compress and convert. +# if ENABLE_DIVA set, try to import the executables convert. if getattr(settings, "ENABLE_DIVA"): from distutils.spawn import find_executable - BIN_KDU_COMPRESS = getattr(settings, "BIN_KDU_COMPRESS", None) or find_executable( - "kdu_compress" - ) - if not BIN_KDU_COMPRESS: - raise ImportError("cannot find kdu_compress") - BIN_GM = getattr(settings, "BIN_GM", None) or find_executable("gm") if not BIN_GM: raise ImportError("cannot find gm") @@ -149,6 +147,19 @@ def on_failure(self, exc, task_id, args, kwargs, einfo): @task(name="rodan.core.create_diva") def create_diva(resource_id): + """ + This celery task creates the DIVA folder and a JPEG2000 image within it. + + The created JPEG2000 file is for viewing purposes inside of IIPSRV only. + This JPEG2000 file is NOT used for analysis or other Rodan jobs. + + To enable JPEG2000 in Python Pillow you need to install OpenJPEG anyway. + https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#jpeg-2000 + + There is a colour profile issue that stops us from using OpenJPEG directly. For this reason, we + are using Grok to create the JPEG2000 for IIPSRV with the right colour profile. + """ + if not getattr(settings, "ENABLE_DIVA"): return False @@ -178,123 +189,49 @@ def create_diva(resource_id): ] } - task_image = inputs["Image"][0]["resource_path"] with tempfile.NamedTemporaryFile(suffix=".tiff") as tmp_file: name = os.path.basename(tmp_file.name) name, ext = os.path.splitext(name) - retries = 3 - while retries > 0: - try: - subprocess.check_call( - args=[ - BIN_GM, - "convert", - "-depth", "8", # output RGB - "-compress", "None", - task_image, # image file input - tmp_file.name # tiff file output - ] - ) - retries = -1 - except subprocess.CalledProcessError as e: - print(e) - print("Sleeping for 10 seconds...") - retries -= 1 - time.sleep(10) - - if retries == 0: - raise Exception("Maximum number of retries exceeded") - - # With Kakadu + # Files + tiff_file = tmp_file.name + jp2_file = "/tmp/" + name + ".jp2" # same file with a different extension + + # subprocess.check_call( + # args=[ + # BIN_GM, + # "convert", + # "-depth", "8", # output RGB + # "-compress", "None", + # # image file input + # inputs["Image"][0]["resource_path"], + # tiff_file # tiff file output + # ] + # ) + im = PIL.Image.open(inputs["Image"][0]["resource_path"]) + rgb_im = im.convert("RGB") + rgb_im.save(tiff_file) + + # OpenJPEG can only convert certain file formats. + # Tiff is one of those formats. + # This means we can convert to JPEG2000 for IIPSRV after converting the + # original to tiff. subprocess.check_call( args=[ - BIN_KDU_COMPRESS, - "-i", tmp_file.name, - "-o", name + ".jp2", - "-quiet", - "Clevels=5", - "Cblk={64,64}", - "Cprecincts={256,256},{256,256},{128,128}", - "Creversible=yes", - "Cuse_sop=yes", - "Corder=LRCP", - "ORGgen_plt=yes", - "ORGtparts=R", - "-rate", "-,1,0.5,0.25" + # With Grok + OpenJPEG # noqa + "/vendor/grok/build/bin/grk_compress", + "-i", tiff_file, + "-o", jp2_file, + "-n", "5", + "-c", "[256,256],[256,256],[128,128]", + "-SOP", + "-p", "LRCP", + "-r", "16,8,4,2" ] ) - # With OpenJPEG - # creates a dark red tint on the image, it literally replaces the color profile. - # Should not be used until this bug is fixed. - # /opt/openjpeg/build/bin/opj_compress -i original_file.png -o original_file.jp2 -n 5 -b 64,64 -c [256,256],[256,256],[128,128] -I -SOP -p LRCP -r 1,2,4,8 # noqa - # - # subprocess.check_call( - # args=[ - # "/opt/openjpeg/build/bin/opj_compress", - # "-i", tmp_file, - # "-o", name + ".jp2", - # "-n", "5", # Number of DWT decompositions +1, Clevels in kakadu - # "-b", "64,64", # Code-block size, Cblk in kakadu - # "-c", "[256,256],[256,256],[128,128]", # Precinct size, Cprecincts in kakadu - # # "-I" # Irreversable DWT, meaning reversable must be the default? - # # Creversible in kakadu - # "-SOP", # Add SOP markers - # "-p", "LRCP", # Corder in kakadu - # # ORGgen_plt? - # # this argument segfaults "-TP", "R", # Divide packets into tile-parts, - # # ORGplt_parts in kakadu - # "-r", "1,2,4,8", # "-rate", "-,1,0.5,0.25" - - # # Kakadu - # # A dash, "-", may be used in place of the first bit-rate in the list to indicate - # # that the final quality layer should include all compressed bits. - # ] - # ) - - # With OpenJPEG + grok - # Uses openjpeg and fixes the color profile issue but resources are - # avg. 5 times larger than with kakadu. - # The average speed it takes to convert an image seems fast enough for users - # /opt/grok/build/bin/grk_compress -i original_file -o ngrok.jp2 -n 5 -c [256,256],[256,256],[128,128] -SOP -p LRCP -r 16,8,4,2 # noqa - # - # subprocess.check_call( - # args=[ - # "/opt/grok/build/bin/grk_compress", - # "-i", tmp_file, - # "-o", "/tmp/" + name + ".jp2", - # "-n", "5", - # "-c", "[256,256],[256,256],[128,128]", - # "-SOP", - # "-p", "LRCP", - # "-r","16,8,4,2" - # ] - # ) - - # BUG: This command occasionally get's a `IOError: [Errno 2] No such file or directory` - # Can not reliably trigger this error. It's some sort of race condition, maybe struggling - # to figure out which job creates the resource folder? - # - # 1) Did kakadu finish converting the file? - # 2) Does the folder exist? - # - # try: - # shutil.move(name + ".jp2", outputs['JPEG2000 Image'][0]['resource_path']) - # except IOError: - # os.makedirs(outputs['JPEG2000 Image'][0]['resource_path']) - # shutil.move(name + ".jp2", outputs['JPEG2000 Image'][0]['resource_path']) - # - # if not os.path.exists(outputs['JPEG2000 Image'][0]['resource_path']): - # os.makedirs(outputs['JPEG2000 Image'][0]['resource_path']) - # shutil.move(name + ".jp2", outputs['JPEG2000 Image'][0]['resource_path']) - - shutil.move(name + ".jp2", outputs['JPEG2000 Image'][0]['resource_path']) - - # Cleanup temporary files - # os.remove(tmp_file) - # os.remove(name + ".jp2") + shutil.move(jp2_file, outputs['JPEG2000 Image'][0]['resource_path']) gen = GenerateJson( input_directory=resource_object.diva_path, @@ -1037,6 +974,10 @@ def create_archive(resource_uuids): return temporary_storage +class test_work(Task): + name = "rodan.core.test_work" + queue = "celery" + # app.tasks.register(create_resource()) # app.tasks.register(package_results()) # app.tasks.register(expire_package) diff --git a/rodan/jobs/deep_eq.py b/rodan-main/code/rodan/jobs/deep_eq.py similarity index 100% rename from rodan/jobs/deep_eq.py rename to rodan-main/code/rodan/jobs/deep_eq.py diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/.gitignore b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/.gitignore new file mode 100755 index 000000000..3075a34ae --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/.gitignore @@ -0,0 +1,107 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +*.png +*.xml +.DS_Store diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/DirtyLayerRepair.py b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/DirtyLayerRepair.py new file mode 100755 index 000000000..8fd6bbce8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/DirtyLayerRepair.py @@ -0,0 +1,89 @@ +import sys + +from gamera.core import init_gamera, load_image, RGBPixel +from gamera.plugins.image_utilities import union_images + + +init_gamera() + + +class DirtyLayerRepairman(object): + + def __init__(self, **kwargs): + self.kwargs = kwargs + + self.despeckle_size = kwargs['despeckle_size'] + self.density = kwargs['density'] + + def run(self, base, dirty): + # just in case + base = base.to_onebit() + dirty = dirty.to_onebit() + + # save a copy of the original just in case + orig_image = dirty.image_copy() + + # preprocessing + # remove smudges and skips + bg_image = self._get_background(dirty) + proc_image = self._remove_high_density_CCs(dirty, bg_image) + + # get the inverse + output_dirt = self._XOR_images(orig_image, proc_image) + + # combine dirt with base image + base.or_image(output_dirt, True) + + # post processing + output_image = self._despeckle_image(base) + + return output_image + + def _get_background(self, image): + # returns a white canvas of the original image size + output = image.image_copy() + output.fill(RGBPixel(0, 0, 0)) + return output + + def _despeckle_image(self, image): + image.despeckle(self.despeckle_size) + return image + + def _remove_high_density_CCs(self, image, bg): + CCs = image.cc_analysis() + new_CCs = [] + + for g in CCs: + # throw away glyphs + if g.compactness()[0] >= self.density: + continue + else: + new_CCs.append(g) + + combine = union_images([bg] + new_CCs) + return combine + + def _XOR_images(self, image1, image2): + return image1.xor_image(image2) + + +if __name__ == "__main__": + inImage, inImage2 = None, None + + if len(sys.argv) == 3: + inImage = sys.argv[1] + inImage2 = sys.argv[2] + + if inImage and inImage2: + dirty = load_image(inImage) + base = load_image(inImage2) + + kwargs = { + 'despeckle_size': 500, + 'density': 0.3, + } + + dlr = DirtyLayerRepairman(**kwargs) + image = dlr.run(base, dirty) + + image.save_PNG('./output/clean_neumes.png') diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/LICENSE b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/LICENSE new file mode 100755 index 000000000..8f4625e39 --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Distributed Digital Music Archives and Libraries Lab + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/ProjectionSplitting.py b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/ProjectionSplitting.py new file mode 100755 index 000000000..1aa1a4c8b --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/ProjectionSplitting.py @@ -0,0 +1,439 @@ +from gamera.core import init_gamera, load_image, RGBPixel +from gamera import gamera_xml + +import numpy as np + +from SliceFinding import SliceFinder + +import sys +import datetime +import os +import glob + +init_gamera() + + +class ProjectionSplitter (object): + # Given an image of a neume, should return + # a list of separated neume components + + def __init__(self, **kwargs): + + self.kwargs = kwargs + + # Things to use later + self.image = None + self.analysis_image = None + self.sf = None + + self.min_glyph_size = kwargs['min_glyph_size'] # min number of x or y pixels for a glyph + self.max_recursive_cuts = kwargs['max_recursive_cuts'] # max number of sub-cuts + + self.rotation = kwargs['rotation'] + + # analysis image processing + self.kfill_amount = 3 + + # if one dimension has more slices than the other, cut that one first + self.prefer_multi_cuts = True if kwargs['slice_prioritization'] == 'Multi-Cut' else False + self.prefer_x = True if kwargs['slice_prioritization'] == 'Vertical' else False + self.prefer_y = True if kwargs['slice_prioritization'] == 'Horizontal' else False + + self.multi_cut_min = 0 + + self.check_axis = kwargs['check_axis'] + + # DEBUG + self.save_cuts = kwargs['save_cuts'] + self.dont_cut = False + + self.cut_number = 0 + self.recursion_number = 0 + + ########## + # Public + ########## + + def run(self, image): + # run once + image = self._preprocess_image(image) + analysis_image = self._preprocess_analysis_image(image) + + sf = SliceFinder(**self.kwargs) + sf.set_max_projs(analysis_image) + self.sf = sf + + return self._recursive_run(image, 0) + + def _recursive_run(self, image, rec): + # run recursively + + # process image + images = self._run(image) + + # repeat + if len(images) > 1 and rec < self.max_recursive_cuts: + new_images = [] + for i, im in enumerate(images): + # print 'recurse:', i + new_images += self._recursive_run(im, rec + 1) + + return new_images + + else: + # print 'end recursion' + return images + + def _run(self, image): + # run each recursion + analysis_image = self._preprocess_analysis_image(image) + best_slice_rot = self._get_best_slice(self.sf.get_slices(analysis_image, self.rotation)) + + if self.check_axis: + best_slice_str = self._get_best_slice(self.sf.get_slices(analysis_image, 0)) + best_slice, rotation = self._get_best_rotation(best_slice_rot, self.rotation, best_slice_str, 0) + + else: + best_slice = best_slice_rot + rotation = self.rotation + + images = self._split_image(image, best_slice, rotation) + images = self._postprocess_images(images) + # if images: + # print images + + return images + + ############### + # Best Slices + ############### + + def _get_best_rotation(self, slice1, rot1, slice2, rot2): + + print rot1, slice1, rot2, slice2 + + if not slice1: + if not slice2: + return (None, 0) + else: + return (slice2, rot2) + elif not slice2: + return (slice1, rot1) + + elif slice2[0][1] > slice1[0][1]: + return (slice2, rot2) + + else: + return (slice1, rot1) + + def _get_best_slice(self, (x_slices, y_slices)): + best_x_slice = self._best_slice(x_slices) + best_y_slice = self._best_slice(y_slices) + + if self.prefer_multi_cuts: + if len(x_slices) > len(y_slices) + self.multi_cut_min: + return (best_x_slice, 'x') + + elif len(y_slices) > len(x_slices) + self.multi_cut_min: + return (best_y_slice, 'y') + + if self.prefer_x: + if best_x_slice: + return (best_x_slice, 'x') + elif self.prefer_y: + if best_y_slice: + return (best_y_slice, 'y') + + if best_x_slice or best_y_slice: + + if not best_y_slice: + # print 'No y\tx:', best_x_slice + return (best_x_slice, 'x') + + elif not best_x_slice: + # print 'No x\ty:', best_y_slice + return (best_y_slice, 'y') + + elif best_x_slice > best_y_slice: + return (best_x_slice, 'x') + + elif best_x_slice < best_y_slice: + return (best_y_slice, 'y') + + # FIX THIS + + else: + return None + + # print 'test' + + def _best_slice(self, slices): + best_slice = None + for s in slices: + if not best_slice or s[1] > best_slice[1]: + best_slice = s + + return best_slice + + #################### + # Image Processing + #################### + + def _preprocess_image(self, image): + image = self._to_onebit(image) + # image = image.kfill_modified(self.kfill_amount) + + # image = image.outline(0) + + return image + + def _preprocess_analysis_image(self, image): + image = image.dilate() + # image = image.to_rgb().simple_sharpen(1.0).to_onebit() + # image = image.kfill_modified(self.kfill_amount) + # image = image.convex_hull_as_image(True) + # image = image.medial_axis_transform_hs() + + return image + + def _split_image(self, image, best_slice, rotation): + + # if no slice, don't split image + if not best_slice: + splits = [image] + fix_bb = False + + else: + splits = self._split(image, best_slice[0][0], best_slice[1], rotation) + + return splits + + def _split(self, image, pos, dim, rotation): + theta = rotation + + # image properties + cols, rows = image.ncols, image.nrows + i_ul = image.ul_x, image.ul_y + cp = self._get_center_of_image(image) # center point + + # rotated image properties + r_image = self._rotate_image(image, theta) + r_cols, r_rows = r_image.ncols, r_image.nrows + rcp = self._get_center_of_image(r_image) # rotated center point + + # rotated image points + r_p1 = (pos, r_rows) if dim is 'x' else (0, pos) # left / bottom + r_p2 = (pos, 0) if dim is 'x' else (r_cols, pos) # top / right + # print r_p1, r_p2 + + # # show rotated cuts + # r_image.draw_line(r_p1, r_p2, RGBPixel(255, 255, 255), 2.0) + # r_image.save_PNG('./output/rcut_' + str(datetime.datetime.now().time()).replace(':', '.') + '.png') + + # relate points from ul to center of rotated image + r_p1 = self._translate_point(r_p1, (0, 0), rcp) + r_p2 = self._translate_point(r_p2, (0, 0), rcp) + # print r_p1, r_p2 + + # rotate points around origin + p1 = self._rotate_point_around_origin(r_p1, -theta) + p2 = self._rotate_point_around_origin(r_p2, -theta) + # print p1, p2 + + # relate points from center of image to ul point + p1 = self._translate_point(p1, cp, (0, 0)) + p2 = self._translate_point(p2, cp, (0, 0)) + # print p1, p2 + + m = (p2[1] - p1[1]) / (p2[0] - p1[0]) + # print m + + b1 = p1[1] - (m * p1[0]) + b2 = p2[1] - (m * p2[0]) + # print('b1', b1), ('b2', b2) + + def f_x(x): return m * x + b1 + + # DRAW on normal image + draw_p1, draw_p2 = (0, f_x(0)), (image.ncols, f_x(image.ncols)) + draw_p1 = self._translate_point(draw_p1, i_ul, (0, 0)) + draw_p2 = self._translate_point(draw_p2, i_ul, (0, 0)) + + cut_image = image.image_copy() + cut_image.draw_line(draw_p1, draw_p2, RGBPixel(0, 0, 0), 3) # cut glyph with white line + + # show cuts + if self.save_cuts: + rgb = image.to_rgb() + rgb.draw_line(draw_p1, draw_p2, RGBPixel(255, 0, 0), 1) + rgb.save_PNG('./output/cut_' + str(self.cut_number + 1) + '.png') + + if self.dont_cut: + return [cut_image] + + splits = [x.image_copy() for x in cut_image.cc_analysis()] + + # for s in splits: + # s = self._trim_image(s) + + self.cut_number += 1 + + return splits + + def _to_onebit(self, image): + return image.to_onebit() + + def _rotate_image(self, image, theta): + return image.rotate(theta, None, 1) + + def _trim_image(self, image): + return image.trim_image(None) + + def _maybe_invert_image(self, image): + # check the amount of blackness of the image. If it's inverted, + # the black area will vastly outweigh the white area. + area = image.area().tolist()[0] + black_area = image.black_area()[0] + + if area == 0: + raise AomrError("Cannot divide by a zero area. Something is wrong.") + + # if greater than 60% black, invert the image. + if (black_area / area) > 0.6: + image.invert() + + return image + + ##################### + # Images Processing + ##################### + + def _postprocess_images(self, images): + images = self._filter_tiny_images(images) + + processed_images = [] + for i, im in enumerate(images): + + im = self._trim_image(im) + processed_images.append(im) + + return processed_images + + def _filter_tiny_images(self, images): + filtered_images = [] # contains glyphs deemed large enough + for image in images: + if image.ncols > self.min_glyph_size or image.nrows > self.min_glyph_size: + filtered_images.append(image) + + return filtered_images + + ######## + # Math + ######## + + def _rotate_point_around_origin(self, (x1, y1), degrees): + rads = np.radians(degrees) + + x2 = -1 * y1 * np.sin(rads) + x1 * np.cos(rads) + y2 = y1 * np.cos(rads) + x1 * np.sin(rads) + + return x2, y2 + + def _translate_point(self, point, old_origin, new_origin): + neutral_p = point[0] + old_origin[0], point[1] + old_origin[1] + relative_p = neutral_p[0] - new_origin[0], neutral_p[1] - new_origin[1] + return relative_p + + def _get_center_of_image(self, image): + l, h = image.ncols, image.nrows + p = int(0.5 + l / 2.0), int(0.5 + h / 2.0) + + return p + + +if __name__ == "__main__": + inImage, inXML, outputDIR = None, None, None + + (in0) = sys.argv[1] + if '.png' in in0: + inImage = in0 + image = load_image(inImage) + elif '.xml' in in0: + inXML = in0 + glyphs = gamera_xml.glyphs_from_xml(inXML) + + # remove files already there so they dont get stacked up + filesPNG = glob.glob('./output/*.png') + filesXML = glob.glob('./output/*.xml') + for f in filesPNG + filesXML: + os.remove(f) + + kwargs = { + 'smoothing': 1, + 'min_glyph_size': 20, + 'max_recursive_cuts': 50, + 'rotation': 45, + + # will it cut? + 'min_slice_spread_rel': 0.2, # minimum spread for a cut + 'min_projection_segments': 4, # ++ less likely to cut ligs + 'low_projection_threshold': 0.5, # allows a cut if valley under a certain value + + 'slice_prioritization': 'Vertical', + 'check_axis': False, + + # Debug Options + 'print_projection_array': False, + 'plot_projection_array': False, # script only + 'save_cuts': True, + } + + # # for new manuscript + # kwargs = { + # 'smoothing': 1, + # 'min_glyph_size': 20, + # 'max_recursive_cuts': 50, + # 'rotation': 45, + + # # will it cut? + # 'min_slice_spread_rel': 0.1, # minimum spread for a cut + # 'min_projection_segments': 4, # ++ less likely to cut ligs + # 'low_projection_threshold': 0.5, # allows a cut if valley under a certain value + + # 'slice_prioritization': 'Vertical', + # 'check_axis': False, + + # # Debug Options + # 'print_projection_array': False, + # 'plot_projection_array': False, # script only + # 'save_cuts': True, + # } + + ps = ProjectionSplitter(**kwargs) + + if inImage: + + image = image.to_onebit() + image = ps._maybe_invert_image(image) + cc_images = image.cc_analysis() + cc_images = ps._filter_tiny_images(cc_images) + + output_glyphs = [] + for g in cc_images: + output_glyphs += ps.run(g) + + # output_glyphs = ps.run(image) + + # save all as images + for i, g in enumerate(output_glyphs): + g.save_PNG('./output/piece' + str(i + 1) + '.png') + + elif inXML: + + output_glyphs = [] + for g in glyphs: + output_glyphs += ps.run(g) + + gamera_xml.glyphs_to_xml('./output/output.xml', output_glyphs) + + # print('do stuff') diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/README.md b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/README.md new file mode 100755 index 000000000..4d18c7937 --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/README.md @@ -0,0 +1,2 @@ +# diagonal-neume-slicing +A tool for splitting neumes into neume components based on diagonal projection. \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/SliceFinding.py b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/SliceFinding.py new file mode 100755 index 000000000..a172c5a8a --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/SliceFinding.py @@ -0,0 +1,270 @@ +import numpy as np + +try: # script only imports + import matplotlib.pyplot as plt +except: + pass + + +class SliceFinder (object): + + def __init__(self, **kwargs): + # projection smoothing + self.smoothing = kwargs['smoothing'] # (1, inf) how much convolution to apply + + self.min_proj_seg_length = kwargs['min_projection_segments'] # should be relational + + self.low_projection_threshold = kwargs['low_projection_threshold'] + + self.min_slice_spread_rel = kwargs['min_slice_spread_rel'] + + self.print_projection_array = kwargs['print_projection_array'] + self.plot_projection_array = kwargs['plot_projection_array'] + + self.rotation = kwargs['rotation'] + + self.x_max_proj = None + self.y_max_proj = None + + ########## + # Public + ########## + + def get_projections(self, image, rotation): + col_projs, row_projs = self._get_diagonal_projection_arrays(image, rotation) + return col_projs, row_projs + + def get_slices(self, image, rotation): + col_projs, row_projs = self._get_diagonal_projection_arrays(image, rotation) + col_slices, row_slices = self._get_slices(col_projs, 'x'), self._get_slices(row_projs, 'y') + return col_slices, row_slices + + def get_extrema(self, image, rotation): + col_projs, row_projs = self._get_diagonal_projection_arrays(image, rotation) + col_extrema, row_extrema = self._get_extrema(col_projs), self._get_extrema(row_projs) + return col_extrema, row_extrema + + def set_max_projs(self, image): + col_extrema, row_extrema = self.get_extrema(image, self.rotation) + + ui_x_extrema = list(x[1] for x in col_extrema[1]) + ui_y_extrema = list(y[1] for y in row_extrema[1]) + + self.x_max_proj = max(ui_x_extrema) if ui_x_extrema else 0 + self.y_max_proj = max(ui_y_extrema) if ui_y_extrema else 0 + + ################## + # Public Helpers + ################## + + def print_projections(self, projection): + self._print_projection_array(projection) + + def flatten_extrema(self, extrema): + output = [] + i = 0 + while i < len(extrema[0]): + output.append(extrema[1][i]) + output.append(extrema[0][i]) + i += 1 + output.append(extrema[1][-1]) + + return output + + ############### + # Projections + ############### + + def _get_diagonal_projection_arrays(self, image, rotation): + # returns an x and y array of diagonal projections + # separated by segment (0s, ascending, descending) + + col_projs, row_projs = self._get_diagonal_projections(image, rotation) + + col_projs = self._smooth_projection(col_projs) + row_projs = self._smooth_projection(row_projs) + + col_arrays = self._arrayify_projection(col_projs) + row_arrays = self._arrayify_projection(row_projs) + + col_arrays = self._filter_projection_array(col_arrays) + row_arrays = self._filter_projection_array(row_arrays) + + # DEBUG + if self.print_projection_array: + print '--------------------------------------------------' + self._print_projection_array(col_arrays) + self._print_projection_array(row_arrays) + + if self.plot_projection_array: + self._plot_projection_array(self._arrays_to_array(col_arrays), + self._arrays_to_array(row_arrays)) + plt.show() + + return col_arrays, row_arrays + + def _smooth_projection(self, projection): + vals = list(np.convolve(projection, self.smoothing * [1])) + output_vals = [] + for v in vals: + output_vals.append(v / self.smoothing) + + return output_vals + + def _arrayify_projection(self, projection): + projection_spaces = [] + + start_pos = 0 + direction = 'up' + + for i, x in enumerate(projection[1:]): + + # found max + if projection[i] > x and direction is 'up': + projection_spaces.append(projection[start_pos:i + 1]) + start_pos = i + 1 + direction = 'down' + + # found min + elif projection[i] < x and direction is 'down': + projection_spaces.append(projection[start_pos:i + 1]) + start_pos = i + 1 + direction = 'up' + + # grab the last bit + projection_spaces.append(projection[start_pos:]) + + # now projection is of form [0s, up, down, up, ..., down, 0s] + # first value of each array is a potential split point + return projection_spaces + + def _filter_projection_array(self, projection): + # remove 'insignificant' segments by merging them + i = 0 + while i < len(projection) - 1: + i += 1 + p = projection[i] + + # print p + # too few pixels wide, or peak too low, throw out this segment + if len(p) < self.min_proj_seg_length: # or not p[-1] < self.low_projection_threshold: + projection = self._merge_index_with_neighbours(projection, i) + i -= 1 + + return projection + + def _print_projection_array(self, array): + for x in array: + print x + print '' + + def _plot_projection_array(self, array1, array2): + plt.plot(array1) + y = np.arange(len(array2)) + plt.plot(array2[::-1], y) + + ########## + # Slices + ########## + + def _get_slices(self, proj_arrays, dim): + extrema = self._get_extrema(proj_arrays) + slices = self._find_slices(extrema, dim) + return slices + + def _get_extrema(self, arrays): + nudge = -1 + minima, maxima = [], [] + for i, a in enumerate(arrays[:-1]): + + if i % 2 == 0: + maxima.append((len(a) + nudge, a[-1])) + else: + minima.append((len(a) + nudge, a[-1])) + + nudge += len(a) + + return minima, maxima + + def _find_slices(self, (minima, maxima), dim): + slices = [] + rel_max = self.x_max_proj if dim is 'x' else self.y_max_proj + + for i, m in enumerate(maxima[:-1]): + peak_L, peak_R = maxima[i], maxima[i + 1] + valley = minima[i] + + spread = min(peak_L[1], peak_R[1]) - valley[1] + + # print spread, self.min_slice_spread_rel * (self.x_max_proj if dim is 'x' else self.y_max_proj) + # print valley, self.low_projection_threshold * rel_max + + if (spread > self.min_slice_spread_rel * rel_max)and \ + (valley[1] < self.low_projection_threshold * rel_max): + slices.append((valley[0], spread)) + + return slices + + ################## + # Image Analysis + ################## + + def _get_diagonal_projections(self, image, rotation): + d_image = self._rotate_image(image, rotation) + projections = list(d_image.projection_cols()), list(d_image.projection_rows()) + return projections + + #################### + # Image Processing + #################### + + def _rotate_image(self, image, theta): + return image.rotate(theta, None, 1) + + ######## + # Misc + ######## + + def _arrays_to_array(self, arrays): + array = [] + for x in arrays: + array += x + + return array + + def _merge_index_with_neighbours(self, l, i): + # given a list of lists, combines the list at i + # with the list on its left and on its right + + # print 'merge', i, 'size', len(l), l[i] + # print 'before', l, '\n' + + # if not long enough, merge all + if len(l) < 4: + # print 'too short' + new_l = [[j for i in l for j in i]] + + elif i == 0: # first position + # print 'first' + new_l = [l[0] + l[1]] + l[2:] + elif i == 1: # second position + # print 'second' + new_l = [l[0] + l[1] + l[2]] + l[3:] + + elif i == len(l) - 1: # last position + # print 'last' + new_l = l[:- 2] + [l[-2] + l[-1]] + elif i == len(l) - 2: # second to last position + # print 'almost last' + new_l = l[:- 3] + [l[-3] + l[-2] + l[-1]] + + else: # middle position + # print 'middle' + new_l = l[:i - 1] + [l[i - 1] + l[i] + l[i + 1]] + l[i + 2:] + + # print 'after', new_l, '\n\n' + return new_l + + +if __name__ == "__main__": + pass diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/__init__.py b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/__init__.py new file mode 100755 index 000000000..3e2ca73ad --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/__init__.py @@ -0,0 +1,3 @@ +from base import DiagonalNeumeSlicing, DirtyLayerRepair + +__version__ = "0.0.1" diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/base.py b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/base.py new file mode 100755 index 000000000..9a071d3f7 --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/base.py @@ -0,0 +1,214 @@ +from rodan.jobs.base import RodanTask + +from gamera.core import init_gamera, Image, load_image +from gamera import gamera_xml + +from ProjectionSplitting import ProjectionSplitter +from DirtyLayerRepair import DirtyLayerRepairman + +init_gamera() + + +class DiagonalNeumeSlicing(RodanTask): + name = 'Diagonal Neume Slicing' + author = 'Noah Baxter' + description = 'A tool for splitting neumes into neume components based on diagonal projection.' + enabled = True + category = 'Image Processing' + interactive = False + + settings = { + 'title': 'Settings', + 'type': 'object', + 'required': ['Smoothing', 'Minimum Glyph Size', 'Maximum Recursive Cuts', 'Angle', 'Minimum Slice Spread', 'Low Valley Threshold', 'Minimum Segment Length', 'Slice Prioritization'], + 'properties': { + 'Smoothing': { + 'type': 'integer', + 'default': 1, + 'minimum': 1, + 'maximum': 20, + 'description': 'How much convolution to apply to projections. More smoothing results in softer cuts.' + }, + 'Minimum Glyph Size': { + 'type': 'integer', + 'default': 0, + 'minimum': 0, + 'maximum': 9999999, + 'description': 'Discard post-splitting glyphs with an x or y dimension less than the Minimum Glyph Size.' + }, + 'Maximum Recursive Cuts': { + 'type': 'integer', + 'default': 10, + 'minimum': 1, + 'maximum': 100, + 'description': 'How many subcuts are allowed on a glyph. Note that this does not equate to the number of cuts, as if no ideal cuts can be found, the image is returned unprocessed.' + }, + 'Angle': { + 'type': 'integer', + 'default': 45, + 'minimum': 0, + 'maximum': 90, + 'description': 'The angle of rotation for finding projections and cutting the image. Best between 30-70 degrees.' + }, + 'Minimum Slice Spread': { + 'type': 'number', + 'default': 0.3, + 'minimum': 0.0, + 'maximum': 1.0, + 'description': 'The minimum spread from valley to peak a slice point must have. Value is a percentage of the maximum projection.' + }, + 'Low Valley Threshold': { + 'type': 'number', + 'default': 1.0, + 'minimum': 0.0, + 'maximum': 1.0, + 'description': 'Forces a cut when a valley lies bellow a percentage of the maximum projection.' + }, + 'Minimum Segment Length': { + 'type': 'integer', + 'default': 5, + 'minimum': 0, + 'maximum': 9999999, + 'description': 'The minimum number of projection values a segment must have. Lower values will allow slice points to be closer together.' + }, + 'Slice Prioritization': { + 'enum': ['None', 'Horizontal', 'Vertical', 'Multi-Cut'], + 'default': 'Vertical', + 'description': 'Prioritize cuts in one dimension over cuts in the other, or picks the overall best slice from both. Horizontal tends to give better results as neumes mostly extend horizontally.' + }, + }, + } + + input_port_types = [{ + 'name': 'GameraXML - Connected Components', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False, + }] + + output_port_types = [{ + 'name': 'GameraXML - Connected Components', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False, + }] + + def run_my_task(self, inputs, settings, outputs): + + glyphs = gamera_xml.glyphs_from_xml(inputs['GameraXML - Connected Components'][0]['resource_path']) + + print settings + + kwargs = { + 'smoothing': settings['Smoothing'], + 'extrema_threshold': 0, + 'min_glyph_size': settings['Minimum Glyph Size'], + 'max_recursive_cuts': settings['Maximum Recursive Cuts'], + 'rotation': settings['Angle'], + + # will it cut? + 'min_slice_spread_rel': settings['Minimum Slice Spread'], # minimum spread for a cut + 'low_projection_threshold': settings['Low Valley Threshold'], # FORCE a cut if valley under a certain value + 'min_projection_segments': settings['Minimum Segment Length'], # ++ less likely to cut, -- more slice points + + # Cut prioritizing + 'slice_prioritization': settings['Slice Prioritization'], + 'prefer_multi_cuts': True if settings['Slice Prioritization'] == 'Multi-Cut' else False, + 'prefer_x': True if settings['Slice Prioritization'] == 'Horizontal' else False, + 'prefer_y': True if settings['Slice Prioritization'] == 'Vertical' else False, + + # Try rotated AND non-rotated projections + 'check_axis': False, + + # Debug Options + 'print_projection_array': False, + 'plot_projection_array': False, # script only + 'save_cuts': False, + } + + ps = ProjectionSplitter(**kwargs) + + output_glyphs = [] + for g in glyphs: + output_glyphs += ps.run(g) + + outfile_path = outputs['GameraXML - Connected Components'][0]['resource_path'] + output_xml = gamera_xml.WriteXMLFile(glyphs=output_glyphs, + with_features=True) + output_xml.write_filename(outfile_path) + + return True + + +class DirtyLayerRepair(RodanTask): + name = 'Dirty Layer Repair' + author = 'Noah Baxter' + description = 'A tool for \'repairing\' broken layers by adding errors from a dirty layer. For example, using a text layer to repair its neume layer.' + enabled = True + category = 'Image Processing' + interactive = False + + settings = { + 'title': 'Settings', + 'type': 'object', + 'required': ['Minimum Density', 'Despeckle Size'], + 'properties': { + 'Minimum Density': { + 'type': 'number', + 'default': 0.3, + 'minimum': 0.0, + 'maximum': 1.0, + 'description': 'Use only glyphs with a density less than the maximum from the dirty layer. Smaller values bring more dirt from the dirty layer but may eventually bring undesired glyphs.' + }, + 'Despeckle Size': { + 'type': 'integer', + 'default': 500, + 'minimum': 0, + 'maximum': 1000, + 'description': 'How much post despeckle to apply to the combined output image.' + } + } + } + + input_port_types = [{ + 'name': 'Base Layer', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }, + { + 'name': 'Dirty Layer', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + output_port_types = [{ + 'name': 'Repaired Base Layer', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + def run_my_task(self, inputs, settings, outputs): + + base = load_image(inputs['Base Layer'][0]['resource_path']) + dirty = load_image(inputs['Dirty Layer'][0]['resource_path']) + + kwargs = { + 'despeckle_size': 500, + 'density': 0.3, + } + + dlr = DirtyLayerRepairman(**kwargs) + image = dlr.run(base, dirty) + + outfile_path = outputs['Repaired Base Layer'][0]['resource_path'] + image.save_PNG(outfile_path) + + return True diff --git a/rodan-main/code/rodan/jobs/diagonal_neume_slicing/resource_types.yaml b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/resource_types.yaml new file mode 100755 index 000000000..39cb725a5 --- /dev/null +++ b/rodan-main/code/rodan/jobs/diagonal_neume_slicing/resource_types.yaml @@ -0,0 +1,12 @@ +- mimetype: application/gamera+xml + description: Gamera XML file + extension: xml +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: image/onebit+png + description: One-bit (black and white) PNG image + extension: png +- mimetype: image/greyscale+png + description: Greyscale PNG image + extension: png diff --git a/rodan/jobs/diva_generate_json.py b/rodan-main/code/rodan/jobs/diva_generate_json.py similarity index 100% rename from rodan/jobs/diva_generate_json.py rename to rodan-main/code/rodan/jobs/diva_generate_json.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/.gitignore b/rodan-main/code/rodan/jobs/gamera_rodan/.gitignore new file mode 100644 index 000000000..016a2d919 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/.gitignore @@ -0,0 +1,31 @@ +*.pyc +db.sqlite +*.swp +*.tif +*.tiff +*.cib +*.xcodeproj/* +.XcodeSupport/* +rodan.log +rodan_env +.DS_Store +gunicorn_start.sh +celery_start.sh +rodan/settings.py +rodan/static/Rodan + +/.DS_Store + +# autoconf +configure +config.status +config.log +autom4te.cache + +etc/supervisor/conf.d/rodan.conf +websocket_start.sh + +etc/nginx/sites-available/rodan +._* +# ignore emacs autosave file +*~ diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/LICENSE b/rodan-main/code/rodan/jobs/gamera_rodan/LICENSE new file mode 100644 index 000000000..b267df36d --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2020 Ryan Bannon, Andrew Fogarty, Gabriel Vigliensoni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/README.md b/rodan-main/code/rodan/jobs/gamera_rodan/README.md new file mode 100644 index 000000000..d732e3311 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/README.md @@ -0,0 +1,7 @@ +# gamera_rodan +Wrappers for Gamera tasks in Rodan. + +While Rodan does come with functionality that auto-generates wrappers for Gamera, it is limited in that it will: + +- exclude jobs that take image types as function arguments +- will fail in Rodan if the job is not pure Python (e.g. "TypeError: somemethod() takes no keyword arguments") diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/__init__.py new file mode 100755 index 000000000..1b3e15289 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/__init__.py @@ -0,0 +1,20 @@ +__version__ = "0.1.0" + +from gamera.core import init_gamera +init_gamera() +from rodan.jobs import module_loader + +module_loader('rodan.jobs.gamera_rodan.wrappers.classification') +module_loader('rodan.jobs.gamera_rodan.wrappers.masking') + +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.binarization') +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.cc_analysis') +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.image_conversion') +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.morphology') +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.threshold') +module_loader('rodan.jobs.gamera_rodan.wrappers.plugins.image_utilities') + +module_loader('rodan.jobs.gamera_rodan.wrappers.toolkits.music_staves.miyao') +module_loader('rodan.jobs.gamera_rodan.wrappers.toolkits.music_staves.roach_tatem') +module_loader('rodan.jobs.gamera_rodan.wrappers.toolkits.document_preprocessing_toolkit.stable_paths') +module_loader('rodan.jobs.gamera_rodan.wrappers.toolkits.custom.poly_mask') diff --git a/rodan/management/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/__init__.py similarity index 100% rename from rodan/management/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/helpers/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/helpers/argconvert.py b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/argconvert.py new file mode 100644 index 000000000..f0c7e595e --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/argconvert.py @@ -0,0 +1,116 @@ +from gamera import enums, args + +def convert_arg_list(arglist): + """ + Convert Gamera argument list to a JSON schema + + For Gamera argument class, see https://github.com/DDMAL/Gamera/blob/master/doc/src/args.txt + """ + if not arglist: + return {} + schema = { + 'type': 'object', + 'required': [], + 'properties': {} + } + for i, a in enumerate(arglist): + key = a.name.replace(' ', '_') # some Gamera fns have the argument name problem. + schema['required'].append(key) + value = {} + if a.has_default: + # so we don't have to use Gamera's NoneType + if str(a.default) == 'None': + value['default'] = None + else: + value['default'] = a.default + + if isinstance(a, args.Int): + value['type'] = 'integer' + if a.rng: + value['minimum'] = a.rng[0] + value['maximum'] = a.rng[1] + elif isinstance(a, args.Real): + value['type'] = 'number' + if a.rng: + value['minimum'] = a.rng[0] + value['maximum'] = a.rng[1] + elif isinstance(a, args.ImageType): + raise TypeError('Rodan does not support Gamera jobs with argument as ImageType') + elif isinstance(a, args.Bool): + value['type'] = 'boolean' + elif isinstance(a, args.Check): + value['type'] = 'boolean' + elif isinstance(a, args.Choice): + value['enum'] = a.choices + elif isinstance(a, args.FloatVector): + value['type'] = 'array' + value['items'] = {'type': 'number'} + if a.length != -1: + value['minItems'] = a.length + value['maxItems'] = a.length + elif isinstance(a, args.IntVector): + value['type'] = 'array' + value['items'] = {'type': 'integer'} + if a.length != -1: + value['minItems'] = a.length + value['maxItems'] = a.length + else: + raise TypeError('Rodan does not support Gamera argument type {0}'.format(str(a))) + + value['_order'] = i # JSON object is unordered. + schema['properties'][key] = value + return schema + + +def convert_to_arg_type(atype, value): + if atype in ['float', 'real']: + return float(value) + elif atype in ['int']: + return int(value) + elif atype in ['complex']: + return complex(value) + elif atype in ['str']: + return str(value) + elif atype in ['choice']: + return int(value) + else: + return value + + +def convert_input_type(input_type): + dict_repr = input_type.__dict__ + if 'klass' in dict_repr.keys(): + del dict_repr['klass'] + + # convert pixel types to Rodan mimetypes + dict_repr['resource_types'] = [] + dict_repr['has_float'] = False + dict_repr['has_complex'] = False + for pt in dict_repr['pixel_types']: + if pt == enums.ONEBIT: + dict_repr['resource_types'].append('image/onebit+png') + elif pt == enums.GREYSCALE: + dict_repr['resource_types'].append('image/greyscale+png') + elif pt == enums.GREY16: + dict_repr['resource_types'].append('image/grey16+png') + elif pt == enums.RGB: + dict_repr['resource_types'].append('image/rgb+png') + # Drop COMPLEX and FLOAT pixel types, as they are only Gamera's internal representation and cannot be saved to a PNG file. + # But tell the caller that it has COMPLEX or FLOAT types. + elif pt == enums.FLOAT: + dict_repr['has_float'] = True + elif pt == enums.COMPLEX: + dict_repr['has_complex'] = True + return dict_repr + +convert_output_type = convert_input_type + + +def convert_mimetype_to_pixel(mimetype): + mapp = { + 'image/onebit+png': enums.ONEBIT, + 'image/greyscale+png': enums.GREYSCALE, + 'image/grey16+png': enums.GREY16, + 'image/rgb+png': enums.RGB + } + return mapp[mimetype] diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/helpers/ensure_pixel_type.py b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/ensure_pixel_type.py new file mode 100644 index 000000000..efd53c43c --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/ensure_pixel_type.py @@ -0,0 +1,22 @@ +from rodan.jobs.gamera_rodan.helpers import argconvert +from gamera import enums + +def ensure_pixel_type(gamera_image, mimetype): + target_type = argconvert.convert_mimetype_to_pixel(mimetype) + if target_type != gamera_image.data.pixel_type: + if target_type == enums.ONEBIT: + return gamera_image.to_onebit() + elif target_type == enums.GREYSCALE: + return gamera_image.to_greyscale() + elif target_type == enums.GREY16: + return gamera_image.to_grey16() + elif target_type == enums.RGB: + return gamera_image.to_rgb() + elif target_type == enums.FLOAT: + return gamera_image.to_float() + elif target_type == enums.COMPLEX: + return gamera_image.to_complex() + else: + raise TypeError('Unsupported Gamera type: {0}'.format(target_type)) + else: + return gamera_image diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/helpers/poly_lists.py b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/poly_lists.py new file mode 100644 index 000000000..e1af07fea --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/helpers/poly_lists.py @@ -0,0 +1,62 @@ +from gamera.gameracore import Point + + +def create_polygon_outer_points_json_dict(poly_list): + ''' + The following function is used to retrieve polygon points data of the first + and last staff lines of a particular polygon that is drawn over a staff. + Note that we iterate through the points of the last staff line in reverse (i.e starting + from the last point on the last staff line going to the first) - We do this to simplify + recreating the polygon on the front-end + ''' + poly_json_list = [] + + for poly in poly_list: + if len(poly): + last_index = len(poly) - 1 + point_list_one = [(vert.x, vert.y) for vert in poly[0].vertices] + point_list_last = [(vert.x, vert.y) for vert in poly[last_index].vertices] + point_list_last.reverse() + point_list_one.extend(point_list_last) + poly_json_list.append(point_list_one) + + return poly_json_list + + +def fix_poly_point_list(poly_list, staffspace_height): + + for poly in poly_list: + # Check if there are the same number of points on all staff lines + lengths = [len(line.vertices) for line in poly] + if len(set(lengths)) == 1: + continue + else: + # Loop over all the staff lines + for j, line in enumerate(poly): + # Loop over all the points of the staff + for k, vert in enumerate(line.vertices): + # Loop over all the staff lines again + for l, innerline in enumerate(poly): + if l == j: + # Prevent looping through the same line as outer + continue + + if k < len(innerline.vertices): + # Make sure k is in range first + y_pix_diff = vert.x - innerline.vertices[k].x + else: + # It's not in range - we're missing a point + # Set this to an arbitrary value to force an insert + y_pix_diff = -10000 + + if -3 < y_pix_diff < 3: + # If the y-coordinate pixel difference is small enough + continue + else: + # Missing a point on that staff + # The multiplier represents the # of lines apart + staffspace_multiplier = l - j + new_y = vert.y + (staffspace_multiplier * staffspace_height) + innerline.vertices.insert(k, Point(vert.x, new_y)) + + return poly_list diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/interfaces/poly_mask.html b/rodan-main/code/rodan/jobs/gamera_rodan/interfaces/poly_mask.html new file mode 100644 index 000000000..58a9a16a9 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/interfaces/poly_mask.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  +

                  Polygon Masking Interface

                  +

                  Select a polygon or anchor by clicking on it, then use the mouse to drag it to a new position. +
                  +
                  + With a polygon selected, you can:
                  + - delete it (d, Delete key, Backspace key)
                  + - transform it to a rectangle (r)
                  + - add an anchor (Alt key and mouse click)
                  +
                  + With an anchor selected, you can:
                  + - delete it (d, Delete key, Backspace key)
                  +
                  + You can create a new polygon by pressing n (no other polygon must be selected). +

                  +
                  + +
                  +
                  +
                  +
                  +
                  + + + diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/resource_types.yaml b/rodan-main/code/rodan/jobs/gamera_rodan/resource_types.yaml new file mode 100755 index 000000000..33f7da175 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/resource_types.yaml @@ -0,0 +1,18 @@ +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: image/onebit+png + description: One-bit (black and white) PNG image + extension: png +- mimetype: image/greyscale+png + description: Greyscale PNG image + extension: png +- mimetype: image/grey16+png + description: Greyscale 16 PNG image + extension: png +- mimetype: application/gamera+xml + description: Gamera XML file + extension: xml +- mimetype: application/gamera-polygons+txt + description: Python list of polygons ([[[x,y], [x,y], ...], [[x,y], [x,y], ...], ...]) + extension: txt diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/RKPixelSegment.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKPixelSegment.js new file mode 100644 index 000000000..7dde2f93f --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKPixelSegment.js @@ -0,0 +1,659 @@ +(function ($) +{ + /** + * Main Pixel Segmentation app object. + */ + var PixelSegmentation = function(aSettings) + { + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Returns the geometries. + */ + this.getGeometries = function() + { + return _geometries; + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// INITIALIZATION +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Starts the application. + */ + var run = function() + { + _initialize(); + _layerImage.loadImage(_settings.image.source); + }; + + /** + * Initialization method. + */ + var _initialize = function() + { + _geometries = []; + _initializeKinetic(); + _layerImage = _createLayerImage(); + _layerCorrections = _createLayerCorrections(); + _layerUISegmentation = _createLayerUISegmentation(); + _stage.add(_layerImage); + _stage.add(_layerCorrections); + _stage.add(_layerUISegmentation); + $('body').keydown(_processEvent); + _imageContext = $('#container canvas')[0].getContext('2d'); + _correctionsContext = $('#container canvas')[1].getContext('2d'); + _setUIImageInfo(); + _setState(_STATE.IDLE); + }; + + /** + * initialization for Kinetic. + */ + var _initializeKinetic = function() + { + _stage = new Kinetic.Stage(_settings.kinetic.stage); + }; + + /** + * Creates Kinetic layer: image. + */ + var _createLayerImage = function() + { + var layer = new Kinetic.Layer(_settings.kinetic.layers.image); + layer.on('click', _processEvent); + layer.on('mousemove', _processEvent); + layer.loadImage = _loadImage; + return layer; + }; + + /** + * Creates Kinetic layer: corrections. + */ + var _createLayerCorrections = function() + { + var layer = new Kinetic.Layer(_settings.kinetic.layers.image); + return layer; + }; + + /** + * Creates Kinetic layer: front segmentation UI. + */ + var _createLayerUISegmentation = function() + { + var layer = new Kinetic.Layer(_settings.kinetic.layers.image); + layer.on('click', _processEvent); + layer.on('mousemove', _processEvent); + return layer; + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// EVENT HANDLING +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Process state event. + */ + var _processEvent = function(aEvent) + { + switch(_state) + { + case _STATE.IDLE: + _handleStateIdle(aEvent); + break; + + case _STATE.POLYGON: + _handleStatePolygon(aEvent); + break; + + case _STATE.RECTANGLE: + _handleStateRectangle(aEvent); + break; + + case _STATE.GLYPH_COLOURING: + _handleStateGlyphColouring(aEvent); + break; + + default: + // Do nothing. + break; + } + + // Event output. + if(aEvent.type != 'mousemove') + { + outputEvent(aEvent); + } + }; + + /** + * Handles 'Idle' state events. + */ + var _handleStateIdle = function(aEvent) + { + if(aEvent.type === 'keydown') + { + if(aEvent.which === 80) + { + aEvent.preventDefault(); + _setState(_STATE.POLYGON); + } + else if(aEvent.which === 82) + { + aEvent.preventDefault(); + _setState(_STATE.RECTANGLE); + } + } + _inputPolygon = []; + _clearKineticPolygon(); + _clearKineticLine(); + _render(); + }; + + /** + * Handle state polygon. + */ + var _handleStatePolygon = function(aEvent) + { + if(aEvent.type === 'mouseup') + { + aEvent.preventDefault(); + _inputPolygon.push({x: aEvent.layerX, y: aEvent.layerY}); + _defineKineticPolygon(); + } + else if(aEvent.type === 'keydown') + { + if(aEvent.which === 27) + { + aEvent.preventDefault(); + _clearKineticPolygon(); + _clearKineticLine(); + _setState(_STATE.IDLE); + } + else if(aEvent.which === 67) + { + aEvent.preventDefault(); + _clearKineticLine(); + _setState(_STATE.GLYPH_COLOURING); + } + } + else if(aEvent.type === 'mousemove' && _inputPolygon.length > 0) + { + _defineKineticLine(aEvent.layerX, aEvent.layerY); + } + _render(); + }; + + /** + * Handle state rectangle. + */ + var _handleStateRectangle = function(aEvent) + { + if(aEvent.type === 'mouseup') + { + aEvent.preventDefault(); + if(_inputPolygon.length === 1) + { + _inputPolygon.push({x: aEvent.layerX, y: _inputPolygon[0].y}); + _inputPolygon.push({x: aEvent.layerX, y: aEvent.layerY}); + _inputPolygon.push({x: _inputPolygon[0].x, y: aEvent.layerY}); + _setState(_STATE.GLYPH_COLOURING); + } + else + { + _inputPolygon.push({x: aEvent.layerX, y: aEvent.layerY}); + } + _defineKineticPolygon(); + } + else if(aEvent.type === 'keydown') + { + if(aEvent.which === 27) + { + aEvent.preventDefault(); + _clearKineticPolygon(); + _clearKineticLine(); + _setState(_STATE.IDLE); + } + } + else if(aEvent.type === 'mousemove' && _inputPolygon.length > 0) + { + _defineKineticLine(aEvent.layerX, aEvent.layerY); + } + _render(); + }; + + /** + * Handle glyph coloring state. + */ + var _handleStateGlyphColouring = function(aEvent) + { + if(aEvent.type === 'keydown') + { + if(aEvent.which === 78) // neume + { + _glyphColouring = _settings.glyphs.neume; + } + else if(aEvent.which === 84) // text + { + _glyphColouring = _settings.glyphs.text; + } + else if(aEvent.which === 69) // white/erase + { + _glyphColouring = _settings.glyphs.white; + } + else if(aEvent.which === 32 && _glyphColouring !== null) + { + aEvent.preventDefault(); + _saveGeometry(); + _colourGlyphs(_glyphColouring); + _clearKineticPolygon(); + _clearKineticLine(); + _setState(_STATE.IDLE); + } + else if(aEvent.which === 27) + { + aEvent.preventDefault(); + _clearKineticPolygon(); + _clearKineticLine(); + _setState(_STATE.IDLE); + } + } + _render(); + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// DRAWING/RENDERINGß +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Rendering. + */ + var _render = function() + { + _layerUISegmentation.batchDraw(); + }; + + /** + * Defines the polygon. + */ + var _defineKineticPolygon = function() + { + _clearKineticPolygon(); + if(_inputPolygon.length > 0) + { + _kineticPolygon = new Kinetic.Shape(_settings.kinetic.shape); + _kineticPolygon.x(_inputPolygon[0].x); + _kineticPolygon.y(_inputPolygon[0].y); + _layerUISegmentation.add(_kineticPolygon); + } + }; + + /** + * Defines Kinetic line. + */ + var _defineKineticLine = function(aLayerMouseX, aLayerMouseY) + { + var index = _inputPolygon.length - 1; + if(_kineticLine === null) + { + _kineticLine = new Kinetic.Line(_settings.kinetic.line); + _layerUISegmentation.add(_kineticLine); + } + _kineticLine.points([_inputPolygon[index].x, _inputPolygon[index].y, aLayerMouseX, aLayerMouseY]); + }; + + /** + * Clears the polygon. + */ + var _clearKineticPolygon = function() + { + if(_kineticPolygon !== null) + { + _kineticPolygon.destroy(); + } + _kineticPolygon = null; + }; + + /** + * Clears the line. + */ + var _clearKineticLine = function() + { + if(_kineticLine !== null) + { + _kineticLine.destroy(); + } + _kineticLine = null; + }; + + /** + * Basic draw method for polygon. + */ + var _drawPolygon = function(aContext) + { + for(var i = 0; i < _inputPolygon.length; i++) + { + // Don't draw path if initial point or last point. + if(i === 0) + { + aContext.beginPath(); + aContext.moveTo(0, 0); + } + else + { + var nextX = _inputPolygon[i].x - _inputPolygon[0].x; + var nextY = _inputPolygon[i].y - _inputPolygon[0].y; + aContext.lineTo(nextX, nextY); + aContext.stroke(); + } + } + aContext.closePath(); + aContext.stroke(); + aContext.fillStrokeShape(this); + }; + + /** + * Color image. + */ + var _colourGlyphs = function(aGlyphSettings) + { + // Get bounding box. + var upperLeftX = Number.MAX_VALUE; + var upperLeftY = Number.MAX_VALUE; + var lowerRightX = 0; + var lowerRightY = 0; + for(var i = 0; i < _inputPolygon.length; i++) + { + upperLeftX = _inputPolygon[i].x < upperLeftX ? _inputPolygon[i].x : upperLeftX; + upperLeftY = _inputPolygon[i].y < upperLeftY ? _inputPolygon[i].y : upperLeftY; + lowerRightX = _inputPolygon[i].x > lowerRightX ? _inputPolygon[i].x : lowerRightX; + lowerRightY = _inputPolygon[i].y > lowerRightY ? _inputPolygon[i].y : lowerRightY; + } + + // We need to check if this is a rectangle. That means we don't have to do collision detection. + var isRectangle = _inputPolygon.length === 4 && _inputPolygon[0].y === _inputPolygon[1].y && _inputPolygon[1].x === _inputPolygon[2].x && + _inputPolygon[2].y === _inputPolygon[3].y && _inputPolygon[3].x === _inputPolygon[0].x; + + // Next, go through image at each of those points and hit-test against our shape. If it hits, color that pixel on the image. + var width = lowerRightX - upperLeftX; + var height = lowerRightY - upperLeftY; + var positionX = upperLeftX; + var positionY = upperLeftY; + var imageData = _imageContext.getImageData(upperLeftX, upperLeftY, width, height); + for(i = 0; i < imageData.data.length; i += 4) + { + if(isRectangle || _kineticPolygon.intersects({x: positionX, y: positionY})) + { + // Check if pixel falls in thresholds. + var decision = true; + for(var j = 0; j < 4; j++) + { + decision = decision && ((!aGlyphSettings.inverseThresholds[j] && imageData.data[i + j] >= aGlyphSettings.thresholds[j]) || + (aGlyphSettings.inverseThresholds[j] && imageData.data[i + j] <= aGlyphSettings.thresholds[j])); + } + + // If in threshold, color. + if(decision) + { + imageData.data[i] = aGlyphSettings.colour[0]; + imageData.data[i + 1] = aGlyphSettings.colour[1]; + imageData.data[i + 2] = aGlyphSettings.colour[2]; + imageData.data[i + 3] = aGlyphSettings.colour[3]; + } + } + positionX++; + if(positionX >= lowerRightX) + { + positionX = upperLeftX; + positionY++; + } + } + _correctionsContext.putImageData(imageData, upperLeftX, upperLeftY); + }; + + /** + * Saves the current input polygon to geometries array. + */ + var _saveGeometry = function() + { + var newGeometry = {colour: _glyphColouring.colour, + points: _inputPolygon, + workingWidth: _kineticImage.getWidth()}; + _geometries.push(newGeometry); + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// STATE METHODS +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Sets state. + */ + var _setState = function(aState) + { + _state = aState; + _setUIStateInfo(); + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// LOADERS +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Image loading method. It automatically resizes + */ + var _loadImage = function(aImageURL) + { + var image = new Image(); + var layer = this; + image.onload = function() + { + _kineticImage = new Kinetic.Image({x: 0, y: 0, image: this, width: this.width, height: this.height}); + layer.parent.width(_kineticImage.getWidth() + layer.x()); + layer.parent.height(_kineticImage.getHeight() + layer.y()); + layer.add(_kineticImage); + _kineticImage.cache(); + layer.draw(); + }; + image.src = aImageURL; + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// UI +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Sets UI image info. + */ + var _setUIImageInfo = function() + { + }; + + /** + * Sets UI state info. + */ + var _setUIStateInfo = function() + { + $('#state').text(_getStateText()); + }; + + /** + * Display state. + */ + var _getStateText = function() + { + var stateTitle = null; + switch(_state) + { + case _STATE.IDLE: + stateTitle = "Idle"; + break; + + case _STATE.POLYGON: + stateTitle = "Defining polygon"; + break; + + case _STATE.RECTANGLE: + stateTitle = "Defining rectangle"; + break; + + case _STATE.GLYPH_COLOURING: + stateTitle = "Glyph colouring"; + break; + + default: + break; + } + return stateTitle; + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// CONSOLE +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * Outputs info to console on event. + */ + var outputEvent = function(aEvent) + { + if(_settings.debug) + { + console.log("---"); + console.log("state: " + _state); + console.log("polygon:"); + console.log(_inputPolygon); + console.log("mouse (layer): " + aEvent.layerX + ", " + aEvent.layerY); + console.log("mouse (page): " + aEvent.pageX + ", " + aEvent.pageY); + console.log("geometries"); + console.log(_geometries); + } + }; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PRIVATE MEMBERS +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + var _STATE = + { + IDLE: 0, + POLYGON: 2, + RECTANGLE: 3, + GLYPH_COLOURING: 4 + }; + + // Default settings. + var _defaults = + { + // Kinetic stage settings. + kinetic: + { + stage: + { + container: 'container', + width: 500, + height: 800 + }, + + layers: + { + image: + { + x: 0, + y: 0, + width: 200, + height: 500 + } + }, + + shape: + { + fillRed: 0, + fillGreen: 255, + fillBlue: 0, + fillAlpha: 0.2, + strokeWidth: 2, + strokeEnabled: true, + strokeRed: 0, + strokeGreen: 255, + strokeBlue: 0, + strokeAlpha: 1, + drawFunc: _drawPolygon + }, + + line: + { + x: 0, + y: 0, + stroke: 'green', + tension: 1 + } + }, + + // Glyph coloring settings. + glyphs: + { + text: + { + colour: [255, 0, 0, 255], + thresholds: [220, 127, 220, 255], + inverseThresholds: [true, false, true, false] + }, + + neume: + { + colour: [0, 255, 0, 255], + thresholds: [127, 220, 220, 255], + inverseThresholds: [false, true, true, false] + }, + + white: // erase + { + colour: [255, 255, 255, 255], + thresholds: [0, 0, 0, 0], + inverseThresholds: [false, false, false, false] + } + }, + + // Image settings. + image: + { + source: null + }, + + // Debug. + debug: true + }; + + // Settings. + var _settings = $.extend({}, _defaults, aSettings); + + // Members. + var _stage = null; + var _layerImage = null; + var _layerCorrections = null; + var _layerUISegmentation = null; + var _state = _STATE.IDLE; + var _inputPolygon = []; + var _kineticPolygon = null; + var _kineticImage = null; + var _imageContext = null; + var _glyphColouring = null; + var _correctionsContext = null; + var _kineticLine = null; + var _geometries = null; + + // Run. + run(); + }; + + + $.fn.PixelSegmentation = function(aOptions) + { + return this.each(function() + { + var element = $(this); + if (element.data('PixelSegmentation')) + { + return; + } + var instance = new PixelSegmentation(aOptions); + element.data('PixelSegmentation', instance); + }); + }; +})(jQuery); diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/RKRotate.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKRotate.js new file mode 100644 index 000000000..8a2585efd --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKRotate.js @@ -0,0 +1,321 @@ +(function ($) +{ + var RKRotate = function(element, options) + { + var defaults = { + imageUrl: null, + gridFadeTime: 200, + gridBoxHeight: 80, + gridBoxWidth: 112, + textBoxOutput: null, + displayPrecision: 3, + controlOutput: null, + controlOutputMultiplier: 1 + }; + + var settings = $.extend({}, defaults, options); + + var instanceVariables = { + imageObject: null, + imageCanvas: null, + gridObject: null, + currentAngle: null // radians + }; + + $.extend(settings, instanceVariables); + + var self = this; // Use self, not this, inside private functions. + + var init = function() + { + settings.imageCanvas = document.createElement('canvas'); + settings.rkRotateElement.appendChild(settings.imageCanvas); + settings.imageObject = new Image(); + + settings.imageObject.onload = function () + { + _setUpCanvas(); + _setUpGrid(); + _setUpRotateByDraggingTheImage(); + }; + + settings.imageObject.src = settings.imageUrl; + _updateAngle(0); + }; + + this.rotate = function (angle) + { + angle = modulo(angle, 2 * Math.PI); + + var canvas = this.getImageCanvas(), + context = canvas.getContext('2d'), + image = this.getImage(); + + context.save(); + context.clearRect(0, 0, canvas.width, canvas.height); + context.translate(canvas.width / 2, canvas.height / 2); + context.rotate(angle); + context.translate(-canvas.width / 2, -canvas.height / 2); + context.drawImage(settings.imageObject, (canvas.width - image.width)/2, (canvas.height - image.height)/2, image.width, image.height); + context.restore(); + + _updateAngle(angle); + }; + + this.getImage = function () + { + return settings.imageObject; + }; + + this.getImageCanvas = function () + { + return settings.imageCanvas; + }; + + this.getGridFadeTime = function () + { + return settings.gridFadeTime; + }; + + this.setGridFadeTime = function (newGridFadeTime) + { + settings.gridFadeTime = newGridFadeTime; + }; + + this.getGridBoxWidth = function () + { + return settings.gridBoxWidth; + }; + + this.setGridBoxWidth = function (newGridBoxWidth) + { + settings.gridBoxWidth = newGridBoxWidth; + _drawGrid(); + }; + + this.getGridBoxHeight = function () + { + return settings.gridBoxHeight; + }; + + this.setGridBoxHeight = function (newGridBoxHeight) + { + settings.gridBoxHeight = newGridBoxHeight; + _drawGrid(); + }; + + this.getRkRotateElement = function () + { + return settings.rkRotateElement; + }; + + this.getCurrentAngle = function () + { + return settings.currentAngle; + }; + + this.getGrid = function () + { + return settings.gridObject; + }; + + this.showGrid = function () + { + var grid = this.getGrid(); + + $(grid).stop(); + $(grid).fadeIn(settings.gridFadeTime); + }; + + this.hideGrid = function () + { + var grid = this.getGrid(); + + $(grid).stop(); + $(grid).fadeOut(settings.gridFadeTime); + }; + + var _setUpCanvas = function() + { + var context = settings.imageCanvas.getContext('2d'), + canvas = settings.imageCanvas, + w = settings.imageObject.width, + h = settings.imageObject.height, + neededSize = Math.ceil(Math.sqrt(h*h + w*w)), + rkRotateElement = settings.rkRotateElement; + + rkRotateElement.style.height = neededSize.toString() + 'px'; + rkRotateElement.style.width = neededSize.toString() + 'px'; + $(rkRotateElement).css({position: 'relative'}); + + canvas.height = neededSize; + canvas.width = neededSize; + $(canvas).css({'zIndex' : '1'}); + context.drawImage(settings.imageObject, (neededSize - w)/2, (neededSize - h)/2, w, h); + }; + + var _setUpGrid = function() + { + settings.gridObject = document.createElement('canvas'); + $(settings.gridObject).css({ + 'position': 'absolute', + 'left': '0px', + 'top': '0px', + 'zIndex' : '2' + }); + settings.gridObject.height = settings.imageCanvas.height; + settings.gridObject.width = settings.imageCanvas.width; + + _drawGrid(); + }; + + var _drawGrid = function() + { + var gridObject = settings.gridObject, + canvasSize = settings.imageCanvas.width, + gridBoxHeight = self.getGridBoxHeight(), + gridBoxWidth = self.getGridBoxWidth(), + gridContext = gridObject.getContext('2d'); + + gridContext.clearRect(0, 0, gridObject.width, gridObject.height); + gridContext.beginPath(); + + // The initializers of these for loops help ensure that + // - the centre of the image lies on a gridline crossing + // - the lines are drawn in the centre of the pixels so that they're one pixel thick, (hence the +0.5) + for (var x = Math.floor(canvasSize / 2) % gridBoxWidth + 0.5; x <= canvasSize; x += gridBoxWidth) + { + gridContext.moveTo(x, 0); + gridContext.lineTo(x, canvasSize); + } + + for (var y = Math.floor(canvasSize / 2) % gridBoxHeight + 0.5; y <= canvasSize; y += gridBoxHeight) + { + gridContext.moveTo(0, y); + gridContext.lineTo(canvasSize, y); + } + + gridContext.lineWidth = 1; + gridContext.strokeStyle = "rgba(0, 0, 150, 0.3)"; + gridContext.stroke(); + $(gridObject).hide(); + settings.gridObject = gridObject; + settings.rkRotateElement.appendChild(gridObject); + }; + + var _setUpRotateByDraggingTheImage = function() + { + var imageCanvas = self.getImageCanvas(); + + $(imageCanvas).mousedown( function() + { + // if (! self.clickedInsideImage(event)) + // return; + + self.showGrid(); + _disableSelection(); + + var clickLocation = {x: event.pageX, y: event.pageY}, + previousAngle = self.getCurrentAngle(), + canvasOffset = $(imageCanvas).offset(), + centre = {x: canvasOffset.left + imageCanvas.width / 2, y: canvasOffset.top + imageCanvas.height / 2}, + clickAngle = Math.atan2(clickLocation.y - centre.y, clickLocation.x - centre.x); + + $(window).mousemove( function(event) + { + var dragAngle = Math.atan2(event.pageY - centre.y, event.pageX - centre.x), + newAngle = dragAngle - clickAngle + previousAngle; + + self.rotate(newAngle); + }); + }); + + var grid = self.getGrid(); + + $(grid).mousedown( function() + { + $(imageCanvas).trigger('mousedown'); + }); + + $(window).mouseup( function() + { + $(window).unbind("mousemove"); + self.hideGrid(); + _enableSelection(); + }); + }; + + var _updateAngle = function (angle) + { + settings.currentAngle = angle; + _updateTextBoxOutput(angle); + _updateControlOutput(angle); + }; + + var _updateTextBoxOutput = function (angle) + { + if (settings.textBoxOutput) + { + $(settings.textBoxOutput).val((angle * 180 / Math.PI).toFixed(settings.displayPrecision)); + } + }; + + var _updateControlOutput = function (angle) + { + if (settings.controlOutput) + { + var M = settings.controlOutputMultiplier; + + settings.controlOutput.val(angle * 180 / Math.PI * M); + settings.controlOutput.trigger('change'); + } + }; + + var _disableSelection = function () + { + $('body').css({ + '-webkit-user-select': 'none', + '-moz-user-select:': '-moz-none', + '-ms-user-select': 'none', + 'user-select': 'none' + }); + }; + + var _enableSelection = function () + { + $('body').css({ + '-webkit-user-select': '', + '-moz-user-select:': '', + '-ms-user-select': '', + 'user-select': '' + }); + }; + + var modulo = function (dividend, divisor) + { + // The % modulo operator is incorrect when the dividend is negative. + // http://javascript.about.com/od/problemsolving/a/modulobug.htm + return ((dividend % divisor) + divisor) % divisor; + }; + + init(); + }; + + $.fn.RKRotate = function(options) + { + return this.each(function () + { + var element = $(this); + + if (element.data('RKRotate')) + return; + + options.rkRotateElement = element[0]; + + var template = new RKRotate(this, options); + + element.data('RKRotate', template); + }); + }; +} +)(jQuery); diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/RKSegment.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKSegment.js new file mode 100644 index 000000000..c75299cc4 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/RKSegment.js @@ -0,0 +1,636 @@ +(function ($) +{ + var RKSegment = function(element, options) + { + var defaults = { + image: null, // the image object we're segmenting + polyPoints: null, // the polygon points we're applying to the image + originalWidth: null, + anchorSize: 7 + }; + + var settings = $.extend({}, defaults, options); + + var globals = { + kStage: null, // kinetic stuff + kImageLayer: null, + kImage: null, + imageObject: null, + scalingFactor: null, + scaledMargin: null, + marginWidth: 0.05, + selectedPoly: null, + unselectedColour: "blue", + selectedColour: "red", + selectedAnchor: null + }; + $.extend(settings, globals); + + var self = this; // global class reference is `self` + + var init = function () + { + $('body').keydown(function(event) + { + // handle events: delete (8, 46, 68), transform (82), new polygon (78) + if (event.which === 8 || event.which === 46 || event.which === 68) + { + event.preventDefault(); + + if (settings.selectedPoly && settings.selectedAnchor === null) + { + _deletePoly(settings.selectedPoly); + } + else if (settings.selectedAnchor !== null) + { + _deleteAnchor(); + } + return false; + } + else if (event.which === 82) + { + event.preventDefault(); + if (settings.selectedPoly) + { + _transformPolygonToRectangle(settings.selectedPoly); + } + return false; + } + else if (event.which === 78) + { + event.preventDefault(); + if (!settings.selectedPoly) + { + self.createPolygon(); + } + } + }); + + settings.imageObject = new Image(); + settings.imageObject.onload = function() + { + settings.scalingFactor = settings.imageObject.width / settings.originalWidth; + settings.scaledMargin = settings.imageObject.width * settings.marginWidth; + + settings.kStage = new Kinetic.Stage({ + container: settings.parentObject.getAttribute('id'), + width: settings.imageObject.width, + height: settings.imageObject.height, + margin: settings.scaledMargin + }); + + settings.kImageLayer = _createImageLayer(); + + settings.kImage = new Kinetic.Image({ + width: settings.imageObject.width, + height: settings.imageObject.height, + image: settings.imageObject + }); + + settings.kImageLayer.add(settings.kImage); + settings.kStage.add(settings.kImageLayer); + + var i = settings.polyPoints.length; + + while (i--) + { + var polys = [], + numberOfPoints = settings.polyPoints[i].length; + + // Make sure we reduce to a rectangle + var xMinimum = settings.polyPoints[i][0][0] * settings.scalingFactor, + xMaximum = settings.polyPoints[i][0][0] * settings.scalingFactor, + yMinimum = settings.polyPoints[i][0][1] * settings.scalingFactor, + yMaximum = settings.polyPoints[i][0][1] * settings.scalingFactor; + for (var j = 0; j < numberOfPoints; j++) + { + var x = settings.polyPoints[i][j][0] * settings.scalingFactor, + y = settings.polyPoints[i][j][1] * settings.scalingFactor; + xMinimum = x < xMinimum ? x : xMinimum; + xMaximum = x > xMaximum ? x : xMaximum; + yMinimum = y < yMinimum ? y : yMinimum; + yMaximum = y > yMaximum ? y : yMaximum; + } + + // Add rect. points. + polys.push([xMinimum, yMaximum]); + polys.push([xMaximum, yMaximum]); + polys.push([xMaximum, yMinimum]); + polys.push([xMinimum, yMinimum]); + + var group = _createGroup(), + layer = new Kinetic.Layer(), + poly = _createPolygon(polys, group); + + layer.add(group); + settings.kStage.add(layer); + + layer.draw(); + } + }; + + // this triggers the image onload method. + settings.imageObject.src = settings.image; + }; + + init(); // call init when the object is created. + + var _createImageLayer = function() + { + var layer = new Kinetic.Layer(); + + /* + We detect a click on the image layer and do the OUTSIDE anchor adding. The polygon handler + handles clicks INSIDE. + */ + layer.on("mousedown", function(event) + { + if (event.altKey && settings.selectedPoly !== null) + { + // Override default. + event.preventDefault(); + + /* + If the group has been moved from it's default starting position, + it will have x,y values that represent the offset from its starting + which we need to take into account when clicking; otherwise we + simply use the mouse event position. + */ + var group = settings.selectedPoly.parent, + groupAnchors = group.attrs.anchors, + offsetX = (group.attrs.x) ? Math.abs(event.layerX - group.attrs.x) : event.layerX, + offsetY = (group.attrs.y) ? Math.abs(event.layerY - group.attrs.y) : event.layerY, + hitPoint = {x: event.layerX, y: event.layerY}, + indices = _getIndicesOfNeighbourAnchorsForNewAnchor(groupAnchors, hitPoint, "outside"); + + _addAnchor(offsetX, offsetY, group, indices[1]); + + return false; + } + else if (!event.altKey && settings.selectedPoly !== null) + { + // de-select the currently selected polygon by clicking outside of the poly. + _deselectPoly(settings.selectedPoly); + } + }, false); + + return layer; + }; + + var _dragBoundFunc = function(pos) + { + return {x: pos.x, y: pos.y}; + }; + + var _setAnchorHandlers = function(anchor, group) + { + anchor.on("dragmove", function(event) { + var poly = group.get(".poly")[0], + anchorIdx = group.attrs.anchors.indexOf(anchor), + thisAnchor = group.attrs.anchors[anchorIdx], + polyPoint = poly.attrs.points[anchorIdx]; + + polyPoint.y = this.getY(); + polyPoint.x = this.getX(); + group.getLayer().draw(); + }); + + anchor.on("mousedown", function(event) + { + _selectAnchor(this, event); + }); + }; + + var _createGroup = function() + { + var group = new Kinetic.Group({ + draggable: true, + name: 'group', + dragBoundFunc: _dragBoundFunc, + anchors: [] + }); + + group.on("mousedown", function(event) + { + var poly = group.get(".poly")[0]; + _selectPoly(poly); + }, false); + + return group; + }; + + var _createPolygon = function(polys, group) + { + var poly = new Kinetic.Polygon({ + points: polys, + fill: settings.unselectedColour, + stroke: 'black', + opacity: 0.2, + strokeWidth: 2, + name: "poly" + }); + group.add(poly); + + poly.on("mousedown", function(event) + { + /* + Detect clicks *inside* the polygon. + */ + if (event.altKey && settings.selectedPoly !== null) + { + event.preventDefault(); + + // Go through all the line segments. + var group = this.parent, + groupAnchors = group.attrs.anchors, + offsetX = (group.attrs.x) ? Math.abs(event.layerX - group.attrs.x) : event.layerX, + offsetY = (group.attrs.y) ? Math.abs(event.layerY - group.attrs.y) : event.layerY, + hitPoint = {x: event.layerX, y: event.layerY}, + indices = _getIndicesOfNeighbourAnchorsForNewAnchor(groupAnchors, hitPoint, "inside"); + + _addAnchor(offsetX, offsetY, group, indices[1]); + + return false; + } + + }, false); + + var j = 0, + polyLength = polys.length; + + while (j < polyLength) + { + var x = polys[j][0], + y = polys[j][1], + anchor = _createAnchor(x, y); + + group.add(anchor); + group.attrs.anchors.push(anchor); + _setAnchorHandlers(anchor, group); + ++j; + } + + return poly; + }; + + var _selectPoly = function(poly) + { + if (settings.selectedPoly === poly) + return; + + if (settings.selectedPoly !== null && settings.selectedPoly !== poly) + { + settings.selectedPoly.setFill(settings.unselectedColour); + settings.selectedPoly.getLayer().draw(); + settings.selectedPoly = null; + } + + if (settings.selectedAnchor !== null) + { + _deselectAnchor(); + } + + settings.selectedPoly = poly; + settings.selectedPoly.setFill(settings.selectedColour); + settings.selectedPoly.getLayer().draw(); + }; + + var _deselectPoly = function(poly) + { + if (settings.selectedPoly !== null) + { + settings.selectedPoly.setFill(settings.unselectedColour); + settings.selectedPoly.getLayer().draw(); + settings.selectedPoly = null; + } + + if (settings.selectedAnchor !== null) + { + _deselectAnchor(); + } + } + + var _deletePoly = function(poly) + { + var group = poly.getParent(), + layer = group.getLayer(); + + layer.remove(group); + layer.destroy(); + + settings.selectedPoly = null; + }; + + var _createAnchor = function(x, y) + { + var anchor = new Kinetic.Circle({ + x: x, + y: y, + fill: "#ddd", + strokeWidth: 2, + radius: settings.anchorSize, + draggable: true, + dragBoundFunc: _dragBoundFunc + }); + + return anchor; + }; + + var _addAnchor = function(x, y, group, index) + { + var poly = group.get(".poly")[0], + anchor = _createAnchor(x, y), + pointObj = {"x": x, "y": y}; + + group.add(anchor); + group.attrs.anchors.splice(index, 0, anchor); + poly.attrs.points.splice(index, 0, pointObj); + + _setAnchorHandlers(anchor, group); + group.getLayer().draw(); + }; + + var _selectAnchor = function(anchor) + { + if (settings.selectedAnchor === anchor) + return; + + _deselectAnchor(); + + settings.selectedAnchor = anchor; + settings.selectedAnchor.setStroke(settings.selectedColour); + + settings.selectedAnchor.getLayer().draw(); + }; + + /* + Deselects the currently selected anchor. + */ + var _deselectAnchor = function() + { + if (settings.selectedAnchor !== null) + { + settings.selectedAnchor.setStroke("black"); + settings.selectedAnchor.getLayer().draw(); + settings.selectedAnchor = null; + } + }; + + /* + Deletes the currently selected anchor. + */ + var _deleteAnchor = function() + { + if (settings.selectedAnchor !== null) + { + var group = settings.selectedAnchor.getParent(), + poly = group.get(".poly")[0], + anchorIdx = group.attrs.anchors.indexOf(settings.selectedAnchor); + + var rem = group.attrs.anchors.splice(anchorIdx, 1), + remp = poly.attrs.points.splice(anchorIdx, 1); + + _deselectAnchor(); + settings.selectedAnchor = null; + + rem[0].remove(); + group.getLayer().clear(); + group.getLayer().draw(); + } + }; + + /** + * This contains a collection of geometrical functions intended to help Kinetic. + */ + var _getDistanceToLine = function(aLinePointA, aLinePointB, aPoint) + { + if(aLinePointA.x == aLinePointB.x) + { + return Math.abs(aLinePointA.y - aLinePointB.y); + } + var slope = (aLinePointA.y - aLinePointB.y) / (aLinePointA.x - aLinePointB.x), + xIntercept = aLinePointA.y - (slope * aLinePointA.x), + distance = ((slope * aPoint.x) - aPoint.y + xIntercept) / Math.sqrt((slope * slope) + 1); + + return Math.abs(distance); + }; + + var _getOrthogonalIntersectOfPointToLine = function(aLinePointA, aLinePointB, aPoint) + { + if(aLinePointA.x == aLinePointB.x) + { + return {x: aLinePointA.x, y: aPoint.y}; + } + else if(aLinePointA.y == aLinePointB.y) + { + return {x: aPoint.x, y: aLinePointA.y}; + } + var slope = (aLinePointA.y - aLinePointB.y) / (aLinePointA.x - aLinePointB.x), + xIntercept = aLinePointA.y - (slope * aLinePointA.x), + orthogonalSlope = -1 / slope, + orthogonalXIntercept = aPoint.y - (orthogonalSlope * aPoint.x), + interceptionX = (orthogonalXIntercept - xIntercept) / (slope - orthogonalSlope), + interceptionY = (slope * interceptionX) + xIntercept; + + return {x: interceptionX, y: interceptionY}; + }; + + var _isIntegerBetweenOthers = function(aInt0, aInt1, aTest) + { + if ((aInt0 <= aInt1 && aInt0 <= aTest && aTest<= aInt1) || (aInt0 >= aInt1 && aInt0 >= aTest && aTest>= aInt1)) + { + return true; + } + return false; + }; + + var _getClosestPoint = function(aPointA, aPointB, aOriginPoint) + { + var distanceASquared = Math.pow(aPointA.x - aOriginPoint.x, 2) + Math.pow(aPointA.y - aOriginPoint.y, 2); + var distanceBSquared = Math.pow(aPointB.x - aOriginPoint.x, 2) + Math.pow(aPointB.y - aOriginPoint.y, 2); + if (distanceASquared <= distanceBSquared) + { + return aPointA; + } + return aPointB; + }; + + var _getDistanceToPoint = function(aPointA, aPointB) + { + var distanceSquared = Math.pow(aPointA.x - aPointB.x, 2) + Math.pow(aPointA.y - aPointB.y, 2); + return Math.sqrt(distanceSquared); + }; + + var _isPointInLineSegmentPlane = function(aLinePointA, aLinePointB, aPoint) + { + var result = {isInPlane: false, distanceToPlane: -1, distanceToLineSegment: -1}; + var orthogonalLineIntersectionOfPointToLine = _getOrthogonalIntersectOfPointToLine(aLinePointA, aLinePointB, aPoint); + result.isInPlane = _isIntegerBetweenOthers(aLinePointA.x, aLinePointB.x, orthogonalLineIntersectionOfPointToLine.x); + if (result.isInPlane) + { + result.distanceToLineSegment = _getDistanceToLine(aLinePointA, aLinePointB, aPoint); + result.distanceToPlane = 0; + } + else + { + var closestPoint = _getClosestPoint(aLinePointA, aLinePointB, aPoint); + result.distanceToPlane = _getDistanceToPoint(closestPoint, orthogonalLineIntersectionOfPointToLine); + result.distanceToLineSegment = _getDistanceToPoint(closestPoint, aPoint); + } + return result; + }; + + /** + * Given a group and a point, returns the indecies that should neighbour the new anchor. + * aPosition is either "inside" the polygon or "outside". + */ + var _getIndicesOfNeighbourAnchorsForNewAnchor = function(aGroupAnchors, aPoint, aPosition) + { + var numberOfPoints = aGroupAnchors.length; + var resultArray = []; + var bestIndex = -1; + for (var i = 0; i < numberOfPoints; i++) + { + // Get points of line segment (note: we set y to neg. so as to resemble pure Cart. coords.) + var nextIndex = (i + 1) % numberOfPoints; + var pointA = aGroupAnchors[i].getAbsolutePosition(); + var pointB = aGroupAnchors[nextIndex].getAbsolutePosition(); + pointA.y *= -1; + pointB.y *= -1; + var testPoint = {x: aPoint.x, y: aPoint.y * -1}; + + // Determine if the point is in the line segment plane. + resultArray[i] = _isPointInLineSegmentPlane(pointA, pointB, testPoint); + + // If this is the first, mark it. Else, figure out if this line segment is the new best. + var bestResult = resultArray[bestIndex]; + var currentResult = resultArray[i]; + + if (bestIndex < 0) + bestIndex = i; + else if (aPosition === "outside") + { + if (Math.round(bestResult.distanceToLineSegment) == Math.round(currentResult.distanceToLineSegment)) + bestIndex = bestResult.distanceToPlane <= currentResult.distanceToPlane ? bestIndex : i; + else if (bestResult.isInPlane && currentResult.isInPlane) + bestIndex = bestResult.distanceToLineSegment <= currentResult.distanceToLineSegment ? bestIndex : i; + else + bestIndex = bestResult.distanceToLineSegment <= currentResult.distanceToLineSegment ? bestIndex : i; + } + else if (aPosition === "inside") + { + if (!bestResult.isInPlane && currentResult.isInPlane) + bestIndex = i; + else if (bestResult.isInPlane && currentResult.isInPlane) + bestIndex = bestResult.distanceToLineSegment <= currentResult.distanceToLineSegment ? bestIndex : i; + } + } + + return [bestIndex, (bestIndex + 1) % numberOfPoints]; + }; + + var _transformPolygonToRectangle = function(aPolygon) + { + if(aPolygon === null) + { + return; + } + + var group = aPolygon.parent, + groupAnchors = group.attrs.anchors; + if(groupAnchors.length <= 4) + { + return; + } + + _deselectAnchor(); + _deselectPoly(aPolygon); + + // Get boundries. + var xMinimum = groupAnchors[0].getAbsolutePosition().x, + xMaximum = groupAnchors[0].getAbsolutePosition().x, + yMinimum = groupAnchors[0].getAbsolutePosition().y, + yMaximum = groupAnchors[0].getAbsolutePosition().y; + for (var i = 1; i < groupAnchors.length; i++) + { + var point = groupAnchors[i].getAbsolutePosition(); + xMinimum = point.x < xMinimum ? point.x : xMinimum; + xMaximum = point.x > xMaximum ? point.x : xMaximum; + yMinimum = point.y < yMinimum ? point.y : yMinimum; + yMaximum = point.y > yMaximum ? point.y : yMaximum; + } + + // Make new poly. + var points = [[xMinimum, yMaximum], [xMaximum, yMaximum], [xMaximum, yMinimum], [xMinimum, yMinimum]]; + _deletePoly(aPolygon); + self.createPolygon(points); + }; + + // PUBLIC METHODS \\ + this.getPolyPoints = function() { + // if the stage isn't ready, we can't get the polys + if (settings.kStage === null) + { + return; + } + + var staves = settings.kStage.get('.group'), + segments = [], + i = staves.length; + + while (i--) + { + var group = staves[i], + poly = group.get(".poly")[0], + points = poly.attrs.points, + numPoly = poly.attrs.points.length; + + segments[i] = []; + + for (var j = 0; j < numPoly; ++j) + { + if (points[j] !== undefined) + { + var point = points[j]; + segments[i][j] = []; + segments[i][j][0] = Math.round((point.x + group.getX() - settings.marginWidth) / settings.scalingFactor); + segments[i][j][1] = Math.round((point.y + group.getY() - settings.marginWidth) / settings.scalingFactor); + } + } + } + + return segments; + }; + + this.createPolygon = function(points) + { + points = (typeof points !== "undefined") ? points : [[10, 10], [100, 10], [100, 100], [10, 100]]; // create a new polygon if points is undefined + + var group = _createGroup(), + layer = new Kinetic.Layer(), + polygon = _createPolygon(points, group); + + layer.add(group); + settings.kStage.add(layer); + + layer.draw(); + }; + }; + + $.fn.RKSegment = function(options) + { + return this.each(function () + { + var element = $(this); + + // return early if this element already has a plugin instance + if (element.data('RKSegment')) + return; + + options.parentObject = element[0]; + + var seg = new RKSegment(this, options); + element.data('RKSegment', seg); + }); + }; +})(jQuery); \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/Stats.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/Stats.js new file mode 100644 index 000000000..bd4e440d8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/Stats.js @@ -0,0 +1,6 @@ +// stats.js r10 - http://github.com/mrdoob/stats.js +var Stats=function(){var l=Date.now(),m=l,g=0,n=1E3,o=0,h=0,p=1E3,q=0,r=0,s=0,f=document.createElement("div");f.id="stats";f.addEventListener("mousedown",function(b){b.preventDefault();t(++s%2)},!1);f.style.cssText="width:80px;opacity:0.9;cursor:pointer";var a=document.createElement("div");a.id="fps";a.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#002";f.appendChild(a);var i=document.createElement("div");i.id="fpsText";i.style.cssText="color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px"; +i.innerHTML="FPS";a.appendChild(i);var c=document.createElement("div");c.id="fpsGraph";c.style.cssText="position:relative;width:74px;height:30px;background-color:#0ff";for(a.appendChild(c);74>c.children.length;){var j=document.createElement("span");j.style.cssText="width:1px;height:30px;float:left;background-color:#113";c.appendChild(j)}var d=document.createElement("div");d.id="ms";d.style.cssText="padding:0 0 3px 3px;text-align:left;background-color:#020;display:none";f.appendChild(d);var k=document.createElement("div"); +k.id="msText";k.style.cssText="color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px";k.innerHTML="MS";d.appendChild(k);var e=document.createElement("div");e.id="msGraph";e.style.cssText="position:relative;width:74px;height:30px;background-color:#0f0";for(d.appendChild(e);74>e.children.length;)j=document.createElement("span"),j.style.cssText="width:1px;height:30px;float:left;background-color:#131",e.appendChild(j);var t=function(b){s=b;switch(s){case 0:a.style.display= +"block";d.style.display="none";break;case 1:a.style.display="none",d.style.display="block"}};return{domElement:f,setMode:t,begin:function(){l=Date.now()},end:function(){var b=Date.now();g=b-l;n=Math.min(n,g);o=Math.max(o,g);k.textContent=g+" MS ("+n+"-"+o+")";var a=Math.min(30,30-30*(g/200));e.appendChild(e.firstChild).style.height=a+"px";r++;b>m+1E3&&(h=Math.round(1E3*r/(b-m)),p=Math.min(p,h),q=Math.max(q,h),i.textContent=h+" FPS ("+p+"-"+q+")",a=Math.min(30,30-30*(h/100)),c.appendChild(c.firstChild).style.height= +a+"px",m=b,r=0);return b},update:function(){l=this.end()}}}; diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/binarise.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/binarise.js new file mode 100644 index 000000000..3fd5c40a5 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/binarise.js @@ -0,0 +1,423 @@ +(function ($) { + //Setup + $(document).ready(function () { + "use strict"; + var viewWidth, defThresh, G, rScale, gScale, bScale, globalThresh, boxX, boxY, imageObj, imagePrev, imageThumb, stage, t1; + viewWidth = 700; + //Default threshold before user input + defThresh = 127; + //Maximum value for greyness (white) + G = 255; + //Scale values for grayscaling RGB (taken from http://www.mathworks.com/help/toolbox/images/ref/rgb2gray.html ) + rScale = 0.2989; + gScale = 0.5870; + bScale = 0.1140; + globalThresh = 0; + boxX = 0; + boxY = 0; + + //Image drawn to viewport + imageObj = new Image(); + //Image used for brink thresholding + imagePrev = new Image(); + //Image used for viewport controller + imageThumb = new Image(); + + // Generates a PMF (Probability Mass Function) for the given image (required for Brink) + function genPMF(imageO, canvas) { + var canvas, context, i, imageData, data, pmf, brightness; + context = canvas.getContext("2d"); + i = 0; + + //Have to redraw image and then scrape data + context.drawImage(imageO, 0, 0); + imageData = context.getImageData(0, 0, canvas.width, canvas.height); + data = imageData.data; + pmf = []; + for (i = 0; i <= G; i++) { + pmf[i] = 0; + } + for (i = 0; i < data.length; i += 4) { + //Brightness is the greyscale value for the given pixel + brightness = rScale * data[i] + gScale * data[i + 1] + bScale * data[i + 2]; + pmf[Math.round(brightness)]++; + } + + // Normalize PMF values to total 1 + for (i = 0; i < pmf.length; i++) { + pmf[i] /= (data.length / 4); + } + return pmf; + } + + //Johanna's Brink Thresholding function + function threshBrink(pmf) { + var Topt, locMin, isMinInit, mF, mB, tmpVec1, tmpVec2, tmpVec3, tmp1, tmp2, tmp3, tmp4, tmpMat1, tmpMat2, i, j; + Topt = 0; // threshold value + isMinInit = 0; // flat for minimum initialization + + mF = []; // first foreground moment + mB = []; // first background moment + + tmpVec1 = []; // temporary vector 1 + tmpVec2 = []; // temporary vector 2 + tmpVec3 = []; // temporary vector 3 + + tmp1 = []; // temporary matrix 1 + tmp2 = []; // temporary matrix 2 + tmp3 = []; // temporary matrix 3 + tmp4 = []; // temporary matrix 4 + + tmpMat1 = []; // local temporary matrix 1 + tmpMat2 = []; // local temporary matrix 2 + + i = 0; + j = 0; + + //2-dimensionalize matrices + for (i = 0; i < 256; i++) { + tmp1[i] = []; + tmp2[i] = []; + tmp3[i] = []; + tmp4[i] = []; + + tmpMat1[i] = []; + tmpMat2[i] = []; + } + + // compute foreground moment + mF[0] = 0.0; + for (i = 1; i < 256; i++) { + mF[i] = i * pmf[i] + mF[i - 1]; + } + // compute background moment + mB = mF.slice(0); + + for (i = 0; i < 256; i++) { + mB[i] = mF[255] - mB[i]; + } + // compute brink entropy binarisation + for (i = 0; i < 256; i++) { + for (j = 0; j < 256; j++) { + tmp1[i][j] = mF[j] / i; + + if ((mF[j] === 0) || (i === 0)) { + tmp2[i][j] = 0.0; + tmp3[i][j] = 0.0; + } else { + tmp2[i][j] = Math.log(tmp1[i][j]); + tmp3[i][j] = Math.log(1.0 / tmp1[i][j]); + } + tmp4[i][j] = pmf[i] * (mF[j] * tmp2[i][j] + i * tmp3[i][j]); + } + } + + // compute the diagonal of the cumulative sum of tmp4 and store result in tmpVec1 + tmpMat1[0] = tmp4[0].slice(0); // copies first row of tmp4 to the first row of tmpMat1 + for (i = 1; i < 256; i++) { // get cumulative sum + for (j = 0; j < 256; j++) { + tmpMat1[i][j] = tmpMat1[i - 1][j] + tmp4[i][j]; + } + } + for (i = 0; i < 256; i++) { // set to diagonal + tmpVec1[i] = tmpMat1[i][i]; // tmpVec1 is now the diagonal of the cumulative sum of tmp4 + } + + // same operation but for background moment, NOTE: tmp1 through tmp4 get overwritten + for (i = 0; i < 256; i++) { + for (j = 0; j < 256; j++) { + tmp1[i][j] = mB[j] / i; // tmpb0 = m_b_rep ./ g_rep; + if ((mB[j] === 0) || (i === 0)) { + tmp2[i][j] = 0.0; // replace inf or NaN values with 0 + tmp3[i][j] = 0.0; + } else { + tmp2[i][j] = Math.log(tmp1[i][j]); + tmp3[i][j] = Math.log(1.0 / tmp1[i][j]); + } + tmp4[i][j] = pmf[i] * (mB[j] * tmp2[i][j] + i * tmp3[i][j]); + } + } + + // sum columns, subtract diagonal of cumulative sum of tmp4 + tmpVec2 = tmp4[0].slice(0); // copies first row of tmp4 to the first row of tmpMat2 + for (i = 0; i < 256; i++) { + for (j = 0; j < 256; j++) { + tmpVec2[j] += tmp4[i][j]; // sums of columns of tmp4 and store result in tmpVec2 + } + } + // compute the diagonal of the cumulative sum of tmp4 and store result in tmpVec1 + tmpMat2[0] = tmp4[0].slice(0); // copies first row of tmp4 to the first row of tmpMat2 + for (i = 1; i < 256; i++) { // get cumulative sum + for (j = 0; j < 256; j++) { + tmpMat2[i][j] = tmpMat2[i - 1][j] + tmp4[i][j]; + } + } + for (i = 0; i < 256; i++) { // set to diagonal + tmpVec3[i] = tmpMat2[i][i]; // tmpVec3 is now the diagonal of the cumulative sum of tmpMat2 + } + for (i = 0; i < 256; i++) { + tmpVec2[i] -= tmpVec3[i]; + } + for (i = 0; i < 256; i++) { + tmpVec1[i] += tmpVec2[i]; + } + // calculate the threshold value + for (i = 0; i < 256; i++) { + if (mF[i] !== 0 && mB[i] !== 0) { + if ((isMinInit === 0) || (tmpVec1[i] < locMin)) { + isMinInit = 1; + locMin = tmpVec1[i]; // gets a new minimum + Topt = i; + } + } + } + // return optimal threshold + return Topt; + } + + //Binarises data, splitting foreground and background at a given brightness level + function binarise(imageO, canvas, thresh, x, y) { + var context, imageData, data, i, brightness; + if (!x) { + x = 0; + } + if (!y) { + y = 0; + } + context = canvas.getContext("2d"); + defThresh = thresh; + //Have to redraw image and then scrape data + context.drawImage(imageO, x, y, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height); + imageData = context.getImageData(0, 0, canvas.width, canvas.height); + data = imageData.data; + for (i = 0; i < data.length; i += 4) { + //Brightness is the greyscale value for the given pixel + brightness = rScale * data[i] + gScale * data[i + 1] + bScale * data[i + 2]; + // binarise image (set to black or white) + if (brightness > thresh) { + data[i] = G; + data[i + 1] = G; + data[i + 2] = G; + } else { + data[i] = 0; + data[i + 1] = 0; + data[i + 2] = 0; + } + } + //Draw binarised image + context.putImageData(imageData, 0, 0); + } + + //Calculate initial threshold with the Brink formula and draw binarised image + imageThumb.onload = function () { + var scaleVal, layer, image, layerB, boxWidth, viewBox, canvas, context, bodyDOM, + pMouseDown, vMouseDown, vInitX, vInitY; + scaleVal = imageThumb.width / imageObj.width; + stage = new Kinetic.Stage({ + container: "image-miniframe", + width: imageThumb.width, + height: imageThumb.height + }); + layer = new Kinetic.Layer(); + image = new Kinetic.Image({ + x: 0, + y: 0, + width: imageThumb.width, + height: imageThumb.height, + image: imageThumb, + stroke: 'black', + strokewidth: 2 + }); + + layer.add(image); + stage.add(layer); + + layerB = new Kinetic.Layer(); + + boxWidth = viewWidth * scaleVal; + viewBox = new Kinetic.Rect({ + x: 0, + y: 0, + width: boxWidth, + height: boxWidth, + fill: 'blue', + stroke: 'black', + strokeWidth: 2, + opacity: 0.2, + draggable: false, + dragBoundfunc: function(pos) { + var newX = pos.x < 0 ? 0 : pos.x; + newX = newX > (imageThumb.width - boxWidth) ? (imageThumb.width - boxWidth) : newX; + var newY = pos.y < 0 ? 0 : pos.y; + newY = newY > (imageThumb.height - boxWidth) ? (imageThumb.height - boxWidth) : newY; + return { + x: newX, + y: newY + }; + }, + name: 'viewBox' + }); + + layerB.add(viewBox); + stage.add(layerB); + + canvas = document.getElementById("image-viewport"); + context = canvas.getContext("2d"); + bodyDOM = document.getElementsByTagName("body")[0]; + + function resizeWindow() { + viewWidth += $(window).height() - (canvas.offsetTop + viewWidth) - 10; + viewWidth = Math.min(imageObj.width, viewWidth); + canvas.width = viewWidth; + canvas.height = viewWidth; + $("#slider").width(viewWidth); + boxWidth = viewWidth * scaleVal; + viewBox.setWidth(boxWidth); + viewBox.setHeight(boxWidth); + layerB.draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + binarise(imageObj, canvas, defThresh, boxX, boxY); + } + + window.onresize = resizeWindow; + + resizeWindow(); + + pMouseDown = false; + + function pMoveBox(e) { + var pos, boxWidth, nX, nY; + pos = stage.getMousePosition(e); + if (pos !== undefined) { + boxWidth = viewWidth * scaleVal; + nX = pos.x - Math.round(boxWidth / 2); + nY = pos.y - Math.round(boxWidth / 2); + if (nX < 0) { + nX = 0; + } else if ((nX + boxWidth) > imageThumb.width) { + nX = imageThumb.width - boxWidth; + } + if (nY < 0) { + nY = 0; + } else if ((nY + boxWidth) > imageThumb.height) { + nY = imageThumb.height - boxWidth; + } + viewBox.setX(nX); + viewBox.setY(nY); + viewBox.getLayer().draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + binarise(imageObj, canvas, defThresh, boxX, boxY); + } + } + + function pClickDown(e) { + pMouseDown = true; + pMoveBox(e); + } + + image.on("mousedown", pClickDown); + viewBox.on("mousedown", pClickDown); + + vMouseDown = false; + vInitX = 0; + vInitY = 0; + canvas.addEventListener("mousedown", function (e) { + vMouseDown = true; + vInitX = e.clientX; + vInitY = e.clientY; + }); + bodyDOM.addEventListener("mousemove", function (e) { + if (pMouseDown) { + pMoveBox(e); + } else if (vMouseDown) { + var dX, dY, boxWidth, newX, newY; + dX = e.clientX - vInitX; + dY = e.clientY - vInitY; + + vInitX = e.clientX; + vInitY = e.clientY; + + boxWidth = viewWidth * scaleVal; + newX = viewBox.getX() - (dX * scaleVal); + newY = viewBox.getY() - (dY * scaleVal); + if (newX < 0) { + newX = 0; + } else if ((newX + boxWidth) > imageThumb.width) { + newX = imageThumb.width - boxWidth; + } + if (newY < 0) { + newY = 0; + } else if ((newY + boxWidth) > imageThumb.height) { + newY = imageThumb.height - boxWidth; + } + + viewBox.setX(newX); + viewBox.setY(newY); + viewBox.getLayer().draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + binarise(imageObj, canvas, defThresh, boxX, boxY); + } + }); + bodyDOM.addEventListener("mouseup", function (e) { + pMouseDown = false; + vMouseDown = false; + }); + }; + + imageObj.onload = function () { + var canvas, context, pmf; + canvas = document.getElementById("image-viewport"); + viewWidth += $(window).height() - (canvas.offsetTop + viewWidth) - 10; + canvas.width = viewWidth; + canvas.height = viewWidth; + binarise(imageObj, canvas, defThresh); + //Manually set inital value for slider + $("#slider").width(viewWidth); + imageThumb.src = $("#image-thumb").attr("src"); + }; + + imagePrev.onload = function () { + var canvas, context, pmf; + canvas = document.getElementById("image-preview"); + context = canvas.getContext("2d"); + canvas.width = imagePrev.width; + canvas.height = imagePrev.height; + pmf = genPMF(imagePrev, canvas); + defThresh = threshBrink(pmf); + $("#slider").slider("value", defThresh); + canvas.parentNode.removeChild(canvas); + imageObj.src = $("#image-full").attr("src"); + } + imagePrev.src = $("#image-mid").attr("src"); + + //jQuery slider definition for threshold controller + $("#slider").slider({ + animate: true, + min: 0, + max: G, + orientation: "horizontal", + step: 1, + value: defThresh, + range: false, + slide: function (event, ui) { + defThresh = ui.value; + binarise(imageObj, document.getElementById("image-viewport"), defThresh, boxX, boxY); + } + }); + + $('#submit').click(function () { + $.ajax({ + url: '', + type: 'POST', + data: JSON.stringify({'threshold': defThresh}), + contentType: 'application/json', + complete: function () { + window.location = "about:blank"; + } + }); + }); + }); +})(jQuery) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/crop.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/crop.js new file mode 100644 index 000000000..df841db2a --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/crop.js @@ -0,0 +1,213 @@ +(function ($) { + "use strict"; + //Default threshold before user input + //Maximum value for greyness + //Scale values for grayscaling RGB (taken from http://www.mathworks.com/help/toolbox/images/ref/rgb2gray.html ) + var defColour = "blue"; + var imageObj; + var stage; + + //Fraction of image width to make the margin + var marginWidth = 0.05; + + // Pixel margin size + var margin = 0; + + function update(group, activeAnchor) { + var topLeft = group.get(".topLeft")[0]; + var topRight = group.get(".topRight")[0]; + var bottomRight = group.get(".bottomRight")[0]; + var bottomLeft = group.get(".bottomLeft")[0]; + var rect = group.get(".rect")[0]; + + // update anchor positions + switch (activeAnchor.getName()) { + case "topLeft": + topRight.setY(activeAnchor.getY()); + bottomLeft.setX(activeAnchor.getX()); + break; + case "topRight": + topLeft.setY(activeAnchor.getY()); + bottomRight.setX(activeAnchor.getX()); + break; + case "bottomRight": + bottomLeft.setY(activeAnchor.getY()); + topRight.setX(activeAnchor.getX()); + break; + case "bottomLeft": + bottomRight.setY(activeAnchor.getY()); + topLeft.setX(activeAnchor.getX()); + break; + } + + rect.setPosition(topLeft.attrs.x, topLeft.attrs.y); + rect.setSize(topRight.attrs.x - topLeft.attrs.x, bottomLeft.attrs.y - topLeft.attrs.y); + } + + function addAnchor(group, x, y, name) { + var stage = group.getStage(); + var layer = group.getLayer(); + + var anchor = new Kinetic.Circle({ + x: x, + y: y, + stroke: '#666', + fill: '#ddd', + strokeWidth: 1, + radius: 3, + name: name, + draggable: true, + dragBoundFunc: function(pos) { + var newX = pos.x < margin ? margin : pos.x; + newX = newX > (margin + imageObj.width) ? (margin + imageObj.width) : newX; + var newY = pos.y < margin ? margin : pos.y; + newY = newY > (margin + imageObj.height) ? (margin + imageObj.height) : newY; + return { + x: newX, + y: newY + }; + } + }); + + anchor.on("dragmove", function() { + update(group, this); + layer.draw(); + }); + anchor.on("mousedown touchstart", function() { + group.setDraggable(false); + layer.draw(); + }); + anchor.on("dragend", function() { + var rect = group.get(".rect")[0]; + group.setDraggable(true); + layer.draw(); + }); + anchor.on("mouseover", function() { + var layer = this.getLayer(); + document.body.style.cursor = "pointer"; + this.setStrokeWidth(3); + layer.draw(); + }); + anchor.on("mouseout", function() { + var layer = this.getLayer(); + document.body.style.cursor = "default"; + this.setStrokeWidth(1); + layer.draw(); + }); + + group.add(anchor); + } + + function makeRect() { + var group = new Kinetic.Group({ + x: 0, + y: 0, + draggable: true, + name: "box" + }); + + var layer = new Kinetic.Layer(); + + layer.add(group); + stage.add(layer); + + var rect = new Kinetic.Rect({ + x: (imageObj.width / 20.0) + margin, + y: (imageObj.height / 20.0) + margin, + width: 18.0 * (imageObj.width / 20.0), + height: 18.0 * (imageObj.height / 20.0), + fill: defColour, + stroke: 'black', + strokeWidth: 2, + opacity: 0.2, + name: "rect" + }); + group.setDragBoundFunc(function(pos) { + var topLim = margin - rect.getY(); + var leftLim = margin - rect.getX(); + var rightLim = margin + imageObj.width - (rect.getX() + rect.getWidth()); + var bottomLim = margin + imageObj.height - (rect.getY() + rect.getHeight()); + var newX = pos.x < leftLim ? leftLim : pos.x; + newX = newX > rightLim ? rightLim : newX; + var newY = pos.y < topLim ? topLim : pos.y; + newY = newY > bottomLim ? bottomLim : newY; + return { + x: newX, + y: newY + }; + }); + group.add(rect); + + addAnchor(group, rect.getX(), rect.getY(), "topLeft"); + addAnchor(group, rect.getX() + rect.getWidth(), rect.getY(), "topRight"); + addAnchor(group, rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight(), "bottomRight"); + addAnchor(group, rect.getX(), rect.getY() + rect.getHeight(), "bottomLeft"); + + stage.draw(); + } + + function logRect() { + var group = stage.get(".box")[0]; + var topLeft = group.get(".topLeft")[0]; + var bottomRight = group.get(".bottomRight")[0]; + var oCoords = []; + oCoords[0] = Math.round(topLeft.getX() + group.getX() - margin); + oCoords[1] = Math.round(topLeft.getY() + group.getY() - margin); + oCoords[2] = Math.round(bottomRight.getX() + group.getX() - margin); + oCoords[3] = Math.round(bottomRight.getY() + group.getY() - margin); + return oCoords; + } + + // setUp + $(document).ready(function() { + imageObj = new Image(); + //Calculate initial threshold with the Brink formula and draw binarized image + imageObj.onload = function () { + margin = imageObj.width * marginWidth; + stage = new Kinetic.Stage({ + container: "image-preview", + width: imageObj.width + (2 * margin), + height: imageObj.height + (2 * margin) + }); + var layer = new Kinetic.Layer(); + var image = new Kinetic.Image({ + x: margin, + y: margin, + width: imageObj.width, + height: imageObj.height, + image: imageObj, + stroke: 'black', + strokewidth: 2 + }); + + layer.add(image); + stage.add(layer); + + makeRect(); + }; + + //Image path (TO BE REPLACED LATER) + imageObj.src = $("#image-original").attr("src"); + + $('#submit').click(function () { + var points = logRect(); + var serialized_data = JSON.stringify({ + 'ulx': points[0], + 'uly': points[1], + 'lrx': points[2], + 'lry': points[3], + 'imw': imageObj.width + }); + + $.ajax({ + url: '', + type: 'POST', + data: serialized_data, + contentType: 'application/json', + complete: function () { + window.location = 'about:blank'; + } + }); + }); + }); +})(jQuery) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/despeckle.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/despeckle.js new file mode 100644 index 000000000..63e7920a1 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/despeckle.js @@ -0,0 +1,413 @@ +(function ($) { + "use strict"; + //Setup + $(document).ready(function () { + var imageObj, imageThumb, BLACK, WHITE, rScale, gScale, bScale, defSize, viewWidth, boxX, boxY; + + //ImageData object storing full-sized image + + imageObj = new Image(); + imageThumb = new Image(); + //Constant for black rgb value + BLACK = 0; + WHITE = 255; + //Scale values taken from Matlab, used as coefficients for greycsaling + rScale = 0.2989; + gScale = 0.5870; + bScale = 0.1140; + //Default speckle size + defSize = 0; + //Width (square) of viewport + viewWidth = 700; + //Current x and y coordinates of the frame of the viewport, relative to the full image + boxX = 0; + boxY = 0; + + + + //binarises data, splitting foreground and background at a given brightness level + function binarise(thresh, x, y) { + if (x === undefined) { + x = 0; + } + if (y === undefined) { + y = 0; + } + var canvas, context, imageData, data, dLen, i, brightness; + canvas = document.getElementById("image-viewport"); + context = canvas.getContext("2d"); + //Have to redraw image and then scrape data + if (x == 0 && y == 0) { + context.drawImage(imageObj, x, y); + } else { + context.drawImage(imageObj, x, y, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height); + } + imageData = context.getImageData(0, 0, canvas.width, canvas.height); + data = imageData.data; + dLen = data.length; + for (i = 0; i < dLen; i += 4) { + //Brightness is the greyscale value for the given pixel + brightness = rScale * data[i] + gScale * data[i + 1] + bScale * data[i + 2]; + + // binarise image (set to black or white) + if (brightness > thresh) { + data[i] = 255; + data[i + 1] = 255; + data[i + 2] = 255; + } else { + data[i] = 0; + data[i + 1] = 0; + data[i + 2] = 0; + } + } + //Draw binarised image + context.putImageData(imageData, 0, 0); + } + + //Despeckling function + function despeckle(size, dx, dy) { + if (dx === undefined) { + dx = 0; + } + if (dy === undefined) { + dy = 0; + } + var canvas, context, imageDataO, dataO, w, h, dataT, i, j, x, y, pixelQueue, convX, convY, p, bail, + center, cX, cY, x2i, y2i, x2Lim, y2Lim, y2, x2, convX2, convY2, p2, + pointO, pointT, pX, pY; + defSize = size; + canvas = document.getElementById("image-viewport"); + context = canvas.getContext("2d"); + binarise(100, dx, dy); + if (size > 0) { + imageDataO = context.getImageData(0, 0, canvas.width, canvas.height); + dataO = imageDataO.data; + + w = canvas.width; + h = canvas.height; + + dataT = []; + for (i = 0; i < w; i++) { + dataT[i] = []; + for (j = 0; j < h; j++) { + dataT[i][j] = 0; + } + } + + pixelQueue = []; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + convX = x * 4; + convY = y * w * 4; + p = convX + convY; + if (dataT[x][y] === 0 && dataO[p] === BLACK) { + pixelQueue = []; + pixelQueue.push(p); + bail = false; + dataT[x][y] = 1; + for (i = 0; (i < pixelQueue.length) && (pixelQueue.length < size); i++) { + center = pixelQueue[i]; + + cX = (center % (w * 4)) / 4; + cY = (center - (cX * 4)) / (w * 4); + x2i = (cX > 0) ? (cX - 1) : 0; + y2i = (cY > 0) ? (cY - 1) : 0; + + x2Lim = Math.min(cX + 2, w); + y2Lim = Math.min(cY + 2, h); + for (y2 = y2i; y2 < y2Lim; y2++) { + for (x2 = x2i; x2 < x2Lim; x2++) { + if (dataT[x2][y2] === 2) { + bail = true; + break; + } + convX2 = x2 * 4; + convY2 = y2 * w * 4; + p2 = convX2 + convY2; + if (dataT[x2][y2] === 0 && dataO[p2] === BLACK) { + dataT[x2][y2] = 1; + pixelQueue.push(p2); + } + } + if (bail) { + break; + } + } + if (bail) { + break; + } + } + if ((!bail) && (pixelQueue.length < size)) { + while (pixelQueue.length > 0) { + pointO = pixelQueue.pop(); + dataO[pointO] = WHITE; + dataO[pointO + 1] = WHITE; + dataO[pointO + 2] = WHITE; + } + } else { + while (pixelQueue.length > 0) { + pointT = pixelQueue.pop(); + pX = (pointT % (w * 4)) / 4; + pY = (pointT - (pX * 4)) / (w * 4); + dataT[pX][pY] = 2; + } + } + } + } + } + context.putImageData(imageDataO, 0, 0); + } + } + + //Thumbnail post-loading functions, which occur after the full image is loaded + imageThumb.onload = function () { + var stage, layer, image, scaleVal, layerB, boxWidth, viewBox, canvas, context, bodyDOM, + pMouseDown, vMouseDown, vInitX, vInitY; + //Instantiation of KinteticJS objects + stage = new Kinetic.Stage({ + container: "image-miniframe", + width: imageThumb.width, + height: imageThumb.height + }); + layer = new Kinetic.Layer(); + image = new Kinetic.Image({ + x: 0, + y: 0, + width: imageThumb.width, + height: imageThumb.height, + image: imageThumb, + stroke: 'black', + strokewidth: 2 + }); + + layer.add(image); + stage.add(layer); + + //Ratio of thumbnail size to full image size + scaleVal = imageThumb.width / imageObj.width; + + layerB = new Kinetic.Layer(); + + boxWidth = viewWidth * scaleVal; + viewBox = new Kinetic.Rect({ + x: 0, + y: 0, + width: boxWidth, + height: boxWidth, + fill: 'blue', + stroke: 'black', + strokeWidth: 2, + opacity: 0.2, + draggable: false, + dragBoundfunc: function(pos) { + var newX = pos.x < 0 ? 0 : pos.x; + newX = newX > (imageThumb.width - boxWidth) ? (imageThumb.width - boxWidth) : newX; + var newY = pos.y < 0 ? 0 : pos.y; + newY = newY > (imageThumb.height - boxWidth) ? (imageThumb.height - boxWidth) : newY; + return { + x: newX, + y: newY + }; + }, + name: 'viewBox' + }); + + layerB.add(viewBox); + stage.add(layerB); + + //Assignment of mouse behaviours to canvases + canvas = document.getElementById("image-viewport"); + context = canvas.getContext("2d"); + bodyDOM = document.getElementsByTagName("body")[0]; + + function resizeWindow() { + viewWidth += $(window).height() - (canvas.offsetTop + viewWidth) - 10; + canvas.width = viewWidth; + canvas.height = viewWidth; + $("#slider").width(viewWidth); + boxWidth = viewWidth * scaleVal; + viewBox.setWidth(boxWidth); + viewBox.setHeight(boxWidth); + layerB.draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + despeckle(defSize, boxX, boxY); + } + + window.onresize = resizeWindow; + + resizeWindow(); + + //Bool for whether mousedown started in the thumbnail frame + pMouseDown = false; + + //Move viewport and despeckle + function setBox() { + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + despeckle(defSize, boxX, boxY); + } + + //Move thumbnail box + function pMoveBox(e) { + var pos, boxWidth, nX, nY; + pos = stage.getMousePosition(e); + if (pos !== undefined) { + boxWidth = viewWidth * scaleVal; + nX = pos.x - Math.round(boxWidth / 2); + nY = pos.y - Math.round(boxWidth / 2); + if (nX < 0) { + nX = 0; + } else if ((nX + boxWidth) > imageThumb.width) { + nX = imageThumb.width - boxWidth; + } + if (nY < 0) { + nY = 0; + } else if ((nY + boxWidth) > imageThumb.height) { + nY = imageThumb.height - boxWidth; + } + viewBox.setX(nX); + viewBox.setY(nY); + viewBox.getLayer().draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + binarise(100, boxX, boxY); + } + } + + // + image.on("mousedown", function (e) { + pMoveBox(e); + pMouseDown = true; + }); + + viewBox.on("mousedown", function () { + pMouseDown = true; + }); + + //Bool for whether mousedown started in the viewport + vMouseDown = false; + //Previous mouse coordinates + vInitX = 0; + vInitY = 0; + canvas.addEventListener("mousedown", function (e) { + vMouseDown = true; + vInitX = e.clientX; + vInitY = e.clientY; + }); + bodyDOM.addEventListener("mousemove", function (e) { + if (pMouseDown) { + pMoveBox(e); + } else if (vMouseDown) { + var dX, dY, boxWidth, newX, newY; + dX = e.clientX - vInitX; + dY = e.clientY - vInitY; + + vInitX = e.clientX; + vInitY = e.clientY; + + boxWidth = viewWidth * scaleVal; + newX = viewBox.getX() - (dX * scaleVal); + newY = viewBox.getY() - (dY * scaleVal); + if (newX < 0) { + newX = 0; + } else if ((newX + boxWidth) > imageThumb.width) { + newX = imageThumb.width - boxWidth; + } + if (newY < 0) { + newY = 0; + } else if ((newY + boxWidth) > imageThumb.height) { + newY = imageThumb.height - boxWidth; + } + + viewBox.setX(newX); + viewBox.setY(newY); + viewBox.getLayer().draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + binarise(100, boxX, boxY); + } + }); + bodyDOM.addEventListener("mouseup", function (e) { + if (pMouseDown) { + pMouseDown = false; + setBox(); + } else if (vMouseDown) { + var dX, dY, boxWidth, newX, newY; + vMouseDown = false; + dX = e.clientX - vInitX; + dY = e.clientY - vInitY; + + boxWidth = viewWidth * scaleVal; + newX = viewBox.getX() - (dX * scaleVal); + newY = viewBox.getY() - (dY * scaleVal); + if (newX < 0) { + newX = 0; + } else if ((newX + boxWidth) > imageThumb.width) { + newX = imageThumb.width - boxWidth; + } + if (newY < 0) { + newY = 0; + } else if ((newY + boxWidth) > imageThumb.height) { + newY = imageThumb.height - boxWidth; + } + + viewBox.setX(newX); + viewBox.setY(newY); + viewBox.getLayer().draw(); + boxX = viewBox.getX() / scaleVal; + boxY = viewBox.getY() / scaleVal; + despeckle(defSize, boxX, boxY); + } + }); + }; + + + imageObj.onload = function () { + var canvas, context; + //Adjust size of canvas to fit image + canvas = document.getElementById("image-viewport"); + context = canvas.getContext("2d"); + viewWidth += $(window).height() - (canvas.offsetTop + viewWidth) - 10; + canvas.width = viewWidth; + canvas.height = viewWidth; + binarise(100); + $("#slider").width(viewWidth); + imageThumb.src = $("#image-thumb").attr("src"); + }; + + imageObj.src = $("#image-full").attr("src"); + + //jQuery slider definition for threshold controller + $("#slider").slider({ + animate: true, + min: 0, + max: 100, + orientation: "horizontal", + step: 1, + value: 0, + range: false, + slide: function (event, ui) { + $("#cl_size").html(ui.value); + despeckle(ui.value, boxX, boxY); + console.log(imageObj.width) + } + }); + + $('#submit').click(function () { + var serialized_data = JSON.stringify({ + 'cc_size': defSize, + 'image_width': imageObj.width + }); + $.ajax({ + url: '', + type: 'POST', + data: serialized_data, + contentType: 'application/json', + complete: function () { + window.location = 'about:blank'; + } + }); + }); + }); +})(jQuery) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/jquery.knob.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/jquery.knob.js new file mode 100644 index 000000000..ae36b6ba6 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/jquery.knob.js @@ -0,0 +1,685 @@ +/*!jQuery Knob*/ +/** + * Downward compatible, touchable dial + * + * Version: 1.2.0 (15/07/2012) + * Requires: jQuery v1.7+ + * + * Copyright (c) 2012 Anthony Terrien + * Under MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Thanks to vor, eskimoblood, spiffistan, FabrizioC + */ +(function($) { + + /** + * Kontrol library + */ + "use strict"; + + /** + * Definition of globals and core + */ + var k = {}, // kontrol + max = Math.max, + min = Math.min; + + k.c = {}; + k.c.d = $(document); + k.c.t = function (e) { + return e.originalEvent.touches.length - 1; + }; + + /** + * Kontrol Object + * + * Definition of an abstract UI control + * + * Each concrete component must call this one. + * + * k.o.call(this); + * + */ + k.o = function () { + var s = this; + + this.o = null; // array of options + this.$ = null; // jQuery wrapped element + this.i = null; // mixed HTMLInputElement or array of HTMLInputElement + this.g = null; // 2D graphics context for 'pre-rendering' + this.v = null; // value ; mixed array or integer + this.cv = null; // change value ; not commited value + this.x = 0; // canvas x position + this.y = 0; // canvas y position + this.$c = null; // jQuery canvas element + this.c = null; // rendered canvas context + this.t = 0; // touches index + this.isInit = false; + this.fgColor = null; // main color + this.pColor = null; // previous color + this.dH = null; // draw hook + this.cH = null; // change hook + this.eH = null; // cancel hook + this.rH = null; // release hook + this.scale = 1; // scale factor + + this.run = function () { + var cf = function (e, conf) { + var k; + for (k in conf) { + s.o[k] = conf[k]; + } + s.init(); + s._configure() + ._draw(); + }; + + if(this.$.data('kontroled')) return; + this.$.data('kontroled', true); + + this.extend(); + this.o = $.extend( + { + // Config + min : this.$.data('min') || 0, + max : this.$.data('max') || 100, + stopper : true, + readOnly : this.$.data('readonly'), + + // UI + cursor : (this.$.data('cursor') === true && 30) + || this.$.data('cursor') + || 0, + thickness : this.$.data('thickness') || 0.35, + lineCap : this.$.data('linecap') || 'butt', + width : this.$.data('width') || 200, + height : this.$.data('height') || 200, + displayInput : this.$.data('displayinput') == null || this.$.data('displayinput'), + displayPrevious : this.$.data('displayprevious'), + fgColor : this.$.data('fgcolor') || '#87CEEB', + inputColor: this.$.data('inputcolor') || this.$.data('fgcolor') || '#87CEEB', + inline : false, + step : this.$.data('step') || 1, + + // Hooks + draw : null, // function () {} + change : null, // function (value) {} + cancel : null, // function () {} + release : null, // function (value) {} + error : null // function () {} + }, this.o + ); + + // routing value + if(this.$.is('fieldset')) { + + // fieldset = array of integer + this.v = {}; + this.i = this.$.find('input') + this.i.each(function(k) { + var $this = $(this); + s.i[k] = $this; + s.v[k] = $this.val(); + + $this.bind( + 'change' + , function () { + var val = {}; + val[k] = $this.val(); + s.val(val); + } + ); + }); + this.$.find('legend').remove(); + + } else { + // input = integer + this.i = this.$; + this.v = this.$.val(); + (this.v == '') && (this.v = this.o.min); + + this.$.bind( + 'change' + , function () { + s.val(s._validate(s.$.val())); + } + ); + } + + (!this.o.displayInput) && this.$.hide(); + + this.$c = $(''); + + this.c = this.$c[0].getContext? this.$c[0].getContext('2d') : null; + + if (!this.c) { + this.o.error && this.o.error(); + return; + } + + this.$ + .wrap($('
                  ')) + .before(this.$c); + + this.scale = (window.devicePixelRatio || 1) / + ( + this.c.webkitBackingStorePixelRatio || + this.c.mozBackingStorePixelRatio || + this.c.msBackingStorePixelRatio || + this.c.oBackingStorePixelRatio || + this.c.backingStorePixelRatio || 1 + ); + if (this.scale !== 1) { + this.$c[0].width = this.$c[0].width * this.scale; + this.$c[0].height = this.$c[0].height * this.scale; + this.$c.width(this.o.width); + this.$c.height(this.o.height); + } + + if (this.v instanceof Object) { + this.cv = {}; + this.copy(this.v, this.cv); + } else { + this.cv = this.v; + } + + this.$ + .bind("configure", cf) + .parent() + .bind("configure", cf); + + this._listen() + ._configure() + ._xy() + .init(); + + this.isInit = true; + + this._draw(); + + return this; + }; + + this._draw = function () { + + // canvas pre-rendering + var d = true, + c = document.createElement('canvas'); + + c.width = s.o.width * s.scale; + c.height = s.o.height * s.scale; + + s.g = c.getContext('2d'); + + s.clear(); + + s.dH + && (d = s.dH()); + + (d !== false) && s.draw(); + + s.c.drawImage(c, 0, 0); + c = null; + }; + + this._touch = function (e) { + + var touchMove = function (e) { + + var v = s.xy2val( + e.originalEvent.touches[s.t].pageX, + e.originalEvent.touches[s.t].pageY + ); + + if (v == s.cv) return; + + if ( + s.cH + && (s.cH(v) === false) + ) return; + + + s.change(s._validate(v)); + s._draw(); + }; + + // get touches index + this.t = k.c.t(e); + + // First touch + touchMove(e); + + // Touch events listeners + k.c.d + .bind("touchmove.k", touchMove) + .bind( + "touchend.k" + , function () { + k.c.d.unbind('touchmove.k touchend.k'); + + if ( + s.rH + && (s.rH(s.cv) === false) + ) return; + + s.val(s.cv); + } + ); + + return this; + }; + + this._mouse = function (e) { + + var mouseMove = function (e) { + var v = s.xy2val(e.pageX, e.pageY); + if (v == s.cv) return; + + if ( + s.cH + && (s.cH(v) === false) + ) return; + + s.change(s._validate(v)); + s._draw(); + }; + + // First click + mouseMove(e); + + // Mouse events listeners + k.c.d + .bind("mousemove.k", mouseMove) + .bind( + // Escape key cancel current change + "keyup.k" + , function (e) { + if (e.keyCode === 27) { + k.c.d.unbind("mouseup.k mousemove.k keyup.k"); + + if ( + s.eH + && (s.eH() === false) + ) return; + + s.cancel(); + } + } + ) + .bind( + "mouseup.k" + , function (e) { + k.c.d.unbind('mousemove.k mouseup.k keyup.k'); + + if ( + s.rH + && (s.rH(s.cv) === false) + ) return; + + s.val(s.cv); + } + ); + + return this; + }; + + this._xy = function () { + var o = this.$c.offset(); + this.x = o.left; + this.y = o.top; + return this; + }; + + this._listen = function () { + + if (!this.o.readOnly) { + this.$c + .bind( + "mousedown" + , function (e) { + e.preventDefault(); + s._xy()._mouse(e); + } + ) + .bind( + "touchstart" + , function (e) { + e.preventDefault(); + s._xy()._touch(e); + } + ); + this.listen(); + } else { + this.$.attr('readonly', 'readonly'); + } + + return this; + }; + + this._configure = function () { + + // Hooks + if (this.o.draw) this.dH = this.o.draw; + if (this.o.change) this.cH = this.o.change; + if (this.o.cancel) this.eH = this.o.cancel; + if (this.o.release) this.rH = this.o.release; + + if (this.o.displayPrevious) { + this.pColor = this.h2rgba(this.o.fgColor, "0.4"); + this.fgColor = this.h2rgba(this.o.fgColor, "0.6"); + } else { + this.fgColor = this.o.fgColor; + } + + return this; + }; + + this._clear = function () { + this.$c[0].width = this.$c[0].width; + }; + + this._validate = function(v) { + return (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step; + }; + + // Abstract methods + this.listen = function () {}; // on start, one time + this.extend = function () {}; // each time configure triggered + this.init = function () {}; // each time configure triggered + this.change = function (v) {}; // on change + this.val = function (v) {}; // on release + this.xy2val = function (x, y) {}; // + this.draw = function () {}; // on change / on release + this.clear = function () { this._clear(); }; + + // Utils + this.h2rgba = function (h, a) { + var rgb; + h = h.substring(1,7) + rgb = [parseInt(h.substring(0,2),16) + ,parseInt(h.substring(2,4),16) + ,parseInt(h.substring(4,6),16)]; + return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + a + ")"; + }; + + this.copy = function (f, t) { + for (var i in f) { t[i] = f[i]; } + }; + }; + + + /** + * k.Dial + */ + k.Dial = function () { + k.o.call(this); + + this.startAngle = null; + this.xy = null; + this.radius = null; + this.lineWidth = null; + this.cursorExt = null; + this.w2 = null; + this.PI2 = 2*Math.PI; + + this.extend = function () { + this.o = $.extend( + { + bgColor : this.$.data('bgcolor') || '#EEEEEE', + angleOffset : this.$.data('angleoffset') || 0, + angleArc : this.$.data('anglearc') || 360, + inline : true + }, this.o + ); + }; + + this.val = function (v) { + if (null != v) { + this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v; + this.v = this.cv; + this.$.val(this.v); + this._draw(); + } else { + return this.v; + } + }; + + this.xy2val = function (x, y) { + var a, ret; + + a = Math.atan2( + x - (this.x + this.w2) + , - (y - this.y - this.w2) + ) - this.angleOffset; + + if(this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) { + // if isset angleArc option, set to min if .5 under min + a = 0; + } else if (a < 0) { + a += this.PI2; + } + + ret = ~~ (0.5 + (a * (this.o.max - this.o.min) / this.angleArc)) + + this.o.min; + + this.o.stopper + && (ret = max(min(ret, this.o.max), this.o.min)); + + return ret; + }; + + this.listen = function () { + // bind MouseWheel + var s = this, + mw = function (e) { + e.preventDefault(); + var ori = e.originalEvent + ,deltaX = ori.detail || ori.wheelDeltaX + ,deltaY = ori.detail || ori.wheelDeltaY + ,v = parseInt(s.$.val()) + (deltaX>0 || deltaY>0 ? s.o.step : deltaX<0 || deltaY<0 ? -s.o.step : 0); + + if ( + s.cH + && (s.cH(v) === false) + ) return; + + s.val(v); + } + , kval, to, m = 1, kv = {37:-s.o.step, 38:s.o.step, 39:s.o.step, 40:-s.o.step}; + + this.$ + .bind( + "keydown" + ,function (e) { + var kc = e.keyCode; + + // numpad support + if(kc >= 96 && kc <= 105) { + kc = e.keyCode = kc - 48; + } + + kval = parseInt(String.fromCharCode(kc)); + + if (isNaN(kval)) { + + (kc !== 13) // enter + && (kc !== 8) // bs + && (kc !== 9) // tab + && (kc !== 189) // - + && e.preventDefault(); + + // arrows + if ($.inArray(kc,[37,38,39,40]) > -1) { + e.preventDefault(); + + var v = parseInt(s.$.val()) + kv[kc] * m; + + s.o.stopper + && (v = max(min(v, s.o.max), s.o.min)); + + s.change(v); + s._draw(); + + // long time keydown speed-up + to = window.setTimeout( + function () { m*=2; } + ,30 + ); + } + } + } + ) + .bind( + "keyup" + ,function (e) { + if (isNaN(kval)) { + if (to) { + window.clearTimeout(to); + to = null; + m = 1; + s.val(s.$.val()); + } + } else { + // kval postcond + (s.$.val() > s.o.max && s.$.val(s.o.max)) + || (s.$.val() < s.o.min && s.$.val(s.o.min)); + } + + } + ); + + this.$c.bind("mousewheel DOMMouseScroll", mw); + this.$.bind("mousewheel DOMMouseScroll", mw) + }; + + this.init = function () { + + if ( + this.v < this.o.min + || this.v > this.o.max + ) this.v = this.o.min; + + this.$.val(this.v); + this.w2 = this.o.width / 2; + this.cursorExt = this.o.cursor / 100; + this.xy = this.w2 * this.scale; + this.lineWidth = this.xy * this.o.thickness; + this.lineCap = this.o.lineCap; + this.radius = this.xy - this.lineWidth / 2; + + this.o.angleOffset + && (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset); + + this.o.angleArc + && (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc); + + // deg to rad + this.angleOffset = this.o.angleOffset * Math.PI / 180; + this.angleArc = this.o.angleArc * Math.PI / 180; + + // compute start and end angles + this.startAngle = 1.5 * Math.PI + this.angleOffset; + this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc; + + var s = max( + String(Math.abs(this.o.max)).length + , String(Math.abs(this.o.min)).length + , 2 + ) + 2; + + this.o.displayInput + && this.i.css({ + 'width' : ((this.o.width / 2 + 4) >> 0) + 'px' + ,'height' : ((this.o.width / 3) >> 0) + 'px' + ,'position' : 'absolute' + ,'vertical-align' : 'middle' + ,'margin-top' : ((this.o.width / 3) >> 0) + 'px' + ,'margin-left' : '-' + ((this.o.width * 3 / 4 + 2) >> 0) + 'px' + ,'border' : 0 + ,'background' : 'none' + ,'font' : 'bold ' + ((this.o.width / s) >> 0) + 'px Arial' + ,'text-align' : 'center' + ,'color' : this.o.inputColor || this.o.fgColor + ,'padding' : '0px' + ,'-webkit-appearance': 'none' + }) + || this.i.css({ + 'width' : '0px' + ,'visibility' : 'hidden' + }); + }; + + this.change = function (v) { + this.cv = v; + this.$.val(v); + }; + + this.angle = function (v) { + return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min); + }; + + this.draw = function () { + + var c = this.g, // context + a = this.angle(this.cv) // Angle + , sat = this.startAngle // Start angle + , eat = sat + a // End angle + , sa, ea // Previous angles + , r = 1; + + c.lineWidth = this.lineWidth; + + c.lineCap = this.lineCap; + + this.o.cursor + && (sat = eat - this.cursorExt) + && (eat = eat + this.cursorExt); + + c.beginPath(); + c.strokeStyle = this.o.bgColor; + c.arc(this.xy, this.xy, this.radius, this.endAngle, this.startAngle, true); + c.stroke(); + + if (this.o.displayPrevious) { + ea = this.startAngle + this.angle(this.v); + sa = this.startAngle; + this.o.cursor + && (sa = ea - this.cursorExt) + && (ea = ea + this.cursorExt); + + c.beginPath(); + c.strokeStyle = this.pColor; + c.arc(this.xy, this.xy, this.radius, sa, ea, false); + c.stroke(); + r = (this.cv == this.v); + } + + c.beginPath(); + c.strokeStyle = r ? this.o.fgColor : this.fgColor ; + c.arc(this.xy, this.xy, this.radius, sat, eat, false); + c.stroke(); + }; + + this.cancel = function () { + this.val(this.v); + }; + }; + + $.fn.dial = $.fn.knob = function (o) { + return this.each( + function () { + var d = new k.Dial(); + d.o = o; + d.$ = $(this); + d.run(); + } + ).parent(); + }; + +})(jQuery); \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/main.css b/rodan-main/code/rodan/jobs/gamera_rodan/static/main.css new file mode 100644 index 000000000..00a3e30a0 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/main.css @@ -0,0 +1,300 @@ +/* + * HTML5 Boilerplate + * + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ + +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ + +html, +button, +input, +select, +textarea { + color: #222; +} + +body { + font-size: 1em; + line-height: 1.4; +} + +/* + * Remove text-shadow in selection highlight: h5bp.com/i + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +/* + * A better looking default horizontal rule + */ + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +/* + * Remove the gap between images and the bottom of their containers: h5bp.com/i/440 + */ + +img { + vertical-align: middle; +} + +/* + * Remove default fieldset styles. + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/* + * Allow only vertical resizing of textareas. + */ + +textarea { + resize: vertical; +} + +/* ========================================================================== + Chrome Frame prompt + ========================================================================== */ + +.chromeframe { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + +/* ========================================================================== + Author's custom styles + ========================================================================== */ + + + + + + + + + + + + + + + + + +/* ========================================================================== + Helper classes + ========================================================================== */ + +/* + * Image replacement + */ + +.ir { + background-color: transparent; + border: 0; + overflow: hidden; + /* IE 6/7 fallback */ + *text-indent: -9999px; +} + +.ir:before { + content: ""; + display: block; + width: 0; + height: 150%; +} + +/* + * Hide from both screenreaders and browsers: h5bp.com/u + */ + +.hidden { + display: none !important; + visibility: hidden; +} + +/* + * Hide only visually, but have it available for screenreaders: h5bp.com/v + */ + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* + * Extends the .visuallyhidden class to allow the element to be focusable + * when navigated to via the keyboard: h5bp.com/p + */ + +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +/* + * Hide visually and from screenreaders, but maintain layout + */ + +.invisible { + visibility: hidden; +} + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ + +.clearfix:before, +.clearfix:after { + content: " "; /* 1 */ + display: table; /* 2 */ +} + +.clearfix:after { + clear: both; +} + +/* + * For IE 6/7 only + * Include this rule to trigger hasLayout and contain floats. + */ + +.clearfix { + *zoom: 1; +} + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ + +@media only screen and (min-width: 35em) { + /* Style adjustments for viewports that meet the condition */ +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + /* Style adjustments for high resolution devices */ +} + +/* ========================================================================== + Print styles. + Inlined to avoid required HTTP connection: h5bp.com/r + ========================================================================== */ + +@media print { + * { + background: transparent !important; + color: #000 !important; /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* + * Don't show links for images, or javascript/internal links + */ + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; /* h5bp.com/t */ + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page { + margin: 0.5cm; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } +} diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/normalize.css b/rodan-main/code/rodan/jobs/gamera_rodan/static/normalize.css new file mode 100644 index 000000000..8d57e3c96 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/normalize.css @@ -0,0 +1,533 @@ +/*! normalize.css v1.1.1 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. + */ + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * Known issue: no IE 6 support. + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Prevent system color scheme's background color being used in Firefox, IE, + * and Opera. + * 2. Prevent system color scheme's text color being used in Firefox, IE, and + * Opera. + * 3. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * `em` units. + * 4. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + background: #fff; /* 1 */ + color: #000; /* 2 */ + font-size: 100%; /* 3 */ + -webkit-text-size-adjust: 100%; /* 4 */ + -ms-text-size-adjust: 100%; /* 4 */ +} + +/** + * Address `font-family` inconsistency between `textarea` and other form + * elements. + */ + +html, +button, +input, +select, +textarea { + font-family: sans-serif; +} + +/** + * Address margins handled incorrectly in IE 6/7. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address font sizes and margins set differently in IE 6/7. + * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * Address styling not present in IE 7/8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + * Known issue: no IE 6/7 normalization. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 6/7/8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address margins set differently in IE 6/7. + */ + +p, +pre { + margin: 1em 0; +} + +/** + * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + _font-family: 'courier new', monospace; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Address CSS quotes not supported in IE 6/7. + */ + +q { + quotes: none; +} + +/** + * Address `quotes` property not supported in Safari 4. + */ + +q:before, +q:after { + content: ''; + content: none; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Lists + ========================================================================== */ + +/** + * Address margins set differently in IE 6/7. + */ + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * Address paddings set differently in IE 6/7. + */ + +menu, +ol, +ul { + padding: 0 0 0 40px; +} + +/** + * Correct list images handled incorrectly in IE 7. + */ + +nav ul, +nav ol { + list-style: none; + list-style-image: none; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * 2. Improve image quality when scaled in IE 7. + */ + +img { + border: 0; /* 1 */ + -ms-interpolation-mode: bicubic; /* 2 */ +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Correct margin displayed oddly in IE 6/7. + */ + +form { + margin: 0; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct color not being inherited in IE 6/7/8/9. + * 2. Correct text not wrapping in Firefox 3. + * 3. Correct alignment displayed oddly in IE 6/7. + */ + +legend { + border: 0; /* 1 */ + padding: 0; + white-space: normal; /* 2 */ + *margin-left: -7px; /* 3 */ +} + +/** + * 1. Correct font size not being inherited in all browsers. + * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * and Chrome. + * 3. Improve appearance and consistency in all browsers. + */ + +button, +input, +select, +textarea { + font-size: 100%; /* 1 */ + margin: 0; /* 2 */ + vertical-align: baseline; /* 3 */ + *vertical-align: middle; /* 3 */ +} + +/** + * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * Known issue: inner spacing remains in IE 6. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ + *overflow: visible; /* 4 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to content-box in IE 8/9. + * 2. Remove excess padding in IE 8/9. + * 3. Remove excess padding in IE 7. + * Known issue: excess padding remains in IE 6. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + *height: 13px; /* 3 */ + *width: 13px; /* 3 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 3+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/static/show_stats.js b/rodan-main/code/rodan/jobs/gamera_rodan/static/show_stats.js new file mode 100644 index 000000000..9469a86c8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/static/show_stats.js @@ -0,0 +1,18 @@ +var parts = window.location.search.substr(1).split("="); +if (parts.length === 2) { + if (parts[0] === "debug" && parts[1] === "true") { + var stats = new Stats(); + stats.setMode(0); // 0: fps, 1: ms + document.body.appendChild( stats.domElement ); + + // Align top-left + stats.domElement.style.position = 'absolute'; + stats.domElement.style.right = '0px'; + stats.domElement.style.top = '0px'; + stats.begin(); + setInterval( function () { + stats.end(); + stats.begin(); + }, 1000 / 60); + } +} \ No newline at end of file diff --git a/rodan/management/commands/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/__init__.py old mode 100644 new mode 100755 similarity index 100% rename from rodan/management/commands/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/classification.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/classification.py new file mode 100755 index 000000000..625be837b --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/classification.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# -------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/classification.py +# Purpose: Wrapper for classification. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# -------------------------------------------------------------------------------------------------- + +import os +from shutil import copyfile +import gamera.core +import gamera.gamera_xml +import gamera.classify +import gamera.knn +from gamera.gamera_xml import glyphs_from_xml +from rodan.jobs.base import RodanTask + + +class ClassificationTask(RodanTask): + name = 'Non-Interactive Classifier' + author = "Ling-Xiao Yang" + description = "Performs classification on a binarized staff-less image and outputs an xml file." + enabled = True + category = "Gamera - Classification" + settings = { + 'title': 'Bounding box size', + 'type': 'object', + 'properties': { + 'Bounding box size': { + 'type': 'integer', + 'minimum': 1, + 'default': 4 + } + } + } + interactive = False + + input_port_types = [{ + 'name': 'GameraXML - Connected Components', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1 + }, { + 'name': 'GameraXML - Training Data', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1 + }, { + 'name': 'GameraXML - Feature Selection', + 'resource_types': ['application/gamera+xml'], + 'minimum': 0, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'GameraXML - Classified Glyphs', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + classifier_path = inputs['GameraXML - Training Data'][0]['resource_path'] + with self.tempdir() as tdir: + tempPath = os.path.join(tdir, classifier_path + '.xml') + copyfile(classifier_path, tempPath) + cknn = gamera.knn.kNNNonInteractive(tempPath) + if 'GameraXML - Feature Selection' in inputs: + cknn.load_settings(inputs['GameraXML - Feature Selection'][0]['resource_path']) + func = gamera.classify.BoundingBoxGroupingFunction( + settings['Bounding box size']) + # Load the connected components + ccs = glyphs_from_xml( + inputs['GameraXML - Connected Components'][0]['resource_path']) + # Do grouping + cs_image = cknn.group_and_update_list_automatic(ccs, + grouping_function=func, + max_parts_per_group=4, + max_graph_size=16) + # Generate the Gamera features + cknn.generate_features_on_glyphs(cs_image) + # Write the glyphs to GameraXML + output_xml = gamera.gamera_xml.WriteXMLFile(glyphs=cs_image, + with_features=True) + for i in range(len(outputs['GameraXML - Classified Glyphs'])): + output_xml.write_filename( + outputs['GameraXML - Classified Glyphs'][i]['resource_path']) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/masking.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/masking.py new file mode 100755 index 000000000..c49c5306c --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/masking.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/masking.py +# Purpose: Wrapper for simple masking operations. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import Image, load_image +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class GameraMaskLogicalAnd(RodanTask): + + name = 'Mask (logical \'and\')' + author = 'Ryan Bannon' + description = Image.and_image.__doc__.replace("\\n", "\n").replace('\\"', '"') + settings ={} + enabled = True + category = 'Gamera - Masking' + interactive = False + + input_port_types = [{ + 'name': 'Source image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Mask image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Source image with mask applied', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Source image'][0]['resource_path']) + image_mask = load_image(inputs['Mask image'][0]['resource_path']) + image_result = image_source.and_image(image_mask) + for i in range(len(outputs['Source image with mask applied'])): + image_result.save_PNG(outputs['Source image with mask applied'][i]['resource_path']) + return True + +class GameraMaskLogicalXor(RodanTask): + + name = 'Mask (logical \'xor\')' + author = 'Ryan Bannon' + description = Image.xor_image.__doc__.replace("\\n", "\n").replace('\\"', '"') + settings ={} + enabled = True + category = 'Gamera - Masking' + interactive = False + + input_port_types = [{ + 'name': 'Source image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Mask image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Source image with mask applied', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Source image'][0]['resource_path']) + image_mask = load_image(inputs['Mask image'][0]['resource_path']) + image_result = image_source.xor_image(image_mask) + for i in range(len(outputs['Source image with mask applied'])): + image_result.save_PNG(outputs['Source image with mask applied'][i]['resource_path']) + return True diff --git a/rodan/migrations/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/__init__.py similarity index 100% rename from rodan/migrations/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/binarization.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/binarization.py new file mode 100755 index 000000000..1094f985b --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/binarization.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/plugins/binarization.py +# Purpose: Wrapper for binarization plugins. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.plugins import binarization +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class gamera_gatos_background(RodanTask): + + name = 'Gatos Background' + author = 'Ryan Bannon' + description = binarization.gatos_background.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={ + 'title': 'Gatos background settings', + 'type': 'object', + 'properties': { + 'Region size': { + 'type': 'integer', + 'minimum': 1, + 'default': 15 + } + } + } + + enabled = True + category = 'Gamera - Binarization' + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG - preliminary binarization of the image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Greyscale PNG - source image to binarize', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Greyscale PNG - background estimation image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG - source image to binarize'][0]['resource_path']) + image_prelim = load_image(inputs['Onebit PNG - preliminary binarization of the image'][0]['resource_path']) + image_result = image_source.gatos_background(image_prelim, settings['Region size']) + for i in range(len(outputs['Greyscale PNG - background estimation image'])): + image_result.save_PNG(outputs['Greyscale PNG - background estimation image'][i]['resource_path']) + return True + +class gamera_gatos_threshold(RodanTask): + + name = 'Gatos Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.binarization.gatos_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Gatos threshold settings', + 'type': 'object', + 'properties': { + 'q': { + 'type': 'number', + 'default': 0.6, + 'description': 'Use default setting (unless you know what you are doing).' + }, + 'p1': { + 'type': 'number', + 'default': 0.5, + 'description': 'Use default setting (unless you know what you are doing).' + }, + 'p2': { + 'type': 'number', + 'default': 0.8, + 'description': 'Use default setting (unless you know what you are doing).' + } + } + } + + enabled = True + category = "Gamera - Binarization" + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG - preliminary binarization of the image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Greyscale PNG - estimated background of the image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Greyscale PNG - source image to binarize', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG - source image to binarize'][0]['resource_path']) + image_background = load_image(inputs['Greyscale PNG - estimated background of the image'][0]['resource_path']) + image_prelim = load_image(inputs['Onebit PNG - preliminary binarization of the image'][0]['resource_path']) + image_result = image_source.gatos_threshold(image_background, image_prelim, settings['q'], settings['p1'], settings['p2']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_brink_threshold(RodanTask): + + name = 'Brink Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.binarization.brink_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = {} + + enabled = True + category = "Gamera - Binarization" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.brink_threshold() + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_sauvola_threshold(RodanTask): + + name = 'Sauvola Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.binarization.sauvola_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Sauvola threshold settings', + 'type': 'object', + 'properties': { + 'Region size': { + 'type': 'integer', + 'default': 15, + 'description': 'The size of the region in which to calculate a threshold.' + }, + 'Sensitivity': { + 'type': 'number', + 'default': 0.5, + 'description': 'The sensitivity weight on the adjusted variance.' + }, + 'Dynamic range': { + 'type': 'integer', + 'minimum': 1, + 'maximum': 255, + 'default': 128, + 'description': 'The dynamic range of the variance.' + }, + 'Lower bound': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 255, + 'default': 20, + 'description': 'A global threshold beneath which all pixels are considered black.' + }, + 'Upper bound': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 255, + 'default': 150, + 'description': 'A global threshold above which all pixels are considered white.' + } + } + } + + enabled = True + category = "Gamera - Binarization" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.sauvola_threshold(settings['Region size'], settings['Sensitivity'], settings['Dynamic range'], settings['Lower bound'], settings['Upper bound']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_niblack_threshold(RodanTask): + + name = 'Niblack Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.binarization.niblack_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Niblack threshold settings', + 'type': 'object', + 'properties': { + 'Region size': { + 'type': 'integer', + 'default': 15, + 'description': 'The size of the region in which to calculate a threshold.' + }, + 'Sensitivity': { + 'type': 'number', + 'default': -0.2, + 'description': 'The sensitivity weight on the adjusted variance.' + }, + 'Lower bound': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 255, + 'default': 20, + 'description': 'A global threshold beneath which all pixels are considered black.' + }, + 'Upper bound': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 255, + 'default': 150, + 'description': 'A global threshold above which all pixels are considered white.' + } + } + } + + enabled = True + category = "Gamera - Binarization" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.niblack_threshold(settings['Region size'], settings['Sensitivity'], settings['Lower bound'], settings['Upper bound']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/cc_analysis.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/cc_analysis.py new file mode 100644 index 000000000..841cf779a --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/cc_analysis.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# -------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/classification.py +# Purpose: Wrapper for classification. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# -------------------------------------------------------------------------------------------------- + +import gamera.core +import gamera.gamera_xml +import gamera.classify +import gamera.knn +from gamera.plugins import segmentation +from rodan.jobs.base import RodanTask + + +class CCAnalysis(RodanTask): + name = 'CC Analysis' + author = "Andrew Fogarty" + description = segmentation.cc_analysis.escape_docstring().replace("\\n", "\n").replace( '\\"', '"') + enabled = True + category = "Gamera - Classification" + interactive = False + settings = {} + input_port_types = [{ + 'name': '1-Bit PNG Image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'GameraXML - Connected Components', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1 + }] + + def run_my_task(self, inputs, settings, outputs): + image_path = inputs['1-Bit PNG Image'][0]['resource_path'] + input_image = gamera.core.load_image(image_path) + ccs = input_image.cc_analysis() + output_xml = gamera.gamera_xml.WriteXMLFile(glyphs=ccs, + with_features=True) + output_xml.write_filename( + outputs['GameraXML - Connected Components'][0]['resource_path']) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_conversion.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_conversion.py new file mode 100755 index 000000000..1e27ecc17 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_conversion.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/plugins/image_conversion.py +# Purpose: Wrapper for image conversion plugins. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.plugins import image_conversion +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class gamera_to_rgb(RodanTask): + + name = 'Convert to RGB PNG' + author = 'Ryan Bannon' + description = image_conversion.to_rgb.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Image Conversion' + interactive = False + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'RGB PNG image', + 'resource_types': ['image/rgb+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['PNG image'][0]['resource_path']) + image_result = image_source.to_rgb() + image_result.save_PNG(outputs['RGB PNG image'][0]['resource_path']) + for i in range(len(outputs['RGB PNG image'])): + image_result.save_PNG(outputs['RGB PNG image'][i]['resource_path']) + return True + +class gamera_to_greyscale(RodanTask): + + name = 'Convert to greyscale PNG' + author = 'Ryan Bannon' + description = image_conversion.to_greyscale.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Image Conversion' + interactive = False + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['PNG image'][0]['resource_path']) + image_result = image_source.to_greyscale() + for i in range(len(outputs['Greyscale PNG image'])): + image_result.save_PNG(outputs['Greyscale PNG image'][i]['resource_path']) + return True + +class gamera_to_grey16(RodanTask): + + name = 'Convert to greyscale 16 PNG' + author = 'Ryan Bannon' + description = image_conversion.to_grey16.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Image Conversion' + interactive = False + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Greyscale 16 PNG image', + 'resource_types': ['image/grey16+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['PNG image'][0]['resource_path']) + image_result = image_source.to_grey16() + for i in range(len(outputs['Greyscale 16 PNG image'])): + image_result.save_PNG(outputs['Greyscale 16 PNG image'][i]['resource_path']) + return True + +class gamera_to_onebit(RodanTask): + + name = 'Convert to one-bit (black and white) PNG' + author = 'Ryan Bannon' + description = image_conversion.to_onebit.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Image Conversion' + interactive = False + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'One-bit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['PNG image'][0]['resource_path']) + image_result = image_source.to_onebit() + for i in range(len(outputs['One-bit PNG image'])): + image_result.save_PNG(outputs['One-bit PNG image'][i]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_utilities.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_utilities.py new file mode 100755 index 000000000..fc6a8249e --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/image_utilities.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/plugins/image_utilities.py +# Purpose: Wrapper for image utilities plugins. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.plugins import image_utilities +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class gamera_invert(RodanTask): + + name = 'Invert' + author = 'Ryan Bannon' + description = image_utilities.invert.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Image Utilities' + interactive = False + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png', 'image/grey16+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['PNG image'][0]['resource_path']) + image_source.invert() + for i in range(len(outputs['PNG image'])): + image_source.save_PNG(outputs['PNG image'][i]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/morphology.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/morphology.py new file mode 100755 index 000000000..88a7e5cec --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/morphology.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# -------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamera functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/plugins/morphology.py +# Purpose: Wrapper for morphology plugins. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# -------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.plugins import morphology +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + + +class gamera_despeckle(RodanTask): + + name = 'Despeckle' + author = 'Ryan Bannon' + description = morphology.despeckle.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Despeckle settings', + 'type': 'object', + 'properties': { + 'Connected component size': { + 'type': 'integer', + 'default': 1, + 'minimum': 1, + 'description': 'iThe maximum number of pixels in each connected component that will be removed. 1 is a special case that runs faster as it does not require recursion.' + } + } + } + + enabled = True + category = "Gamera - Morphology" + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG despeckled image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_result = load_image(inputs['Onebit PNG image'][0]['resource_path']) + image_result.despeckle(settings['Connected component size']) + for i in range(len(outputs['Onebit PNG despeckled image'])): + image_result.save_PNG(outputs['Onebit PNG despeckled image'][i]['resource_path']) + return True + + +class gamera_dilate(RodanTask): + + name = 'Dilate' + author = 'Gabriel Vigliensoni' + description = morphology.dilate.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = {'title': 'Despeckle settings', + 'type': 'object' + } + + enabled = True + category = "Gamera - Morphology" + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG dilated image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + + def run_my_task(self, inputs, settings, outputs): + + image_result = load_image(inputs['Onebit PNG image'][0]['resource_path']) + processed_image = image_result.dilate() + for i in range(len(outputs['Onebit PNG dilated image'])): + processed_image.save_PNG(outputs['Onebit PNG dilated image'][i]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/threshold.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/threshold.py new file mode 100755 index 000000000..8671f08d2 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/plugins/threshold.py @@ -0,0 +1,287 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/plugins/threshold.py +# Purpose: Wrapper for threshold plugins. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.plugins import threshold +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class gamera_otsu_threshold(RodanTask): + + name = 'Otsu Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.threshold.otsu_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Otsu threshold settings', + 'type': 'object', + 'properties': { + 'Storage format': { + 'enum': ['Dense (no compression)', 'RLE (run-length encoding compression)'], + 'type': 'string', + 'default': 'Dense (no compression)', + 'description': 'Specifies the compression type for the result.' + } + } + } + + enabled = True + category = "Gamera - Threshold" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.otsu_threshold(settings['Storage format']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_tsai_moment_preserving_threshold(RodanTask): + + name = 'Tsai Moment Preserving Threshold' + author = 'Ryan Bannon' + description = gamera.plugins.threshold.tsai_moment_preserving_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Tsai Moment Preserving Threshold', + 'type': 'object', + 'properties': { + 'Storage format': { + 'enum': ['Dense (no compression)', 'RLE (run-length encoding compression)'], + 'type': 'string', + 'default': 'Dense (no compression)', + 'description': 'Specifies the compression type for the result.' + } + } + } + + enabled = True + category = "Gamera - Threshold" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.tsai_moment_preserving_threshold(settings['Storage format']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_abutaleb_threshold(RodanTask): + + name = 'Abutaleb locally-adaptive threshold' + author = 'Ryan Bannon' + description = gamera.plugins.threshold.abutaleb_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Abutaleb locally-adaptive threshold', + 'type': 'object', + 'properties': { + 'Storage format': { + 'enum': ['Dense (no compression)', 'RLE (run-length encoding compression)'], + 'type': 'string', + 'default': 'Dense (no compression)', + 'description': 'Specifies the compression type for the result.' + } + } + } + + enabled = True + category = "Gamera - Threshold" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.abutaleb_threshold(settings['Storage format']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_bernsen_threshold(RodanTask): + + name = 'Bernsen threshold' + author = 'Ryan Bannon' + description = gamera.plugins.threshold.bernsen_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'Bernsen threshold', + 'type': 'object', + 'properties': { + 'Storage format': { + 'enum': ['Dense (no compression)', 'RLE (run-length encoding compression)'], + 'type': 'string', + 'default': 'Dense (no compression)', + 'description': 'Specifies the compression type for the result.' + }, + 'Region size': { + 'type': 'integer', + 'minimum': 1, + 'maximum': 50, + 'default': 11, + 'description': 'The size of each region in which to calculate a threshold.' + }, + 'Contrast limit': { + 'type': 'integer', + 'minimum': 0, + 'maximum': 255, + 'default': 80, + 'description': 'The minimum amount of contrast required to threshold.' + }, + 'Doubt to black': { + 'type': 'boolean', + 'default': False, + 'description': 'When True, ''doubtful'' values are set to black, otherwise to white.' + } + } + } + + enabled = True + category = "Gamera - Threshold" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale PNG image', + 'resource_types': ['image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Greyscale PNG image'][0]['resource_path']) + image_result = image_source.bernsen_threshold(settings['Storage format'], settings['Region size'], settings['Contrast limit'], settings['Doubt to black']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + +class gamera_djvu_threshold(RodanTask): + + name = 'DjVu threshold' + author = 'Ryan Bannon' + description = gamera.plugins.threshold.djvu_threshold.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings = { + 'title': 'DjVu threshold', + 'type': 'object', + 'properties': { + 'Smoothness': { + 'type': 'number', + 'minimum': 0.0, + 'maximum': 1.0, + 'default': 0.2, + 'description': 'The amount of effect that parent blocks have on their children blocks. Higher values will result in more smoothness between blocks. Expressed as a percentage between 0.0 and 1.0.' + }, + 'Maximum block size': { + 'type': 'integer', + 'minimum': 1, + 'default': 512, + 'description': 'The size of the largest block to determine a threshold.' + }, + 'Minimum block size': { + 'type': 'integer', + 'minimum': 1, + 'default': 64, + 'description': 'The size of the smallest block to determine a threshold.' + }, + 'Block factor': { + 'type': 'integer', + 'minimum': 1, + 'maximum': 8, + 'default': 2, + 'description': 'The number of child blocks (in each direction) per parent block. For instance, a *block_factor* of 2 results in 4 children per parent.' + } + } + } + + enabled = True + category = "Gamera - Threshold" + interactive = False + + input_port_types = [{ + 'name': 'RGB PNG image', + 'resource_types': ['image/rgb+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['RGB PNG image'][0]['resource_path']) + image_result = image_source.djvu_threshold(settings['Smoothness'], settings['Maximum block size'], settings['Minimum block size'], settings['Block factor']) + for i in range(len(outputs['Onebit PNG image'])): + image_result.save_PNG(outputs['Onebit PNG image'][i]['resource_path']) + return True + diff --git a/rodan/paginators/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/__init__.py similarity index 100% rename from rodan/paginators/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/__init__.py diff --git a/rodan/templatetags/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/custom/__init__.py similarity index 100% rename from rodan/templatetags/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/custom/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/custom/poly_mask.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/custom/poly_mask.py new file mode 100644 index 000000000..3035c95d1 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/custom/poly_mask.py @@ -0,0 +1,101 @@ +import json +import os +from gamera.core import load_image +from gamera.plugins.pil_io import from_pil +from PIL import Image +from PIL import ImageDraw +from rodan.jobs.base import RodanTask +from rodan.jobs.gamera_rodan.helpers.ensure_pixel_type import ensure_pixel_type +from rodan.settings import MEDIA_URL, MEDIA_ROOT + +def media_file_path_to_public_url(media_file_path): + chars_to_remove = len(MEDIA_ROOT) + return os.path.join(MEDIA_URL, media_file_path[chars_to_remove:]) + +class PolyMask(RodanTask): + name = 'Manual Polygon Masking' + author = "Ling-Xiao Yang" + description = "Interactive interface to create polygon masks" + settings = {} + enabled = True + category = "Gamera - Masking" + interactive = True + + input_port_types = [{ + 'name': 'PNG image', + 'resource_types': ['image/onebit+png', 'image/greyscale+png', 'image/grey16+png', 'image/rgb+png'], + 'minimum': 1, + 'maximum': 1 + }, + { + 'name': 'Polygons', + 'resource_types': ['application/gamera-polygons+txt'], + 'minimum': 0, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'PNG image (masked)', + 'resource_types': ['image/onebit+png', 'image/greyscale+png', 'image/grey16+png', 'image/rgb+png'], + 'minimum': 0, + 'maximum': 1 + }, + { + 'name': 'Polygons', + 'resource_types': ['application/gamera-polygons+txt'], + 'minimum': 0, + 'maximum': 1 + }] + + def run_my_task(self, inputs, settings, outputs): + if '@polygon_outer_points' not in settings: + task_image = load_image(inputs['PNG image'][0]['resource_path']) + polygon_outer_points = '[]' + if 'Polygons' in inputs: + with open(inputs['Polygons'][0]['resource_path'], 'r') as myfile: + polygon_outer_points = myfile.read().replace('\n', '') + settings_update = {'@image_width': task_image.ncols, '@polygon_outer_points': polygon_outer_points} + return self.WAITING_FOR_INPUT(settings_update) + else: + polygon_outer_points = settings['@polygon_outer_points'] + + # If image output port, write image + if 'PNG image (masked)' in outputs: + task_image = load_image(inputs['PNG image'][0]['resource_path']) + + mask_img = Image.new('L', (task_image.ncols, task_image.nrows), color='white') + mask_drawer = ImageDraw.Draw(mask_img) + + for polygon in polygon_outer_points: + flattened_poly = [j for i in polygon for j in i] + mask_drawer.polygon(flattened_poly, outline='black', fill='black') + del mask_drawer + + task_image_rgb = task_image.to_rgb() # Because gamera masking doesn't work on onebit or grey16 images. + segment_mask = from_pil(mask_img).to_onebit() + result_image_rgb = task_image_rgb.mask(segment_mask) + result_image = ensure_pixel_type(result_image_rgb, outputs['PNG image (masked)'][0]['resource_type']) + + result_image.save_PNG(outputs['PNG image (masked)'][0]['resource_path']) + + # If polygons image output port, write poly file + if 'Polygons' in outputs: + poly_string = str(polygon_outer_points) + f = open(outputs['Polygons'][0]['resource_path'], 'w') + f.write(poly_string) + f.close() + + def get_my_interface(self, inputs, settings): + image_path = inputs['PNG image'][0]['resource_path'] + interface = 'interfaces/poly_mask.html' + data = { + 'image_url': media_file_path_to_public_url(image_path), + 'image_width': settings['@image_width'], + 'polygon_outer_points': settings['@polygon_outer_points'] + } + return (interface, data) + + def validate_my_user_input(self, inputs, settings, user_input): + if 'polygon_outer_points' not in user_input: + raise self.ManualPhaseException("Bad data") + # [TODO] validate userdata + return {'@polygon_outer_points': user_input['polygon_outer_points']} diff --git a/rodan/test/models/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/document_preprocessing_toolkit/__init__.py similarity index 100% rename from rodan/test/models/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/document_preprocessing_toolkit/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/document_preprocessing_toolkit/stable_paths.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/document_preprocessing_toolkit/stable_paths.py new file mode 100755 index 000000000..194810004 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/document_preprocessing_toolkit/stable_paths.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +#-------------------------------------------------------------------------------------------------- +# Program Name: gamera-rodan +# Program Description: Job wrappers that allows some Gamrea functionality to work in Rodan. +# +# Filename: gamera-rodan/wrappers/toolkits/document-preprocessing-toolkit/stable_paths.py +# Purpose: Wrapper for stable paths detection. +# +# Copyright (C) 2016 DDMAL +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#-------------------------------------------------------------------------------------------------- + +import gamera +from gamera.core import load_image +from gamera.toolkits.stable_paths_toolkit.plugins import stable_path_staff_detection +from rodan.jobs.base import RodanTask + +import logging +logger = logging.getLogger('rodan') + +class StablePaths(RodanTask): + + name = 'Stable Paths - remove' + author = 'Ryan Bannon' + description = stable_path_staff_detection.removeStaves.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={} + + enabled = True + category = 'Gamera - Document Preprocessing Toolkit' + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'Onebit PNG image (staves removed)', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Onebit PNG image'][0]['resource_path']) + image_result = image_source.removeStaves() + for i in range(len(outputs['Onebit PNG image (staves removed)'])): + image_result.save_PNG(outputs['Onebit PNG image (staves removed)'][i]['resource_path']) + return True + +class StablePathDetection(RodanTask): + + name = 'Stable Paths - detection' + author = 'Ryan Bannon' + description = stable_path_staff_detection.stablePathDetection.escape_docstring().replace("\\n", "\n").replace('\\"', '"') + settings ={ + 'title': 'Stable Paths Detection', + 'type': 'object', + 'properties': { + 'Trimming': { + 'type': 'boolean', + 'default': True, + 'description': 'Trims staff sets where white space or ornamentations are found.' + }, + 'Deletion': { + 'type': 'boolean', + 'default': True, + 'description': 'If checked, the image will be processed once, keeping what it finds to be the staves and then the code is run again. More accurate for images with a lot of lyrics or ornamentation.' + }, + 'Staff fixing': { + 'type': 'boolean', + 'default': True, + 'description': 'Uses the slopes of staff sets to fix staff lines that differ wildly from the slope at specific intervals.' + } + } + } + + enabled = True + category = 'Gamera - Document Preprocessing Toolkit' + interactive = False + + input_port_types = [{ + 'name': 'Onebit PNG image', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'RGB PNG image', + 'resource_types': ['image/rgb+png'], + 'minimum': 1, + 'maximum': 2 + }] + + def run_my_task(self, inputs, settings, outputs): + + image_source = load_image(inputs['Onebit PNG image'][0]['resource_path']) + image_result = image_source.stablePathDetection(settings['Trimming'], settings['Deletion'], settings['Staff fixing']) + for i in range(len(outputs['RGB PNG image'])): + image_result.save_PNG(outputs['RGB PNG image'][i]['resource_path']) + return True diff --git a/rodan/test/views/__init__.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/__init__.py similarity index 100% rename from rodan/test/views/__init__.py rename to rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/__init__.py diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/miyao.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/miyao.py new file mode 100755 index 000000000..de8cb2d6b --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/miyao.py @@ -0,0 +1,110 @@ +import json, jsonschema +from gamera.core import load_image +from gamera.plugins.pil_io import from_pil +from PIL import Image +from PIL import ImageDraw +from gamera.toolkits.musicstaves.stafffinder_miyao import StaffFinder_miyao +from rodan.jobs.gamera_rodan.helpers.poly_lists import fix_poly_point_list, create_polygon_outer_points_json_dict +from rodan.jobs.base import RodanTask +from rodan.jobs.gamera_rodan.helpers.ensure_pixel_type import ensure_pixel_type + +class MiyaoStaffFinder(RodanTask): + name = 'Miyao Staff Finder' + author = "Deepanjan Roy" + description = 'use Miyao staff finding algorithm to detect staff lines.' + settings = { + 'title': 'Miyao settings', + 'type': 'object', + 'required': ['Number of lines', 'Scan lines', 'Blackness', 'Tolerance'], + 'properties': { + 'Number of lines': { + 'type': 'integer', + 'default': 0, + 'minimum': -1048576, + 'maximum': 1048576, + 'description': 'Number of lines within one staff. When zero, the number is automatically detected.' + }, + 'Scan lines': { + 'type': 'integer', + 'default': 20, + 'minimum': -1048576, + 'maximum': 1048576, + 'description': 'Number of vertical scan lines for extracting candidate points.' + }, + 'Blackness': { + 'type': 'number', + 'default': 0.8, + 'minimum': -1048576, + 'maximum': 1048576, + 'description': 'Required blackness on the connection line between two candidate points in order to consider them matching.' + }, + 'Tolerance': { + 'type': 'integer', + 'default': -1, + 'minimum': -1048576, + 'maximum': 1048576, + 'description': 'How much the vertical black runlength of a candidate point may deviate from staffline_height. When negative, this value is set to *max([2, staffline_height / 4])*' + } + } + } + enabled = True + category = "Gamera - Music Staves" + interactive = False + + input_port_types = [{ + 'name': 'Greyscale or one-bit PNG image', + 'resource_types': ['image/onebit+png','image/greyscale+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'PNG image (Miyao results used as mask)', + 'resource_types': ['image/onebit+png','image/greyscale+png'], + 'minimum': 0, + 'maximum': 2 + }, + { + 'name': 'Polygons (Miyao results)', + 'resource_types': ['application/gamera-polygons+txt'], + 'minimum': 0, + 'maximum': 1 + }] + + def run_my_task(self, inputs, settings, outputs): + + task_image = load_image(inputs['Greyscale or one-bit PNG image'][0]['resource_path']) + staff_finder = StaffFinder_miyao(task_image, 0, 0) + + fn_kwargs = { + 'num_lines': settings['Number of lines'], + 'scanlines': settings['Scan lines'], + 'blackness': settings['Blackness'], + 'tolerance': settings['Tolerance'], + } + staff_finder.find_staves(**fn_kwargs) + + poly_list = staff_finder.get_polygon() + poly_list = fix_poly_point_list(poly_list, staff_finder.staffspace_height) + poly_json_list = create_polygon_outer_points_json_dict(poly_list) + + # If poly output, save it + if 'Polygons (Miyao results)' in outputs: + poly_string = str(poly_json_list) + f = open(outputs['Polygons (Miyao results)'][0]['resource_path'], 'w') + f.write(poly_string) + f.close() + + # If image output, save it + if 'PNG image (Miyao results used as mask)' in outputs: + mask_img = Image.new('L', (task_image.ncols, task_image.nrows), color='white') + mask_drawer = ImageDraw.Draw(mask_img) + for polygon in poly_json_list: + flattened_poly = [j for i in polygon for j in i] + mask_drawer.polygon(flattened_poly, outline='black', fill='black') + del mask_drawer + task_image_rgb = task_image.to_rgb() #Because gamera masking doesn't work on onebit or grey16 images. + segment_mask = from_pil(mask_img).to_onebit() + result_image_rgb = task_image_rgb.mask(segment_mask) + result_image = ensure_pixel_type(result_image_rgb, outputs['PNG image (Miyao results used as mask)'][0]['resource_type']) + for i in range(len(outputs['PNG image (Miyao results used as mask)'])): + result_image.save_PNG(outputs['PNG image (Miyao results used as mask)'][i]['resource_path']) diff --git a/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/roach_tatem.py b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/roach_tatem.py new file mode 100755 index 000000000..3faa74281 --- /dev/null +++ b/rodan-main/code/rodan/jobs/gamera_rodan/wrappers/toolkits/music_staves/roach_tatem.py @@ -0,0 +1,49 @@ +from gamera.core import load_image +from gamera.toolkits.musicstaves import MusicStaves_rl_roach_tatem +from rodan.jobs.base import RodanTask + +class RoachTatemRemoveStaffLines(RodanTask): + name = 'Roach-Tatem Remove Staff Lines' + author = "Ryan Bannon" + description = 'Use Roach-Tatem staff line removal algorithm.' + settings = { + 'title': 'Roach-Tatem settings', + 'type': 'object', + 'properties': { + 'Number of lines per staff': { + 'type': 'integer', + 'default': 0, + 'minimum': 0, + 'description': 'Number of lines per staff. A value of 0 enables auto-detect. Better results if number of lines known.' + } + } + } + enabled = True + category = "Gamera - Music Staves" + interactive = False + + input_port_types = [{ + 'name': 'One-bit PNG image - original', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + output_port_types = [{ + 'name': 'One-bit PNG image - staff lines removed', + 'resource_types': ['image/onebit+png'], + 'minimum': 1, + 'maximum': 1 + }] + + def run_my_task(self, inputs, settings, outputs): + + fn_kwargs = { + 'num_lines': settings['Number of lines per staff'], + 'crossing_symbols': 'all', + 'resolution': 3.0, + 'debug': 0 + } + original_image = load_image(inputs['One-bit PNG image - original'][0]['resource_path']) + staff_finder = MusicStaves_rl_roach_tatem(original_image) + staff_finder.remove_staves(**fn_kwargs) + staff_finder.image.save_PNG(outputs['One-bit PNG image - staff lines removed'][0]['resource_path']) \ No newline at end of file diff --git a/rodan/jobs/helloworld/__init__.py b/rodan-main/code/rodan/jobs/helloworld/__init__.py similarity index 100% rename from rodan/jobs/helloworld/__init__.py rename to rodan-main/code/rodan/jobs/helloworld/__init__.py diff --git a/rodan/jobs/helloworld/helloworld.py b/rodan-main/code/rodan/jobs/helloworld/helloworld.py similarity index 100% rename from rodan/jobs/helloworld/helloworld.py rename to rodan-main/code/rodan/jobs/helloworld/helloworld.py diff --git a/rodan/jobs/helloworld/interface.html b/rodan-main/code/rodan/jobs/helloworld/interface.html similarity index 100% rename from rodan/jobs/helloworld/interface.html rename to rodan-main/code/rodan/jobs/helloworld/interface.html diff --git a/rodan/jobs/helloworld/resource_types.yaml b/rodan-main/code/rodan/jobs/helloworld/resource_types.yaml similarity index 100% rename from rodan/jobs/helloworld/resource_types.yaml rename to rodan-main/code/rodan/jobs/helloworld/resource_types.yaml diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/.gitignore b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/.gitignore new file mode 100755 index 000000000..2b1ba4716 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/.gitignore @@ -0,0 +1,111 @@ +# test files +CF-011/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# my ignored stuff +ignore +venv* +.DS_Store +*.json +.pytest_cache/ diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/LICENSE b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/LICENSE new file mode 100644 index 000000000..34fc97ac8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-2021 Noah Baxter, Gabriel Vigliensoni, Alex Daigle + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/PitchFinding.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/PitchFinding.py new file mode 100755 index 000000000..3ccf577bb --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/PitchFinding.py @@ -0,0 +1,543 @@ +from gamera import gamera_xml +from gamera.plugins.image_utilities import union_images +from operator import itemgetter, attrgetter + + +class PitchFinder(object): + + def __init__(self, **kwargs): + + self.discard_size = kwargs['discard_size'] + + self.SCALE = ['c', 'd', 'e', 'f', 'g', 'a', 'b'] + self.clef = 'c', 7 # default clef + + self.transpose = 0 # shift all notes by x 2nds + self.space_proportion = 0.5 # space when within middle portion between lines + self.get_staff_margin = 2.0 # glyphs are on staff when within x punctums above/below it + self.always_find_staff_no = False + + self.avg_punctum = None + + self.staffless_glyphs = ['skip'] # any staffless glyph IS pitchless + self.pitchless_glyphs = ['division'] + + self.glyphs = None + self.staves = None + + self.sorted_glyphs = None + + ########## + # Public + ########## + + def get_pitches(self, glyphs, staves): + + self._parse_inputs(glyphs, staves) + self._find_pitches(self.glyphs) + + pitch_feature_names = ['staff', 'offset', 'strt_pos', 'note', 'octave', 'clef_pos', 'clef'] + + output = [] + for i, g in enumerate(self.sorted_glyphs): + + cur_json = {} + pitch_info = {} + glyph_info = {} + + # get pitch information + for j, pf in enumerate(g[1:]): + pitch_info[pitch_feature_names[j]] = str(pf) + cur_json['pitch'] = pitch_info + + # print g[0].get_main_id() + + # get glyph information + glyph_info['bounding_box'] = { + 'ncols': g[0].ncols, + 'nrows': g[0].nrows, + 'ulx': g[0].ul.x, + 'uly': g[0].ul.y, + } + glyph_info['state'] = gamera_xml.classification_state_to_name(g[0].classification_state) + glyph_info['name'] = g[0].id_name[0][1] + cur_json['glyph'] = glyph_info + + output.append(cur_json) + + return output + + ######## + # Main + ######## + + def _parse_inputs(self, glyphs, staves): + # filter out skips + self.glyphs = list(filter(lambda g: g.get_main_id() != 'skip', glyphs)) + self.staves = staves + + self.avg_punctum = self._average_punctum(self.glyphs) + + def _find_pitches(self, glyphs): + # Returns a set of glyphs with pitches + + proc_glyphs = [] + + for g in self.glyphs: + glyph_var = g.get_main_id().split('.') + glyph_type = glyph_var[0] + + center_of_mass = self._x_projection_vector(g) + + # find staff for current glyph + stinfo = self._get_staff_no(g, center_of_mass) + if not stinfo: + strt_pos, staff_number = None, None + else: + staff_locations, staff_number = stinfo + + if glyph_type not in self.pitchless_glyphs: + line_or_space, line_num = self._return_line_or_space_no(g, center_of_mass, staff_locations) + strt_pos = self._strt_pos_find(line_or_space, line_num) + # print staff_number, glyph_var, line_or_space, line_num + else: + strt_pos = None + staff_number = None + + proc_glyphs.append([g, staff_number, g.offset_x, strt_pos]) + + self.sorted_glyphs = self._sort_glyphs(proc_glyphs) + + # print self.staff_finder + # print self.staves + # print self.interpolated_staves + # print '\n\n', self.staff_bounds + + ################## + # Glyph Position + ################## + + def _x_projection_vector(self, glyph): + # creates a subimage of the original glyph + # and returns its center of mass + + g = glyph + y_add = 0 + + if 'clef.f' in glyph.get_main_id(): + g, y_add = self._vector_process_f_clef(g) + + center_of_mass = 0 + + if g.ncols > self.discard_size and g.nrows > self.discard_size: + if g.ncols < self.avg_punctum: + this_punctum_size = g.ncols + else: + this_punctum_size = self.avg_punctum + + temp_glyph = g.subimage((g.offset_x + 0.0 * this_punctum_size, g.offset_y), + ((g.offset_x + 1.0 * this_punctum_size - 1), (g.offset_y + g.nrows - 1))) + projection_vector = temp_glyph.projection_rows() + center_of_mass = self._center_of_mass(projection_vector) + + else: + center_of_mass = 0 + + return center_of_mass + y_add + + def _center_of_mass(self, projection_vector): + com = 0. + s = 0. + v = 0. + for i, value in enumerate(projection_vector): + s = s + (i + 1) * value + v = v + value + if v == 0: + return com + com = s / v + return com + + def _vector_process_f_clef(self, glyph): + # use only right portion of f clefs when getting center_of_mass + g = None + + for gl in glyph.splitx(0.5): + gl_coords = self._convert_bb_to_coords(self._get_glyph_bb(gl)) + + # no g + if not g: + g = gl + + # left of g + elif gl.offset_x + gl.ncols < g.offset_x: + pass + + # x-intersecting g + elif self._x_intersecting_coords(gl_coords, g.offset_x, g.offset_x + g.ncols, 0): + g = union_images([g, gl]) + + # right of g + elif gl.offset_x >= g.offset_x + g.ncols: + g = gl + + y_add = g.offset_y - glyph.offset_y + + return g, y_add + + ################# + # Closest Staff + ################# + + def _get_staff_no(self, g, center_of_mass): + # find which staff a glyph belongs to + if g.get_main_id().split('.')[0] in self.staffless_glyphs: + return None + + glyph_coords = [g.offset_x, g.offset_y, g.offset_x + g.ncols, g.offset_y + g.nrows] + + max_intersection = 0 + intersecting_staff = None + + y_bound_staves = [] + + for i, st in enumerate(self.staves): + staff_coords = self._convert_bb_to_coords(st['bounding_box']) + + # intersecting staves + amount = self._coord_intersect_area(glyph_coords, staff_coords) + if amount > max_intersection: + max_intersection = amount + intersecting_staff = st + # print 'found intersecting staff', st['staff_no'] + + # y bounded staves + if self._y_intersecting_coords(glyph_coords, staff_coords[1], staff_coords[3], int(self.get_staff_margin * self.avg_punctum)): + y_bound_staves.append(st) + # print 'Y BOUND', st['staff_no'] + + # 1. Glyph is on a staff it intersects + if intersecting_staff: + return intersecting_staff['line_positions'], intersecting_staff['staff_no'] + + # 2. Glyph is on closest staff whose y range contains it + elif y_bound_staves: + return self._find_closest_y_staff_no(g, center_of_mass, y_bound_staves) + + # 3. Glyph is on closest staff (shortest line to edge) + elif self.always_find_staff_no: + return self._find_closest_staff_no(g, center_of_mass, self.staves) + + # Glyph has no staff + else: + return None + + def _coord_intersect_area(self, coord1, coord2): + # returns the intersection area of two rectangles + l = max(coord1[0], coord2[0]) + b = max(coord1[1], coord2[1]) + r = min(coord1[2], coord2[2]) + t = min(coord1[3], coord2[3]) + + if not (l < r and b < t): + return 0 + else: + return (r - l) * (t - b) + + def _find_closest_y_staff_no(self, g, center_of_mass, staves): + com_point = (g.offset_x + g.ncols, g.offset_y + center_of_mass) + + closest = None + for i, st in enumerate(staves): + coord = self._convert_bb_to_coords(st['bounding_box']) + distances = [abs(com_point[0] - coord[0]), + abs(com_point[0] - coord[2])] + + if closest == None or closest[0] > min(distances): + closest = (min(distances), st['line_positions'], st['staff_no']) + + return closest[1:] + + def _find_closest_staff_no(self, g, center_of_mass, staves): + com_point = (g.offset_x, g.offset_y + center_of_mass) + + closest = None + for i, st in enumerate(staves): + coord = self._convert_bb_to_coords(st['bounding_box']) + + # print i, '/', len(staves) - 1 + + # define corner points + ul = (coord[0], coord[1]) + ur = (coord[2], coord[1]) + ll = (coord[0], coord[3]) + lr = (coord[2], coord[3]) + + d1 = self._find_distance_between_line_and_point(ul, ur, com_point) + d2 = self._find_distance_between_line_and_point(ur, lr, com_point) + d3 = self._find_distance_between_line_and_point(lr, ll, com_point) + d4 = self._find_distance_between_line_and_point(ll, ul, com_point) + distances = [d1, d2, d3, d4] + + if closest == None or closest[0] > min(distances): + closest = (min(distances), st['line_positions'], st['staff_no']) + # print closest[0], i + + return closest[1:] + + def _find_distance_between_line_and_point(self, p1, p2, p3): + # finds minimum distance between a point and a line segment + # line MUST be either perfectly vertical or perfectly horizontal + + x1, y1 = p1 # line start + x2, y2 = p2 # line end + x3, y3 = p3 # comparison point + + line_type = ('vertical' if x1 == x2 else 'horizontal') + + if line_type is 'vertical': + perp = y3 < max([y1, y2]) and y3 > min([y1, y2]) + elif line_type is 'horizontal': + perp = x3 < max([x1, x2]) and x3 > min([x1, x2]) + + # print(perp, line_type, p1, p2, p3) + if not perp: + s1 = self._find_distance_between_points(p3, p1) + s2 = self._find_distance_between_points(p3, p2) + return min([s1, s2]) + elif line_type is 'vertical': + return abs(float(x3 - x1)) + elif line_type is 'horizontal': + return abs(float(y3 - y1)) + + def _find_distance_between_points(self, p1, p2): + x1, y1 = p1 + x2, y2 = p2 + + return (((x2 - x1) ** 2) + ((y2 - y1) ** 2)) ** 0.5 + + ###################### + # Get Pitch Position + ###################### + + def _return_line_or_space_no(self, glyph, center_of_mass, staff): + """ + Returns the line or space number where the glyph is located for a specific stave an miyao line. + + Remember kids :) + 0 = space + 1 = line + + 0 0 1 --------- ledger 2 + 1 2 + 0 1 3 --------- ledger 1 + 1 4 + 0 2 5 -------------------------------- line 4 + 1 6 + 0 3 7 -------------------------------- line 3 + 1 8 + 0 4 9 -------------------------------- line 2 + 1 10 + 0 5 11 -------------------------------- line 1 + 1 12 + 0 6 13 --------- ledger -1 + 1 14 + 0 7 15 --------- ledger -2 + ...... + + """ + # center_of_mass point to compare with staff lines + ref_x = glyph.offset_x + ref_y = int(glyph.offset_y + center_of_mass) + line_pos = None + + # clefs snap to lines only + line_snap = True if 'clef' in glyph.get_main_id().split('.')[0] else False + + # find left/right staffline position to compare against center_of_mass + for i, point in enumerate(staff[0]): + if point[0] > ref_x: + if i == 0: + line_pos = [i] # if before staff, use first line point + else: + line_pos = [i - 1, i] # if inside, use surrounding line points + break + elif i == len(staff[0]) - 1: + line_pos = [i] # if after staff, use last line point + + # print line_pos, (ref_x, ref_y) + + # find line below center_of_mass + for i, line in enumerate(staff[1:]): + last_line = staff[i] + + # get points left & right of center_of_mass on this line and above + pa_left = last_line[line_pos[0]] + pb_left = line[line_pos[0]] + pa_right = last_line[line_pos[1]] if len(line_pos) == 2 else None + pb_right = line[line_pos[1]] if len(line_pos) == 2 else None + + # get line functions below and above glyph + func_above = self._gen_line_func(pa_left, pa_right) + func_below = self._gen_line_func(pb_left, pb_right) + + # find y for each line + y_above = func_above(ref_x) + y_below = func_below(ref_x) + + # print pa_left, pa_right, '\t:\t', pb_left, pb_right + # print y_above, '\t\t\t:\t', y_below + + if line_snap and y_below >= ref_y: + y_dif = y_below - y_above + y_mid = y_above + y_dif / 2 + + if ref_y < y_mid: + return 0, i + elif ref_y >= y_mid: + return 0, i + 1 + + elif y_below >= ref_y: + y_dif = y_below - y_above + y_mid = y_above + y_dif / 2 + + space = y_mid - (y_dif * self.space_proportion / 2), \ + y_mid + (y_dif * self.space_proportion / 2) + + # print '\n', ref_x, ref_y, line_pos, '\n' + + # print int(y_above), int(min(space)), int(max(space)), int(y_below) + + # upper line + if ref_y < min(space): + # print 'line', i + return 0, i + + # within space + elif ref_y >= min(space) and ref_y <= max(space): + # print 'space', i + return 1, i + + # lower line + elif ref_y > max(space): + # print 'line', i + 1 + return 0, i + 1 + + else: + 'this is impossible' + + # glyph is below staff + return 0, len(staff) + + def _gen_line_func(self, point_left, point_right): + # generates a line function based on two points, + # func(x) = y + if point_right != None: + m = float(point_right[1] - point_left[1]) / float(point_right[0] - point_left[0]) + b = point_left[1] - (m * point_left[0]) + return lambda x: (m * x) + b + + else: # flat line + return lambda x: point_left[1] + + ################# + # Pitch Finding + ################# + + def _strt_pos_find(self, line_or_space, line_num): + # sets 0 as the 2nd ledger line above a staff + return (line_num + 1) * 2 + line_or_space - 1 - self.transpose + + def _sort_glyphs(self, proc_glyphs): + + def __glyph_type(g): + return g[0].get_main_id().split(".")[0] + + # Sorts the glyphs by its place in the page (up-bottom, left-right) and appends + # the proper note according to the clef at the beginning of each stave + sorted_glyphs = sorted(proc_glyphs, key=itemgetter(1, 2)) + + for i, glyph_array in enumerate(sorted_glyphs): + + gtype = __glyph_type(glyph_array) + if gtype == 'clef': + + # overwrite last defined clef + self.clef = glyph_array[0].get_main_id().split('.')[1], glyph_array[3] + glyph_array[3] = 6 - glyph_array[3] / 2 # get clef line excluding spaces + glyph_array.extend([None, None, None, None]) + + elif gtype == "neume" or gtype == "custos": + clef, clef_line = self.clef + my_strt_pos = glyph_array[3] + + # get clef shifts + SCALE = self.SCALE + noteShift = (0 if SCALE.index(clef) == 0 else len(SCALE) - SCALE.index(clef) - 1) + + # find note + note = SCALE[int((clef_line - my_strt_pos + noteShift) % len(SCALE))] + + # find octave + if my_strt_pos <= clef_line: + octave = 3 + int((clef_line - my_strt_pos + noteShift) / len(SCALE)) + elif my_strt_pos > clef_line: + octave = 3 - int((len(SCALE) - clef_line + my_strt_pos - 1 - noteShift) / len(SCALE)) + + glyph_array.extend([note, octave, clef_line, 'clef.' + clef]) + # print clef, note, octave, glyph_array[1:], glyph_array[0].get_main_id() + + else: # no pitch info necessary + glyph_array.extend([None, None, None, None]) + + return sorted_glyphs + + ########### + # Utility + ########### + + def _average_punctum(self, glyphs): + width_sum = 0 + num_punctums = 0 + for g in glyphs: + if g.get_main_id() == 'neume.punctum': + width_sum += g.ncols + num_punctums += 1 + + if num_punctums > 0: + return width_sum / num_punctums + else: + return 0 # no average punctums, so no average size + + def _get_glyph_bb(self, glyph): + bb = { + 'ulx': glyph.offset_x, + 'uly': glyph.offset_y, + 'ncols': glyph.ncols, + 'nrows': glyph.nrows, + } + + return bb + + def _convert_bb_to_coords(self, bounding_box): + # bounding box -> coordinates + ulx = bounding_box['ulx'] + uly = bounding_box['uly'] + lrx = ulx + bounding_box['ncols'] + lry = uly + bounding_box['nrows'] + + return [ulx, uly, lrx, lry] + + def _x_intersecting_coords(self, coord, xstart, xend, margin): + xmin = min(xstart, xend) + xmax = max(xstart, xend) + + return not (coord[0] > xmin - margin and coord[0] > xmax + margin or + coord[2] < xmin - margin and coord[2] < xmax + margin) + + def _y_intersecting_coords(self, coord, ystart, yend, margin): + # does rect lie within ystart and yend + ymin = min(ystart, yend) + ymax = max(ystart, yend) + + return not (coord[1] > ymin - margin and coord[1] > ymax + margin or + coord[3] < ymin - margin and coord[3] < ymax + margin) diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/README.md b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/README.md new file mode 100755 index 000000000..dee505631 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/README.md @@ -0,0 +1,36 @@ +# Heuristic Pitch Finding +Heuristic staff and pitch finding for square as a job in the workflow builder [```Rodan```](https://github.com/DDMAL/Rodan) + +## Prereq + +Heuristic Pitch Finding is deployed as a Rodan [Job Package](https://github.com/DDMAL/Rodan/wiki/Write-a-Rodan-job-package). Before installing, ensure that the latestest version of [`rodan-docker`](https://github.com/DDMAL/rodan-docker) has been cloned locally, built, and installed. + +## Installing into rodan-docker +1. Clone this directory into `/path/to/rodan_docker/jobs/heuristic-pitch-finding` +2. In `/path/to/rodan_docker/docker-compose.job-dev.yml`, add the reference to volumes like so: +``` python + volumes: + - ./jobs/settings.py:/code/rodan/rodan/settings.py + - ./jobs/heuristic-pitch-finding/:/code/rodan/rodan/jobs/heuristic-pitch-finding +``` +3. If one does not already exist, create a python file called `settings.py` in the rodan jobs folder like so: `/path/to/rodan_docker/jobs/settings.py` +4. Copy and paste the contents of `settings.py.job_development` into `settings.py` +5. Add this package path to the Rodan Job Package registration in the `settings.py` file. This should look something like the following +``` python +RODAN_JOB_PACKAGES = ( + "rodan.jobs.job1", + "rodan.jobs.job2", + ..., + "rodan.jobs.heuristic-pitch-finding", +) +``` + +## Running Rodan +- Follow the [rodan-docker guide](https://github.com/DDMAL/rodan-docker/blob/master/README.md) to have docker set up. +- Once the above installation steps are complete, run ```docker-compose -f docker-compose.yml -f docker-compose.rodan-dev.yml up``` + +## Job Usage +- To properly setup the pitch finding workflow, connect the *JSOMR* output from a `Miyao Staff Finding` job to the *JSOMR* input of a `Heuristic Pitch Finding` job. + +*Important Note:* +- Staff finding can be run independently if only the staff positions, line points, and general page properties are required. However, pitch finding always requires the output of staff finding as an input. \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/StaffFinding.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/StaffFinding.py new file mode 100755 index 000000000..f5b91e3dd --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/StaffFinding.py @@ -0,0 +1,579 @@ +from gamera.core import ONEBIT +from gamera.toolkits import musicstaves + +import copy + + +class StaffFinder(object): + + def __init__(self, **kwargs): + + self.lines_per_staff = kwargs['lines_per_staff'] + self.sfnd_algorithm = kwargs['staff_finder'] + self.binarization = kwargs['binarization'] + self.interpolation = kwargs['interpolation'] + + # the results of the staff finder. Mostly for convenience + self.staff_finder = None + self.staves = None + self.staff_bounds = None + + self.staff_results = {} + + #################### + # Public Functions + #################### + + def get_staves(self, image): + + if image.data.pixel_type != ONEBIT: + image = self._binarize_image(image) + + s = self._get_staff_finding_algorithm(image, self.sfnd_algorithm) + self._find_staves(s) + self._process_staves() + + output = [] + # Fixes: Title page with no information bug + if self.staves is None: + return [] + + for i, s in enumerate(self.staves): + + bounding_box = { + 'ncols': s['coords'][2] - s['coords'][0], + 'nrows': s['coords'][3] - s['coords'][1], + 'ulx': s['coords'][0], + 'uly': s['coords'][1], + } + + cur_json = { + 'staff_no': s['staff_no'], + 'bounding_box': bounding_box, + 'num_lines': s['num_lines'], + 'line_positions': s['line_positions'], + } + + output.append(cur_json) + + return output + + def get_page_properties(self, image): + output = { + # 'filename': image, + 'resolution': image.resolution, + 'bounding_box': { + 'ncols': image.ncols, + 'nrows': image.nrows, + 'ulx': 0, + 'uly': 0, + } + } + + return output + + def _binarize_image(self, image): + image_resolution = image.resolution + image = image.to_greyscale() + bintypes = ['threshold', + 'otsu_threshold', + 'sauvola_threshold', + 'niblack_threshold', + 'gatos_threshold', + 'abutaleb_threshold', + 'tsai_moment_preserving_threshold', + 'white_rohrer_threshold'] + image = getattr(image, bintypes[self.binarization])(0) + # BUGFIX: sometimes an image loses its resolution after being binarized. + if image.resolution < 1: + image.resolution = image_resolution + + # check the amount of blackness of the image. If it's inverted, + # the black area will vastly outweigh the white area. + area = image.area().tolist()[0] + black_area = image.black_area()[0] + + if area == 0: + raise AomrError("Cannot divide by a zero area. Something is wrong.") + + # if greater than 70% black, invert the image. + if (black_area / area) > 0.7: + image.invert() + + return image + + def _get_staff_finding_algorithm(self, image, sfnd_alg): + if sfnd_alg == 0: + return musicstaves.StaffFinder_miyao(image) + elif sfnd_alg is 1: + return musicstaves.StaffFinder_dalitz(image) + elif sfnd_alg is 2: + return musicstaves.StaffFinder_projections(image) + else: + raise AomrStaffFinderNotFoundError("The staff finding algorithm was not found.") + + ################# + # Interpolation + ################# + + def _close_enough(self, y1, y2): + val = 0.005 # y1 and y2 are within val% of each other + valPix = 5 # best between 0 and 10 + + # return (y1 > y2 * (1 - val) and y1 < y2 * (1 + val)) # proportional distance + # return (y1 > y2 - valPix and y1 < y2 + valPix) # linear distance + return y1 == y2 # exact comparison + + def _find_left_pt(self, points, pos): + if pos == 0: + return False + else: + return pos - 1 + + def _find_right_pt(self, points, pos): + return next((i + pos + 1 for i, x in enumerate(points[pos + 1:]) if x[0]), False) + + def _generate_ref_line(self, staff): + refLine = [] + + for line in staff['line_positions']: + for pt in line: + pt = (pt[0], 0) # remove all y values + add = True + + if not refLine: + refLine.append(pt) + add = False # initial point doesn't work the same way + + if refLine: + for l, rpt in enumerate(refLine): + if self._close_enough(rpt[0], pt[0]): + add = False + break + + if add: + inserted = False + for l, rpt in enumerate(refLine): + if pt[0] < rpt[0]: + refLine.insert(l, pt) + inserted = True + break + + if not inserted: + refLine.append(pt) + + return refLine + + def _interpolate_staff_locations(self, staff_locations): + interpolated_staves = copy.deepcopy(staff_locations) + for i, staff in enumerate(interpolated_staves): + + refLine = self._generate_ref_line(staff) + + # interpolation based on refLine + newSet = [] + for j, line in enumerate(staff['line_positions']): # for each line + newLine = [(False, False)] * len(refLine) # generate line of false points with set length + + # put old values in correct spots + nudge = 0 + for k, pt in enumerate(refLine): + # print k, '-', nudge, '=', k - nudge # debug interpolating + if k - nudge < len(line) and self._close_enough(line[k - nudge][0], pt[0]): + newLine[k] = line[k - nudge] + else: + nudge += 1 + + # for all missing points, interpolate + for k, pt in enumerate(newLine): + if not pt[0]: + + left = self._find_left_pt(newLine, k) + right = self._find_right_pt(newLine, k) + + if not left: # flat left + newLine[k] = refLine[k][0], newLine[right][1] + + elif not right: # flat right + newLine[k] = refLine[k][0], newLine[left][1] + + else: + for l in range(k + 1, len(newLine)): + if newLine[l][0]: + lowerY = newLine[k - 1][1] + upperY = newLine[l][1] + difY = upperY - lowerY + den = l - k + 1.0 + + for m in range(l - k): + num = m + 1 + calc = lowerY + (difY * (num / den)) + newLine[k + m] = (refLine[k + m][0], int(calc)) + break + + newSet.append(newLine) + # print '\n', "oldLine", len(line), line, '\n' + # print "refLine", len(refLine), refLine, '\n' + # print "newLine", len(newLine), newLine, '\n' + + interpolated_staves[i]['line_positions'] = newSet + return interpolated_staves + + ################# + # Staff Finding + ################# + + def _find_staves(self, s): + scanlines = 20 + blackness = 0.8 + tolerance = -1 + + # there is no one right value for these things. We'll give it the old college try + # until we find something that works. + while not self.staff_finder: + if blackness <= 0.3: + # we want to return if we've reached a limit and still can't + # find staves. + return None + + s.find_staves(self.lines_per_staff, scanlines, blackness, tolerance) + av_lines = s.get_average() + if len(self._flatten(s.linelist)) == 0: + # no lines were found + return None + + # get a polygon object. This stores a set of vertices for x,y values along the staffline. + self.staff_finder = s.get_polygon() + + if not self.staff_finder: + lg.debug("No staves found. Decreasing blackness.") + blackness -= 0.1 + + # if len(self.staff_finder) < self.lines_per_staff: + # # the number of lines found was less than expected. + # return None + + all_line_positions = [] + + for i, staff in enumerate(self.staff_finder): + yv = [] + xv = [] + + # linepoints is an array of arrays of vertices describing the + # stafflines in the staves. + # + # For the staff, we end up with something like this: + # [ + # [ (x,y), (x,y), (x,y), ... ], + # [ (x,y), (x,y), (x,y), ... ], + # ... + # ] + line_positions = [] + + for staffline in staff: + pts = staffline.vertices + yv += [p.y for p in pts] + xv += [p.x for p in pts] + line_positions.append([(p.x, p.y) for p in pts]) + + ulx, uly = min(xv), min(yv) + lrx, lry = max(xv), max(yv) + + # To accurately interpret objects above and below, we need to project + # ledger lines on the top and bottom. + # + # Since we can't *actually* get the points, we'll predict based on the + # first and last positions of the top and bottom lines. + # first, get the top two and bottom two positions + lines_top = line_positions[0:2] + lines_bottom = line_positions[-2:] + + # find the start and end points for the existing lines: + top_first_start_y = lines_top[0][0][1] + top_first_end_y = lines_top[0][-1][1] + + top_second_start_y = lines_top[1][0][1] + top_second_end_y = lines_top[1][-1][1] + + # find the average staff space by taking the start and end points + # averaging the height. + top_begin_height = top_second_start_y - top_first_start_y + top_end_height = top_second_end_y - top_second_end_y + + average_top_space_diff = int(round((top_begin_height + top_end_height) * 0.5)) + imaginary_lines = [] + + # take the second line. we'll then subtract each point from the corresponding + # value in the first. + i_line_1 = [] + i_line_2 = [] + for j, point in enumerate(lines_top[0]): + pt_x = point[0] + pt_y_1 = point[1] - (average_top_space_diff * 2) + # pt_y_1 = lines_top[0][j][1] - average_top_space_diff + pt_y_2 = pt_y_1 - (average_top_space_diff * 2) + i_line_1.append((pt_x, pt_y_1)) + i_line_2.append((pt_x, pt_y_2)) + + # insert these. Make sure the highest line is added last. + line_positions.insert(0, i_line_1) + line_positions.insert(0, i_line_2) + + # now do the bottom ledger lines + bottom_first_start_y = lines_bottom[0][0][1] + bottom_first_end_y = lines_bottom[0][-1][1] + + bottom_second_start_y = lines_bottom[1][0][1] + bottom_second_end_y = lines_bottom[1][-1][1] + + bottom_begin_height = bottom_second_start_y - bottom_first_start_y + bottom_end_height = bottom_second_end_y - bottom_second_end_y + + average_bottom_space_diff = int(round((bottom_begin_height + bottom_end_height) * 0.5)) + + i_line_1 = [] + i_line_2 = [] + for k, point in enumerate(lines_bottom[1]): + pt_x = point[0] + pt_y_1 = point[1] + (average_bottom_space_diff * 2) + pt_y_2 = pt_y_1 + (average_bottom_space_diff * 2) + i_line_1.append((pt_x, pt_y_1)) + i_line_2.append((pt_x, pt_y_2)) + line_positions.extend([i_line_1, i_line_2]) + + # average lines y_position + avg_lines = [] + for l, line in enumerate(av_lines[i]): + avg_lines.append(line.average_y) + diff_up = avg_lines[1] - avg_lines[0] + diff_lo = avg_lines[3] - avg_lines[2] + avg_lines.insert(0, avg_lines[0] - 2 * diff_up) + avg_lines.insert(1, avg_lines[1] - diff_up) + avg_lines.append(avg_lines[5] + diff_lo) + avg_lines.append(avg_lines[5] + 2 * diff_lo) # not using the 8th line + + self.staff_results[i] = { + 'staff_no': i + 1, + 'coords': [ulx, uly, lrx, lry], + 'num_lines': len(staff), + 'line_positions': line_positions, + 'contents': [], + 'clef_shape': None, + 'clef_line': None, + 'avg_lines': avg_lines + } + all_line_positions.append(self.staff_results[i]) + + self.staves = all_line_positions + if self.interpolation: + self.staves = self._interpolate_staff_locations(self.staves) + self._staff_coords() + + def _process_staves(self): + self.staves = self._reorder_staves_LTR_TTB(self.staves) + + def _reorder_staves_LTR_TTB(self, staves): + # reorder staves left to right, top to bottom + + ordered_staves = [] + + # Fixes: Title page with no information bug + if staves is None: + return None + + # group by y intersection + for i, st in enumerate(staves): + + # initial staff + if not ordered_staves: + ordered_staves.append([st]) + else: + col_placement = -1 # vertical insert + for j, group in enumerate(ordered_staves): + + y_intersects = False + row_placement = -1 # horizontal insert + + # find if st intersects any staff in this group + for k, st2 in enumerate(group): + if self._y_intersecting_coords(st['coords'], st2['coords'][1], st2['coords'][3]): + y_intersects = True, + if st['coords'][0] > st2['coords'][0]: + row_placement = k + 1 # get row pos + print 'y_intersects', k + + # place in correct row + if y_intersects: + group.insert(row_placement, st) + break + + # get col pos + elif st['coords'][1] > max(st2['coords'][1] for st2 in group): + col_placement = j + 1 + + if not y_intersects: + ordered_staves.insert(col_placement, [st]) + + # number staves and flatten + numbered_staves = [] + count = 0 + for group in ordered_staves: + for st in group: + count += 1 + st['staff_no'] = count + numbered_staves.append(st) + + print [[x['staff_no'] for x in group] for group in ordered_staves] + print [x['staff_no'] for x in numbered_staves] + + return numbered_staves + + def _staff_coords(self): + """ + Returns the coordinates for each one of the staves + """ + st_coords = [] + for i, staff in enumerate(self.staff_finder): + st_coords.append(self.staff_results[i]['coords']) + + self.staff_bounds = st_coords + + def _auto_merge(self, staff_groups): + # automatically merge staves on the same row + + merged_staves = [] # all staves to be returned + merge = None + merge_margin = self.merge_distance * self.avg_staff_height + + for i, group in enumerate(staff_groups): + row_staves = group + + j = 0 + while j < len(row_staves): + + st1 = row_staves[j] + st2 = None if j >= len(row_staves) - 1 else row_staves[j + 1] + + # merge + if (st2 and + self._y_intersecting_coords(st1['coords'], st2['coords'], 0) and + self._x_intersecting_coords(st1['coords'], st2['coords'], merge_margin) and + st1['num_lines'] == st2['num_lines'] and + len(st1['line_positions']) == len(st2['line_positions'])): + + merge = self._merge_staves(st1, st2) + del row_staves[j:j + 2] + row_staves.insert(j, merge) + + # don't merge + else: + j += 1 + + merged_staves.append(row_staves) + # print[[x['staff_no']for x in group] for group in merged_staves] + row_staves = [] + + return merged_staves + + def _merge_staves(self, st1, st2): + # combine two adjascent staves into a single staff + # assumes st1 is directly to the left of st2 + # assumes both staves have same number of lines + + # overlap results in cutting off st2 + + num_lines = st1['num_lines'] + staff_no = st1['staff_no'] # this gets replaced later during flattening + + if st1['clef_line']: + clef_line = st1['clef_line'] + else: + clef_line = st2['clef_line'] + + if st1['clef_shape']: + clef_shape = st1['clef_shape'] + else: + clef_shape = st2['clef_shape'] + + if st1['contents']: + contents = st1['contents'] + else: + contents = st2['contents'] + + # get new staff coordinates + coords = [st1['coords'][0] if (st1['coords'][0] < st2['coords'][0]) else st2['coords'][0], + st1['coords'][1] if (st1['coords'][1] < st2['coords'][1]) else st2['coords'][1], + st1['coords'][2] if (st1['coords'][2] > st2['coords'][2]) else st2['coords'][2], + st1['coords'][3] if (st1['coords'][3] > st2['coords'][3]) else st2['coords'][3], + ] + + # merge line positions + # assumes same number of lines + line_positions = [] + for i in range(len(st1['line_positions'])): + + # crop off any overlap from st2 + nudge = 0 + while st2['line_positions'][i][nudge][0] < st1['line_positions'][i][-1][0]: + nudge += 1 + + line_positions += [st1['line_positions'][i] + st2['line_positions'][i][nudge:]] + # print line_positions[i] + + avg_lines = [] + for i in range(len(line_positions)): + avg_lines += [sum(x[1] for x in line_positions[i]) / len(line_positions[i])] + + st_merge = { + 'line_positions': line_positions, + 'clef_line': clef_line, + 'num_lines': num_lines, + 'clef_shape': clef_shape, + 'staff_no': staff_no, + 'coords': coords, + 'avg_lines': avg_lines, + 'contents': contents, + } + + return st_merge + + def _flatten_and_renumber(self, grouped_staves): + + numbered_staves = [] + count = 0 + for group in grouped_staves: + for st in group: + count += 1 + st['staff_no'] = count + numbered_staves.append(st) + + # print[x['staff_no'] for x in numbered_staves] + return numbered_staves + + ########### + # Utility + ########### + + def _y_intersecting_coords(self, coord, ymin, ymax): + # does rect lie within ymin and ymax + ymin = min(ymin, ymax) + ymax = max(ymin, ymax) + + return not (coord[1] > ymin and coord[1] > ymax or + coord[3] < ymin and coord[3] < ymax) + + def _flatten(self, l, ltypes=(list, tuple)): + + ltype = type(l) + l = list(l) + i = 0 + while i < len(l): + while isinstance(l[i], ltypes): + if not l[i]: + l.pop(i) + i -= 1 + break + else: + l[i:i + 1] = l[i] + i += 1 + return ltype(l) diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/__init__.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/__init__.py new file mode 100755 index 000000000..0438158f7 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/__init__.py @@ -0,0 +1,4 @@ +import rodan +from base import MiyaoStaffinding, HeuristicPitchFinding + +__version__ = "0.1.1" diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/base.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/base.py new file mode 100755 index 000000000..afc03f23f --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/base.py @@ -0,0 +1,163 @@ +from rodan.jobs.base import RodanTask + +from gamera.core import load_image, init_gamera +from gamera import gamera_xml + +from StaffFinding import StaffFinder +from PitchFinding import PitchFinder + +import sys +import json + +init_gamera() + + +class MiyaoStaffinding(RodanTask): + name = 'Miyao Staff Finding' + author = 'Noah Baxter' + description = 'Finds the location of staves in an image and returns them as a JSOMR file.' + enabled = True + category = 'aOMR' + interactive = False + + settings = { + 'title': 'Settings', + 'type': 'object', + 'job_queue': 'Python2', + 'required': ['Number of lines', 'Interpolation'], + 'properties': { + 'Number of lines': { + 'type': 'integer', + 'default': 4, + 'minimum': 0, + 'maximum': 8, + 'description': 'Number of lines within each staff. When zero, the number is automatically detected.' + }, + 'Interpolation': { + 'type': 'boolean', + 'default': True, + 'description': 'Interpolate found line points so all lines have the same number of points. This MUST be True for pitch finding to succeed.' + } + } + } + + input_port_types = [{ + 'name': 'Image containing staves (RGB, greyscale, or onebit)', + 'resource_types': ['image/rgb+png', 'image/onebit+png', 'image/greyscale+png'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + output_port_types = [{ + 'name': 'JSOMR', + 'resource_types': ['application/json'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + def run_my_task(self, inputs, settings, outputs): + + # Inputs + image = load_image(inputs['Image containing staves (RGB, greyscale, or onebit)'][0]['resource_path']) + kwargs = { + 'lines_per_staff': settings['Number of lines'], + 'staff_finder': 0, # 0 for miyao + 'binarization': 1, + 'interpolation': settings['Interpolation'], + } + + sf = StaffFinder(**kwargs) + + page = sf.get_page_properties(image) + staves = sf.get_staves(image) + + jsomr = { + 'page': page, + 'staves': staves, + } + + # Outputs + outfile_path = outputs['JSOMR'][0]['resource_path'] + with open(outfile_path, "w") as outfile: + outfile.write(json.dumps(jsomr)) + + return True + + +class HeuristicPitchFinding(RodanTask): + name = 'Heuristic Pitch Finding' + author = 'Noah Baxter' + description = 'Calculates pitch values for Classified Connected Componenets from a JSOMR containing staves, and returns the results as a JSOMR file' + settings = { + 'title': 'aOMR settings', + 'type': 'object', + 'required': ['Discard Size'], + 'properties': { + 'Discard Size': { + 'type': 'integer', + 'default': 12, + 'minimum': 5, + 'maximum': 25, + 'description': '', + }, + } + } + enabled = True + category = 'aOMR' + interactive = False + input_port_types = [{ + 'name': 'JSOMR of staves and page properties', + 'resource_types': ['application/json'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }, + { + 'name': 'GameraXML - Classified Connected Components', + 'resource_types': ['application/gamera+xml'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + output_port_types = [{ + 'name': 'JSOMR of glyphs, staves, and page properties', + 'resource_types': ['application/json'], + 'minimum': 1, + 'maximum': 1, + 'is_list': False + }] + + def run_my_task(self, inputs, settings, outputs): + + # Inputs + infile_path = inputs['JSOMR of staves and page properties'][0]['resource_path'] + with open(infile_path, 'r') as infile: + jsomr_string = infile.read() + + jsomr = json.loads(jsomr_string) + glyphs = gamera_xml.glyphs_from_xml(inputs['GameraXML - Classified Connected Components'][0]['resource_path']) + + kwargs = { + 'discard_size': settings['Discard Size'], + } + + pf = PitchFinder(**kwargs) + + page = jsomr['page'] + staves = jsomr['staves'] + pitches = pf.get_pitches(glyphs, staves) + + # Outputs + jsomr = { + 'page': page, + 'staves': staves, + 'glyphs': pitches, + } + + outfile_path = outputs['JSOMR of glyphs, staves, and page properties'][0]['resource_path'] + with open(outfile_path, 'w') as outfile: + outfile.write(json.dumps(jsomr)) + + return True diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/main.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/main.py new file mode 100755 index 000000000..b4ff04769 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/main.py @@ -0,0 +1,43 @@ +import sys +from gamera.core import load_image, init_gamera +from gamera import gamera_xml + +from StaffFinding import StaffFinder +from PitchFinding import PitchFinder + +import json + +init_gamera() + +if __name__ == "__main__": + # given CC and a staff image, will generate a complete JSOMR file + + (tmp, inCC, inImage) = sys.argv + + image = load_image(inImage) + glyphs = gamera_xml.glyphs_from_xml(inCC) + kwargs = { + 'lines_per_staff': 4, + 'staff_finder': 0, + 'binarization': 1, + 'interpolation': True, + + 'discard_size': 12, + } + + sf = StaffFinder(**kwargs) + pf = PitchFinder(**kwargs) + + page = sf.get_page_properties(image) + staves = sf.get_staves(image) + pitches = pf.get_pitches(glyphs, staves) + + jsomr = { + 'page': page, + 'staves': staves, + 'glyphs': pitches, + } + + with open('jsomr_output.json', 'w') as f: + f.write(json.dumps(jsomr)) + # print jsomr diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/resource_types.yaml b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/resource_types.yaml new file mode 100755 index 000000000..514ee84dd --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/resource_types.yaml @@ -0,0 +1,15 @@ +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: image/onebit+png + description: One-bit (black and white) PNG image + extension: png +- mimetype: image/greyscale+png + description: Greyscale PNG image + extension: png +- mimetype: application/json + description: JSON + extension: json +- mimetype: application/gamera+xml + description: Gamera XML file + extension: xml diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/res/CF18_Staff.png b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/res/CF18_Staff.png new file mode 100755 index 000000000..c33a41cb2 Binary files /dev/null and b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/res/CF18_Staff.png differ diff --git a/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/test_AomrObject.py b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/test_AomrObject.py new file mode 100755 index 000000000..4b9d98318 --- /dev/null +++ b/rodan-main/code/rodan/jobs/heuristic_pitch_finding/tests/test_AomrObject.py @@ -0,0 +1,157 @@ +import unittest +from AomrObject import AomrObject +from gamera.core import load_image + + +class T(unittest.TestCase): + + # def __init__(self): + inImage = './tests/res/CF18_Staff.png' + inGameraXML = './tests/res/CF18_Classified.xml' + + image = load_image(inImage) + kwargs = { + 'lines_per_staff': 4, + 'staff_finder': 0, + 'staff_removal': 0, + 'binarization': 1, + 'discard_size': 12, + } + + aomr_obj = None + + ########### + # General + ########### + + def test_a01_generate_aomr_obj(self): + T.aomr_obj = AomrObject(self.image, **self.kwargs) + assert True + + def test_a02_get_page_properties(self): + T.page_props = T.aomr_obj.get_page_properties() + assert True + + ################# + # Staff Finding + ################# + + def test_b01_find_staves(self): + T.aomr_obj.find_staves() + T.staves, T.interpolated_staves = T.aomr_obj.get_staves() + assert True + + def test_b02_sequential_points(self): + # all points in a line are ordered by x position from left to right + for i, staff in enumerate(T.staves): + for j, line in enumerate(staff['line_positions']): + for k, pt in enumerate(line[1:]): + if not pt[0] > line[k][0]: + # points out of order + assert False + + assert True + + def test_b03_staves_within_page(self): + + for i, staff in enumerate(T.staves): + if staff['coords'][2] > T.page_props['bounding_box']['ncols'] \ + or staff['coords'][3] > T.page_props['bounding_box']['nrows']: + # staff outside of page boundaries + assert False + + assert True + + ####################### + # Interpolation Tests + ####################### + + def test_c01_interpolation_grabbed_previous_points(self): + # check all original points + for i, staff in enumerate(T.staves): + for j, line in enumerate(staff['line_positions']): + for pt in line: + if pt not in T.interpolated_staves[i]['line_positions'][j]: + # point does not remain in interpolated line + assert False + assert True + + def test_c02_interpolated_all_points(self): + # check all interpolated points + for i, staff in enumerate(T.interpolated_staves): + for j, line in enumerate(staff['line_positions']): + for pt in line: + if not pt[0] or not pt[1]: + # missing points + assert False + + assert True + + def test_c03_find_right(self): + tests = [None] * 4 + + tests[0] = T.aomr_obj._find_right_pt([(1, 1), (False, False), (2, 2), (3, 3), (4, 4)], 0) + tests[1] = T.aomr_obj._find_right_pt([(1, 1), (False, False), (False, False), (3, 3), (4, 4)], 0) + tests[2] = T.aomr_obj._find_right_pt([(1, 1), (False, False), (False, False), (False, False), (4, 4)], 0) + tests[3] = T.aomr_obj._find_right_pt([(1, 1), (False, False), (False, False), (False, False), (False, False)], 0) + + assert tests == [2, 3, 4, False] + + def test_c04_interpolated_ys_within_edges(self): + for i, staff in enumerate(T.interpolated_staves): + for j, line in enumerate(staff['line_positions']): + original_line = T.staves[i]['line_positions'][j] + + for k, pt in enumerate(line[1:-1]): + if pt not in original_line: # interpolated points should never be a max or min + + slope_down = (pt[1] <= line[k - 1][1] and pt[1] >= line[k + 1][1]) + slope_up = (pt[1] >= line[k - 1][1] and pt[1] <= line[k + 1][1]) + + if not (slope_down or slope_up): + assert False + + assert True + + ###################### + # Find Closest Staff + ###################### + + def test_d01_find_distance_between_points(self): + + points = [[(0, 0), (10, 10)], + [(2, 2), (6, 6)], + [(10, 7), (5, 8)], + [(400, 73), (23, 900)]] + + distances = [200, 32, 26, 826058] + + for i, (p1, p2) in enumerate(points): + assert T.aomr_obj._find_distance_between_points(p1, p2) == distances[i] ** 0.5 + + def test_d02_find_distance_between_line_and_point(self): + + lines = [[(0, 10), (5, 10)], + [(1000, 4500), (2500, 4500)], + [(2000, 2500), (1000, 2500)], + [(1600, 2000), (1600, 3000)]] + + points = [(0, 0), + (10, 10), + (400, 400), + (1600, 1600), + (3200, 3200), + (6400, 6400)] + + distances = [[10.000, 5.000, 555.090, 2252.137, 4514.878, 9040.360], + [4609.772, 4597.847, 4143.669, 2900.000, 1476.482, 4338.202], + [2692.582, 2679.589, 2184.032, 900.000, 1389.244, 5879.625], + [2561.249, 2547.194, 2000.0, 400.0, 1612.451, 5882.176]] + + for i, (p1, p2) in enumerate(lines): + for j, p3 in enumerate(points): + + value = str(T.aomr_obj._find_distance_between_line_and_point(p1, p2, p3)).split('.') + approx_result = float(value[0] + '.' + value[1][:3]) + + assert distances[i][j] == approx_result diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/.gitignore b/rodan-main/code/rodan/jobs/hpc_fast_trainer/.gitignore new file mode 100644 index 000000000..aab7ea060 --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/.gitignore @@ -0,0 +1,110 @@ + +# Created by https://www.gitignore.io/api/python +# Edit at https://www.gitignore.io/?templates=python + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# End of https://www.gitignore.io/api/python diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/LICENSE b/rodan-main/code/rodan/jobs/hpc_fast_trainer/LICENSE new file mode 100644 index 000000000..f9f4b50dd --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Juliette Regimbal + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/README.md b/rodan-main/code/rodan/jobs/hpc_fast_trainer/README.md new file mode 100644 index 000000000..5f90168a9 --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/README.md @@ -0,0 +1,5 @@ +# HPC Fast Trainer + +This is a version of the [Patchwise trainer job in Rodan](https://github.com/DDMAL/Calvo-classifier) that, instead of +running on a local machine, is sent to a HPC cluster. RabbitMQ is used to pass messages between this and the +[corresponding job that runs on the cluster](https://github.com/JRegimbal/hpc-trainer-component). diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/__init__.py b/rodan-main/code/rodan/jobs/hpc_fast_trainer/__init__.py new file mode 100644 index 000000000..06b272b09 --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/__init__.py @@ -0,0 +1,4 @@ +__version__ = "0.0.1" +from rodan.jobs import module_loader + +module_loader('rodan.jobs.hpc_fast_trainer.hpc_fast_trainer') diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/hpc_fast_trainer.py b/rodan-main/code/rodan/jobs/hpc_fast_trainer/hpc_fast_trainer.py new file mode 100644 index 000000000..c058e5acd --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/hpc_fast_trainer.py @@ -0,0 +1,243 @@ +from celery.utils.log import get_task_logger +from rodan.jobs.base import RodanTask +from rodan.models import Input +from django.conf import settings as rodan_settings +from uuid import uuid4 +import base64 +import json +import os +import pika + + +class HPCFastTrainer(RodanTask): + name = "Training model for Patchwise Analysis of Music Document - HPC" + author = "Juliette Regimbal" + description = "Performs the fast trainer job on Compute Canada Cedar" + enabled = True + category = "OMR - Layout analysis" + interactive = False + + logger = get_task_logger(__name__) + result_dict = None + + settings = { + 'title': 'Training parameters', + 'type': 'object', + 'job_queue': 'Python3', + 'properties': { + 'Maximum number of training epochs': { + 'type': 'integer', + 'minimum': 1, + 'default': 15 + }, + 'Maximum number of samples per label': { + 'type': 'integer', + 'minimum': 100, + 'default': 10000 + }, + 'Patch height': { + 'type': 'integer', + 'minimum': 64, + 'default': 256 + }, + 'Patch width': { + 'type': 'integer', + 'minimum': 64, + 'default': 256 + }, + 'Maximum time (D-HH:MM)': { + 'type': 'string', + 'default': '0-06:00' + }, + 'Maximum memory (MB)': { + 'type': 'integer', + 'minimum': 1024, + 'default': 257000 + }, + 'CPUs': { + 'type': 'integer', + 'minimum': 1, + 'default': 6 + }, + 'Slurm Notification Email': { + 'type': 'string', + 'default': '' + } + } + } + + input_port_types = ( + {'name': 'Image', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgb+png', 'image/rgb+jpg']}, + {'name': 'rgba PNG - Selected regions', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Background layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + # {'name': 'rgba PNG - Music symbol layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + # {'name': 'rgba PNG - Staff lines layer', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + # {'name': 'rgba PNG - Text', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 0', 'minimum': 1, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 1', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 2', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 3', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 4', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 5', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 6', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 7', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 8', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + {'name': 'rgba PNG - Layer 9', 'minimum': 0, 'maximum': 1, 'resource_types': ['image/rgba+png']}, + ) + + output_port_types = ( + {'name': 'Background Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + # {'name': 'Music Symbol Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + # {'name': 'Staff Lines Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + # {'name': 'Text Model', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 0', 'minimum': 1, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 1', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 2', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 3', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 4', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 5', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 6', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 7', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 8', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + {'name': 'Model 9', 'minimum': 0, 'maximum': 1, 'resource_types': ['keras/model+hdf5']}, + ) + + def _inputs(self, runjob, with_urls=True): + """ + Return a dictionary of list of input file path and input resource type. + If with_urls=True, it also includes the resource url and thumbnail urls. + """ + def _extract_resource(resource, resource_type_mimetype=None): + r = {'resource_path': str(resource.resource_file.path), # convert 'unicode' object to 'str' object for consistency + 'resource_type': str(resource_type_mimetype or resource.resource_type.mimetype)} + if with_urls: + r['resource_url'] = str(resource.resource_url) + r['diva_object_data'] = str(resource.diva_json_url) + r['diva_iip_server'] = getattr(rodan_settings, 'IIPSRV_URL') + r['diva_image_dir'] = str(resource.diva_image_dir) + return r + + input_objs = Input.objects.filter(run_job=runjob).select_related('resource', 'resource__resource_type', 'resource_list').prefetch_related('resource_list__resources') + + inputs = {} + for input in input_objs: + ipt_name = str(input.input_port_type_name) + if ipt_name not in inputs: + inputs[ipt_name] = [] + if input.resource is not None: # If resource + inputs[ipt_name].append(_extract_resource(input.resource)) + elif input.resource_list is not None: # If resource_list + inputs[ipt_name].append(map(lambda x: _extract_resource(x, input.resource_list.resource_type.mimetype), input.resource_list.resources.all())) + else: + raise RuntimeError("Cannot find any resource or resource list on Input {0}".format(input.uuid)) + return inputs + + def run_my_task(self, inputs, settings, outputs): + # Fail if arbitrary layers are not equal before training occurs. + input_ports = len([x for x in inputs if x[:17] == 'rgba PNG - Layer ']) + output_ports = len([x for x in outputs if x[:5] == 'Model']) + if input_ports != output_ports: + raise Exception( + 'The number of input layers "rgba PNG - Layers" does not match the number of' + ' output "Models"\n' + 'input_ports: %d output_ports: %d' % (input_ports, output_ports) + ) + + input = {} + input['Image'] = inputs['Image'][0]['resource_url'] + input['Background'] = inputs['rgba PNG - Background layer'][0]['resource_url'] + input['Selected Regions'] = inputs['rgba PNG - Selected regions'][0]['resource_url'] + # input['Music Layer'] = inputs['rgba PNG - Music symbol layer'][0]['resource_url'] + # input['Staff Layer'] = inputs['rgba PNG - Staff lines layer'][0]['resource_url'] + # input['Text'] = inputs['rgba PNG - Text'][0]['resource_url'] + + # Populate use-defined layers + for i in range(input_ports): + layer = 'rgba PNG - Layer %d' % i + input[layer] = inputs[layer][0]['resource_url'] + + # Optional ports + # for k in inputs: + # if k == 'rgba PNG - Staff lines layer': + # input['Staff Layer'] = inputs['rgba PNG - Staff lines layer'][0]['resource_url'] + # if k == 'rgba PNG - Text': + # input['Text'] = inputs['rgba PNG - Text'][0]['resource_url'] + + message_dict = { + 'inputs': input, + 'settings': settings + } + message = json.dumps(message_dict) + + credentials = pika.PlainCredentials(os.environ['HPC_RABBITMQ_USER'], os.environ['HPC_RABBITMQ_PASSWORD']) + parameters = pika.ConnectionParameters(os.environ['HPC_RABBITMQ_HOST'], 5672, '/', credentials) + self.logger.info("Preparing to connect...") + + with pika.BlockingConnection(parameters) as conn: + # Open Channel + channel = conn.channel() + channel.confirm_delivery() + channel.queue_declare(queue='hpc-jobs') + channel.queue_declare(queue='hpc-results') + # Declare anonymous reply queue + # result = channel.queue_declare(queue='', exclusive=True) + # callback_queue = result.method.queue + callback_queue = 'hpc-results' + correlation_id = str(uuid4()) + # Send Message + channel.basic_publish( + exchange='', + routing_key='hpc-jobs', + properties=pika.BasicProperties( + reply_to=callback_queue, + correlation_id=correlation_id + ), + body=message + ) + self.logger.info("Message sent. Start waiting for reply") + + # define consumer callback + def callback(channel, method_frame, header_frame, body): + self.logger.info(method_frame.delivery_tag) + self.logger.info(body) + if method_frame and correlation_id == header_frame.correlation_id: + self.logger.info("Good!") + channel.basic_ack(method_frame.delivery_tag) + self.result_dict = json.loads(body.decode('utf-8')) + channel.basic_cancel(method_frame.consumer_tag) + else: + self.logger.info("Cannot handle id {}".format(correlation_id)) + channel.basic_nack(method_frame.delivery_tag) + + channel.basic_consume(callback_queue, callback) + channel.start_consuming() + + self.logger.info(self.result_dict) + if "error" in self.result_dict: + self.my_error_information( + None, + ( + "The request to Cedar failed with response: {0}\n" + "Try adding more memory and run the job again." + ).format(self.result_dict["error"]) + ) + return False + + with open(outputs['Background Model'][0]['resource_path'], 'wb') as f: + f.write(base64.decodebytes(self.result_dict['Background Model'].encode('utf-8'))) + # with open(outputs['Music Symbol Model'][0]['resource_path'], 'wb') as f: + # f.write(base64.decodebytes(self.result_dict['Music Symbol Model'].encode('utf-8'))) + # with open(outputs['Staff Lines Model'][0]['resource_path'], 'wb') as f: + # f.write(base64.decodebytes(self.result_dict['Staff Lines Model'].encode('utf-8'))) + # with open(outputs['Text Model'][0]['resource_path'], 'wb') as f: + # f.write(base64.decodebytes(self.result_dict['Text Model'].encode('utf-8'))) + for i in range(output_ports): + layer = 'Model %d' % i + with open(outputs[layer][0]['resource_path'], 'wb') as f: + f.write(base64.decodebytes(self.result_dict[layer].encode('utf-8'))) + + return True + + def my_error_information(self, exc, traceback): + self.error_summary = 'HPC Fast Trainer - Something went very wrong' + self.error_details = traceback \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/hpc_fast_trainer/requirements.txt b/rodan-main/code/rodan/jobs/hpc_fast_trainer/requirements.txt new file mode 100644 index 000000000..becc2ce1d --- /dev/null +++ b/rodan-main/code/rodan/jobs/hpc_fast_trainer/requirements.txt @@ -0,0 +1 @@ +pika==1.1.0 diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/__init__.py b/rodan-main/code/rodan/jobs/interactive_classifier/__init__.py new file mode 100644 index 000000000..cbf23c934 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/__init__.py @@ -0,0 +1,4 @@ +__version__ = "1.1.0" + +from wrapper import InteractiveClassifier +from gamera_xml_distributor import GameraXMLDistributor diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/gamera_xml_distributor.py b/rodan-main/code/rodan/jobs/interactive_classifier/gamera_xml_distributor.py new file mode 100644 index 000000000..bdf16c39a --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/gamera_xml_distributor.py @@ -0,0 +1,36 @@ +from shutil import copyfile + +from rodan.jobs.base import RodanTask + + +class GameraXMLDistributor(RodanTask): + name = "GameraXML Distributor" + author = "Andrew Fogarty" + description = "Distribute a GameraXML file." + settings = {} + enabled = True + category = "Resource Distributor" + interactive = False + input_port_types = [ + { + "name": "GameraXML File", + "resource_types": ["application/gamera+xml"], + "minimum": 1, + "maximum": 1, + "is_list": False + } + ] + output_port_types = [ + { + "name": "GameraXML File", + "resource_types": ["application/gamera+xml"], + "minimum": 1, + "maximum": 1, + "is_list": False + } + ] + + def run_my_task(self, inputs, settings, outputs): + copyfile(inputs['GameraXML File'][0]['resource_path'], + outputs['GameraXML File'][0]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/interactive_classifier.py b/rodan-main/code/rodan/jobs/interactive_classifier/interactive_classifier.py new file mode 100644 index 000000000..b31483bcd --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/interactive_classifier.py @@ -0,0 +1,458 @@ +import os +import copy +import json +import gamera.classify +import gamera.core +import gamera.gamera_xml +import gamera.knn +import image_utilities +from celery import uuid +from gamera.plugins.image_utilities import union_images +import gamera.plugins.segmentation +from gamera.gamera_xml import glyphs_from_xml +from gamera.gamera_xml import LoadXML +from rodan.jobs.interactive_classifier.intermediary.gamera_glyph import GameraGlyph +from rodan.jobs.interactive_classifier.intermediary.gamera_xml import GameraXML +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage +from rodan.settings import MEDIA_URL, MEDIA_ROOT +from django.http import HttpResponse + +class ClassifierStateEnum: + IMPORT_XML = 0 + CLASSIFYING = 1 + EXPORT_XML = 2 + GROUP_AND_CLASSIFY = 3 + GROUP = 4 + SAVE = 5 + + +def media_file_path_to_public_url(media_file_path): + chars_to_remove = len(MEDIA_ROOT) + return os.path.join(MEDIA_URL, media_file_path[chars_to_remove:]) + +def convert_to_gamera_image(glyph): + return RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + + +def get_manual_glyphs(glyphs): + """ + From the glyph list, extract the Gamera ImageList of manual glyphs. + """ + # Prepare the training glyphs + training_glyphs = [] + for glyph in glyphs: + if glyph['id_state_manual']: + # Get the gamera image + gamera_image = convert_to_gamera_image(glyph) + # It's a training glyph! + gamera_image.classify_manual(glyph['class_name']) + training_glyphs.append(gamera_image) + return training_glyphs + + +def output_corrected_glyphs(cknn, glyphs, inputs, output_path): + """ + Output the corrected data to disk. This includes both the manually + corrected and the automatically corrected glyphs. + """ + output_images = [] + for glyph in glyphs: + gamera_image = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + if glyph['id_state_manual']: + gamera_image.classify_manual(glyph['class_name']) + else: + if 'GameraXML - Training Data' in inputs: + if (glyph['class_name'] != "UNCLASSIFIED"): + gamera_image.classification_state = gamera.core.AUTOMATIC + gamera_image.id_name = [(glyph['confidence'],glyph['class_name'])] + if gamera_image.classification_state == gamera.core.UNCLASSIFIED: + cknn.classify_glyph_automatic(gamera_image) + else: + if (glyph['class_name'] != "UNCLASSIFIED"): + cknn.classify_glyph_automatic(gamera_image) + output_images.append(gamera_image) + # Dump all the glyphs to disk + cknn.generate_features_on_glyphs(output_images) + output_xml = gamera.gamera_xml.WriteXMLFile(glyphs=output_images, + with_features=True) + output_xml.write_filename(output_path) + + +def run_output_stage(cknn, glyphs, inputs, outputs, class_names): + """ + The job is complete, so save the results to disk. + """ + if 'GameraXML - Training Data' in outputs: + output_training_classifier_path = outputs['GameraXML - Training Data'][0][ + 'resource_path'] + # Save the training data to disk + cknn.to_xml_filename(output_training_classifier_path) + + if 'Plain Text - Class Names' in outputs: + output_classes_path = outputs['Plain Text - Class Names'][0]['resource_path'] + class_names = [n for n in class_names if not n == "UNCLASSIFIED"] + reverse_names = sorted(class_names) + outfile = open(output_classes_path, "w") + for name in reverse_names: + outfile.write(name + '\n') + outfile.close() + + + output_classified_data_path = outputs['GameraXML - Classified Glyphs'][0][ + 'resource_path'] + # Save the rest of the glyphs + output_corrected_glyphs(cknn, glyphs, inputs, output_classified_data_path) + + +def prepare_classifier(training_database, glyphs, features_file_path): + """ + Given a training database and a list of glyph dicts, train the classifier + """ + # Prepare the training glyphs + database = get_manual_glyphs(glyphs) + + # The database is a mixture of the original database plus all + # our manual corrections that we've done in the GUI. + for g in training_database: + glyph = convert_to_gamera_image(g) + + if g['id_state_manual']: + glyph.classify_manual(g['class_name']) + else: + glyph.classify_automatic(g['class_name']) + database.append(glyph) + + # Train the classifier + classifier = gamera.knn.kNNInteractive(database=database, + perform_splits=True, + num_k=1) + # Load features document if applicable + if features_file_path: + classifier.load_settings(features_file_path) + return classifier + +def group_and_correct(glyphs, user_options, training_database, features_file_path): + """ + Run the automatic correction stage of the Rodan job. + """ + # Train a classifier + cknn = prepare_classifier(training_database, + glyphs, + features_file_path) + # The automatic classifications + manual =[] + gamera_glyphs = [] + + for glyph in glyphs: + if not glyph['id_state_manual']: + # It's a glyph to be classified + gamera_glyph = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + + gamera_glyphs.append(gamera_glyph) + else: + manual.append(glyph) + + distance = int(user_options['distance']) + parts = int(user_options['parts']) + graph = int(user_options['graph']) + criterion = user_options['criterion'] + if(user_options['func'] == "Shaped"): + func = gamera.classify.ShapedGroupingFunction(distance) + else: + func = gamera.classify.BoundingBoxGroupingFunction(distance) + + + # Group and reclassify + add, remove = cknn.group_list_automatic(gamera_glyphs, grouping_function=func, + max_parts_per_group=parts, + max_graph_size=graph, + criterion = criterion) + + # Taking out the manual glyphs so that the indices of the two lists will match + for g in manual: + glyphs.remove(g) + + # Removing + for elem in remove: + index = gamera_glyphs.index(elem) + gamera_glyphs.remove(elem) + glyphs.remove(glyphs[index]) + + # Reassigning values after classification + for i in range(len(gamera_glyphs)): + glyphs[i]['class_name'] = gamera_glyphs[i].get_main_id() + glyphs[i]['confidence'] = gamera_glyphs[i].get_confidence() + + # Adding new glyphs + for elem in add: + new_glyph = GameraGlyph( + class_name = elem.get_main_id(), + rle_image = elem.to_rle(), + ncols = elem.ncols, + nrows = elem.nrows, + ulx = elem.ul.x, + uly = elem.ul.y, + id_state_manual = False, + confidence = elem.get_confidence()).to_dict() + + glyphs.append(new_glyph) + + # Put the manual glyphs back + for g in manual: + glyphs.append(g) + + return cknn + +def run_correction_stage(glyphs, training_database, features_file_path): + """ + Run the automatic correction stage of the Rodan job. + """ + # Train a classifier + cknn = prepare_classifier(training_database, + glyphs, + features_file_path) + # The automatic classifications + for glyph in glyphs: + if not glyph['id_state_manual']: + # It's a glyph to be classified + gamera_glyph = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + # Classify it! + + cknn.classify_glyph_automatic(gamera_glyph) + # Save the classification back into memory + result, confidence = cknn.guess_glyph_automatic(gamera_glyph) + glyph['class_name'] = result[0][1] + if confidence: + glyph['confidence'] = confidence[0] + else: + glyph['confidence'] = 0 + return cknn + + + +def serialize_glyphs_to_json(glyphs): + """ + Serialize the glyphs as a JSON dict grouped by short code + """ + output = {} + for glyph in glyphs: + class_name = glyph['class_name'] + if class_name not in output: + output[class_name] = [] + output[class_name].append(glyph) + # Sort the glyphs by confidence + for class_name in output.keys(): + output[class_name] = sorted(output[class_name], + key=lambda g: g["confidence"]) + return json.dumps(output) + + +def serialize_class_names_to_json(settings): + """ + Get JSON representing the list of all class names in the classifier. + """ + glyphs = settings['glyphs'] + training_database = settings['training_glyphs'] + imported_class_names = settings['imported_class_names'] + + name_set = set() + database = glyphs + training_database + # Add the glyph short codes + for image in database: + name_set.add(image['class_name']) + + for name in imported_class_names: + name_set.add(name) + + settings['class_names'] = list(name_set) + + return json.dumps(sorted(list(name_set))) + + +def serialize_data(settings): + """ + Serialize the short codes and glyphs to JSON and store them in settings. + """ + + # Make sure the manual glyphs get put in the same view as training glyphs + manual = [] + for glyph in settings['glyphs']: + if glyph['id_state_manual']: + manual.append(glyph) + + settings['class_names_json'] = serialize_class_names_to_json(settings) + settings['glyphs_json'] = serialize_glyphs_to_json(settings['glyphs']) + settings['training_json'] = serialize_glyphs_to_json(settings['training_glyphs'] + manual) + + +def filter_parts(settings): + """ + Remove grouped components and glyphs that have been deleted or split. + """ + parts = [] + temp = copy.copy(settings['glyphs']) + for glyph in settings['glyphs']: + name = glyph['class_name'] + if name.startswith("_split") or name.startswith("_group") or name.startswith("_delete"): + parts.append(glyph) + temp.remove(glyph) + settings['glyphs'] = temp + # Remove from the training glyphs as well + temp2 = copy.copy(settings['training_glyphs']) + for glyph in settings['training_glyphs']: + name = glyph['class_name'] + if name.startswith("_split") or name.startswith("_group") or name.startswith("_delete"): + temp2.remove(glyph) + settings['training_glyphs'] = temp2 + return parts + + +def add_grouped_glyphs(settings): + """ + Add new glyphs that have been grouped to the glyph dictionary. + """ + grouped_glyphs = settings['@grouped_glyphs'] + + for glyph in grouped_glyphs: + new_glyph = GameraGlyph( + gid = glyph["id"], + class_name = glyph['class_name'], + rle_image = glyph['rle_image'], + ncols = glyph['ncols'], + nrows = glyph['nrows'], + ulx = glyph['ulx'], + uly = glyph['uly'], + id_state_manual = glyph['id_state_manual'], + confidence = glyph['confidence'] + ).to_dict() + + settings['glyphs'].append(new_glyph) + + settings['@grouped_glyphs'] = [] + +def update_changed_glyphs(settings): + """ + Update the glyph objects that have been changed since the last round of classification + """ + # Build a hash of the changed glyphs by their id + changed_glyph_hash = {g['id']: g for g in settings['@changed_glyphs']} + changed_training_hash = {g['id']: g for g in settings['@changed_training_glyphs']} + deleted_glyph_hash = {g['id']: g for g in settings['@deleted_glyphs']} + deleted_training_hash = {g['id']: g for g in settings['@deleted_training_glyphs']} + + changed_glyph_hash.update(deleted_glyph_hash) + changed_training_hash.update(deleted_training_hash) + + # Loop through all glyphs. Update if changed. + for glyph in settings['glyphs']: + if not changed_glyph_hash: + # No more changed glyphs, so break + break + else: + # There are still glyphs to update + key = glyph['id'] + # Grab the changed glyph + if key in changed_glyph_hash: + changed_glyph = changed_glyph_hash[key] + # Update the Glyph proper + glyph['class_name'] = changed_glyph['class_name'] + glyph['id_state_manual'] = changed_glyph['id_state_manual'] + glyph['confidence'] = changed_glyph['confidence'] + # Pop the changed glyph from the hash + changed_glyph_hash.pop(key, None) + + # We do the same for the changed training glyphs + for glyph in settings['training_glyphs']: + + if not changed_training_hash: + # No more changed glyphs, so break + break + else: + # There are still glyphs to update + key = glyph['id'] + # Grab the changed glyph + if key in changed_training_hash: + changed_glyph = changed_training_hash[key] + # Update the Glyph proper + glyph['class_name'] = changed_glyph['class_name'] + glyph['id_state_manual'] = changed_glyph['id_state_manual'] + glyph['confidence'] = changed_glyph['confidence'] + # Pop the changed glyph from the hash + changed_training_hash.pop(key, None) + + # Clear out the @changed_glyphs from the settings... + settings['@changed_glyphs'] = [] + settings['@changed_training_glyphs'] = [] + settings['@deleted_glyphs'] = [] + settings['@deleted_training_glyphs'] = [] + +def remove_deleted_glyphs(settings, inputs): + """ + Filter out training glyphs that have been deleted or have the class UNCLASSIFIED. + """ + copy_training= settings['training_glyphs'] + filter_training = [g for g in copy_training if not g['class_name'] == "UNCLASSIFIED"] + valid_training = [g for g in filter_training if not g['class_name'].startswith("_delete")] + settings['training_glyphs'] = valid_training + + copy_list = settings['glyphs'] + valid_glyphs = [g for g in copy_list if not g['class_name'].startswith("_delete")] + settings['glyphs'] = valid_glyphs + +def remove_deleted_classes(settings): + """ + Filter out the class names that have been deleted. + """ + valid_classes = settings['imported_class_names'] + deleted_classes = settings['@deleted_classes'] + for deleted_name in deleted_classes: + valid_classes = [c for c in valid_classes if not c == deleted_name] + valid_classes = [c for c in valid_classes if not c.startswith(deleted_name + ".")] + settings['imported_class_names'] = valid_classes + settings['@deleted_classes'] = [] + +def update_renamed_classes(settings): + """ + Update the class names if they have been renamed. + """ + classes = settings['imported_class_names'] + renamed_classes = settings['@renamed_classes'] + updated_classes = [] + added_classes = [] + for c in classes: + for r in renamed_classes: + if c == r or c.startswith(r + "."): + added_classes.append(c) + updated_classes.append(c.replace(r, renamed_classes[r], 1)) + for c in classes: + if not c in added_classes: + updated_classes.append(c) + + settings['imported_class_names'] = updated_classes + updated_classes = [] + settings['@renamed_classes'] = [] diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/interfaces/interactive_classifier.html b/rodan-main/code/rodan/jobs/interactive_classifier/interfaces/interactive_classifier.html new file mode 100644 index 000000000..e1a2f688d --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/interfaces/interactive_classifier.html @@ -0,0 +1,30 @@ + + + + Interactive Classifier + + + + + + + +
                  +
                  +
                  +{% if training_glyphs %} +
                  +{% endif %} +
                  + +
                  +
                  +
                  + + + + + + diff --git a/rodan/test/models/test_result.py b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/__init__.py similarity index 100% rename from rodan/test/models/test_result.py rename to rodan-main/code/rodan/jobs/interactive_classifier/intermediary/__init__.py diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_glyph.py b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_glyph.py new file mode 100644 index 000000000..4fd07849f --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_glyph.py @@ -0,0 +1,66 @@ +import uuid +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage + + +class GameraGlyph(object): + def __init__(self, class_name, rle_image, ncols, nrows, ulx, uly, + id_state_manual, confidence, gid=0): + if gid == 0: + self._id = uuid.uuid4().hex + else: + self._id = gid + self._class_name = class_name + self._image = rle_image + self._ncols = ncols + self._nrows = nrows + self._ulx = ulx + self._uly = uly + self._id_state_manual = id_state_manual + self._confidence = confidence + self._is_training = False #default + # Generate multiple internal image representations + self._run_length_image = RunLengthImage(ulx=self._ulx, + uly=self._uly, + width=self._ncols, + height=self._nrows, + run_length_data=self._image) + self._image_b64 = self._run_length_image.get_base64_image() + self._gamera_image = self._run_length_image.get_gamera_image() + if self.is_manual_id(): + self._gamera_image.classify_manual(self._class_name) + + def is_manual_id(self): + return self._id_state_manual is True + + def get_gamera_image(self): + return self._gamera_image + + def classify_manual(self, class_name): + self._class_name = str(class_name) + self._confidence = 1.0 + self.get_gamera_image().classify_manual(self._class_name) + self._id_state_manual = True + + def is_id(self, id_name): + return self._id == id_name + + def classify_automatic(self, class_name, confidence): + self._class_name = str(class_name) + self._confidence = confidence + self._id_state_manual = False + + def to_dict(self): + return { + "id": self._id, + "class_name": self._class_name, + "image": self._image, + "image_b64": self._image_b64, + "ncols": self._ncols, + "nrows": self._nrows, + "ulx": self._ulx, + "uly": self._uly, + "id_state_manual": self.is_manual_id(), + "confidence": self._confidence, + "is_training": self._is_training + } diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_xml.py b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_xml.py new file mode 100644 index 000000000..81ddf1239 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/gamera_xml.py @@ -0,0 +1,74 @@ +import uuid + +from gamera.gameracore import MANUAL +from gamera.gamera_xml import glyphs_from_xml +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage + + +def construct_glyph_dict(name, image_run_length, image_b64, width, + height, ulx, uly, id_state_manual, confidence, is_training): + """ + Construct a dictionary representing an in-memory Gamera glyph. + """ + return { + "id": uuid.uuid4().hex, + "class_name": name, + "image": image_run_length, + "image_b64": image_b64, + "ncols": width, + "nrows": height, + "ulx": ulx, + "uly": uly, + "id_state_manual": id_state_manual, + "confidence": confidence, + "is_training": is_training + } + + +def gamera_image_to_glyph(image): + """ + Given a Gamera Image object, construct our internal glyph + representation. + """ + name = image.get_main_id() + confidence = image.get_confidence() + # Get top left + ulx = image.ul.x + uly = image.ul.y + # Dimensions + width = image.ncols + height = image.nrows + image_rle = image.to_rle() + image_b64 = RunLengthImage(ulx, uly, width, height, + image_rle).get_base64_image() + id_state_manual = image.classification_state == MANUAL + + + return construct_glyph_dict( + name, + image_rle, + image_b64, + width, + height, + ulx, + uly, + id_state_manual, + confidence, + False + ) + + +class GameraXML: + gamera_images = None + symbols = None + glyphs = None + + def __init__(self, gamera_file_path): + self.gamera_images = glyphs_from_xml(gamera_file_path) + # Construct the glyph objects + self.glyphs = [gamera_image_to_glyph(image) for image in + self.gamera_images] + + def get_glyphs(self): + return self.glyphs diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/run_length_image.py b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/run_length_image.py new file mode 100644 index 000000000..0984429c8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/intermediary/run_length_image.py @@ -0,0 +1,108 @@ +import base64 +import cStringIO +from PIL import ImageDraw +from PIL import Image as PILImage +from gamera.core import Image as GameraImage +from gamera.enums import ONEBIT, DENSE + + +class BinaryPixelEnum: + WHITE = 0 + BLACK = 1 + + +class RunLengthImage: + ulx = None + uly = None + width = None + height = None + run_length_data = None + pixel_matrix = None + + def __init__(self, ulx, uly, width, height, run_length_data): + self.ulx = ulx + self.uly = uly + self.width = width + self.height = height + # Turn run-length data into list of ints + self.run_length_data = map(lambda d: int(d), run_length_data.split()) + # Build an empty pixel matrix + self.pixel_matrix = [[BinaryPixelEnum.WHITE for x in range(self.height)] + for y in range(self.width)] + # Construct the pixel matrix + self.build_pixel_matrix() + + def build_pixel_matrix(self): + """ + Turn the run-length data into a pixel matrix + """ + current_pixel = 0 + is_black = False + # Iterate through the run length data + for length in self.run_length_data: + for n in range(length): + # 0 = white, 1 = black + # colour = 'white' + # if is_black: + # colour = 'black' + # Paint the pixel to the image + if is_black: + x, y = self.get_location_of_runlength(current_pixel) + self.pixel_matrix[x][y] = BinaryPixelEnum.BLACK + # Increase the current pixel + current_pixel += 1 + # Switch from black to white or white to black + is_black = not is_black + + def get_location_of_runlength(self, pixel_number): + """ + Find the x,y location of the nth pixel of a run-length encoding. + + :param pixel_number: nth pixel, starting at 0 and ending at + width * height - 1 + :return: (x,y) tuple + """ + y = pixel_number / self.width + x = pixel_number % self.width + return x, y + + def get_pil_image(self): + """ + Create a PIL image using the cached pixel matrix. + """ + image = PILImage.new("RGBA", (self.width, self.height), + (255, 255, 255, 0)) + draw = ImageDraw.Draw(image) + for x in range(self.width): + for y in range(self.height): + if self.pixel_matrix[x][y] == BinaryPixelEnum.BLACK: + draw.point((x, y), fill="black") + del draw + return image + + def get_base64_image(self): + pil_image = self.get_pil_image() + string_buffer = cStringIO.StringIO() + pil_image.save(string_buffer, format="PNG") + return base64.b64encode(string_buffer.getvalue()) + + def get_gamera_image(self): + # Image has to be encoded Dense and not RLE. If RLE, will seg fault + image = GameraImage((self.ulx, self.uly), + (self.ulx + self.width-1, self.uly + self.height-1), + ONEBIT, + DENSE) + # Build the image by pixels + for x in range(self.width): + for y in range(self.height): + if self.pixel_matrix[x][y] == BinaryPixelEnum.BLACK: + image.set((x, y), 1) + else: + image.set((x, y), 0) + return image + + def __unicode__(self): + return u"run_length_image[{0}, {1}, {2}, {3}]".format(self.ulx, + self.uly, + self.width, + self.height) diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/resource_types.yaml b/rodan-main/code/rodan/jobs/interactive_classifier/resource_types.yaml new file mode 100755 index 000000000..589c50b75 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/resource_types.yaml @@ -0,0 +1,18 @@ +- mimetype: text/plain + description: Plain text + extension: txt +- mimetype: image/onebit+png + description: One-bit (black and white) PNG image + extension: png +- mimetype: image/greyscale+png + description: Greyscale PNG image + extension: png +- mimetype: image/grey16+png + description: Greyscale 16 PNG image + extension: png +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: application/gamera+xml + description: Gamera XML file + extension: xml \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/__init__.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/__init__.py new file mode 100644 index 000000000..cbf23c934 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/__init__.py @@ -0,0 +1,4 @@ +__version__ = "1.1.0" + +from wrapper import InteractiveClassifier +from gamera_xml_distributor import GameraXMLDistributor diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/gamera_xml_distributor.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/gamera_xml_distributor.py new file mode 100644 index 000000000..bdf16c39a --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/gamera_xml_distributor.py @@ -0,0 +1,36 @@ +from shutil import copyfile + +from rodan.jobs.base import RodanTask + + +class GameraXMLDistributor(RodanTask): + name = "GameraXML Distributor" + author = "Andrew Fogarty" + description = "Distribute a GameraXML file." + settings = {} + enabled = True + category = "Resource Distributor" + interactive = False + input_port_types = [ + { + "name": "GameraXML File", + "resource_types": ["application/gamera+xml"], + "minimum": 1, + "maximum": 1, + "is_list": False + } + ] + output_port_types = [ + { + "name": "GameraXML File", + "resource_types": ["application/gamera+xml"], + "minimum": 1, + "maximum": 1, + "is_list": False + } + ] + + def run_my_task(self, inputs, settings, outputs): + copyfile(inputs['GameraXML File'][0]['resource_path'], + outputs['GameraXML File'][0]['resource_path']) + return True diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interactive_classifier.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interactive_classifier.py new file mode 100644 index 000000000..b31483bcd --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interactive_classifier.py @@ -0,0 +1,458 @@ +import os +import copy +import json +import gamera.classify +import gamera.core +import gamera.gamera_xml +import gamera.knn +import image_utilities +from celery import uuid +from gamera.plugins.image_utilities import union_images +import gamera.plugins.segmentation +from gamera.gamera_xml import glyphs_from_xml +from gamera.gamera_xml import LoadXML +from rodan.jobs.interactive_classifier.intermediary.gamera_glyph import GameraGlyph +from rodan.jobs.interactive_classifier.intermediary.gamera_xml import GameraXML +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage +from rodan.settings import MEDIA_URL, MEDIA_ROOT +from django.http import HttpResponse + +class ClassifierStateEnum: + IMPORT_XML = 0 + CLASSIFYING = 1 + EXPORT_XML = 2 + GROUP_AND_CLASSIFY = 3 + GROUP = 4 + SAVE = 5 + + +def media_file_path_to_public_url(media_file_path): + chars_to_remove = len(MEDIA_ROOT) + return os.path.join(MEDIA_URL, media_file_path[chars_to_remove:]) + +def convert_to_gamera_image(glyph): + return RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + + +def get_manual_glyphs(glyphs): + """ + From the glyph list, extract the Gamera ImageList of manual glyphs. + """ + # Prepare the training glyphs + training_glyphs = [] + for glyph in glyphs: + if glyph['id_state_manual']: + # Get the gamera image + gamera_image = convert_to_gamera_image(glyph) + # It's a training glyph! + gamera_image.classify_manual(glyph['class_name']) + training_glyphs.append(gamera_image) + return training_glyphs + + +def output_corrected_glyphs(cknn, glyphs, inputs, output_path): + """ + Output the corrected data to disk. This includes both the manually + corrected and the automatically corrected glyphs. + """ + output_images = [] + for glyph in glyphs: + gamera_image = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + if glyph['id_state_manual']: + gamera_image.classify_manual(glyph['class_name']) + else: + if 'GameraXML - Training Data' in inputs: + if (glyph['class_name'] != "UNCLASSIFIED"): + gamera_image.classification_state = gamera.core.AUTOMATIC + gamera_image.id_name = [(glyph['confidence'],glyph['class_name'])] + if gamera_image.classification_state == gamera.core.UNCLASSIFIED: + cknn.classify_glyph_automatic(gamera_image) + else: + if (glyph['class_name'] != "UNCLASSIFIED"): + cknn.classify_glyph_automatic(gamera_image) + output_images.append(gamera_image) + # Dump all the glyphs to disk + cknn.generate_features_on_glyphs(output_images) + output_xml = gamera.gamera_xml.WriteXMLFile(glyphs=output_images, + with_features=True) + output_xml.write_filename(output_path) + + +def run_output_stage(cknn, glyphs, inputs, outputs, class_names): + """ + The job is complete, so save the results to disk. + """ + if 'GameraXML - Training Data' in outputs: + output_training_classifier_path = outputs['GameraXML - Training Data'][0][ + 'resource_path'] + # Save the training data to disk + cknn.to_xml_filename(output_training_classifier_path) + + if 'Plain Text - Class Names' in outputs: + output_classes_path = outputs['Plain Text - Class Names'][0]['resource_path'] + class_names = [n for n in class_names if not n == "UNCLASSIFIED"] + reverse_names = sorted(class_names) + outfile = open(output_classes_path, "w") + for name in reverse_names: + outfile.write(name + '\n') + outfile.close() + + + output_classified_data_path = outputs['GameraXML - Classified Glyphs'][0][ + 'resource_path'] + # Save the rest of the glyphs + output_corrected_glyphs(cknn, glyphs, inputs, output_classified_data_path) + + +def prepare_classifier(training_database, glyphs, features_file_path): + """ + Given a training database and a list of glyph dicts, train the classifier + """ + # Prepare the training glyphs + database = get_manual_glyphs(glyphs) + + # The database is a mixture of the original database plus all + # our manual corrections that we've done in the GUI. + for g in training_database: + glyph = convert_to_gamera_image(g) + + if g['id_state_manual']: + glyph.classify_manual(g['class_name']) + else: + glyph.classify_automatic(g['class_name']) + database.append(glyph) + + # Train the classifier + classifier = gamera.knn.kNNInteractive(database=database, + perform_splits=True, + num_k=1) + # Load features document if applicable + if features_file_path: + classifier.load_settings(features_file_path) + return classifier + +def group_and_correct(glyphs, user_options, training_database, features_file_path): + """ + Run the automatic correction stage of the Rodan job. + """ + # Train a classifier + cknn = prepare_classifier(training_database, + glyphs, + features_file_path) + # The automatic classifications + manual =[] + gamera_glyphs = [] + + for glyph in glyphs: + if not glyph['id_state_manual']: + # It's a glyph to be classified + gamera_glyph = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + + gamera_glyphs.append(gamera_glyph) + else: + manual.append(glyph) + + distance = int(user_options['distance']) + parts = int(user_options['parts']) + graph = int(user_options['graph']) + criterion = user_options['criterion'] + if(user_options['func'] == "Shaped"): + func = gamera.classify.ShapedGroupingFunction(distance) + else: + func = gamera.classify.BoundingBoxGroupingFunction(distance) + + + # Group and reclassify + add, remove = cknn.group_list_automatic(gamera_glyphs, grouping_function=func, + max_parts_per_group=parts, + max_graph_size=graph, + criterion = criterion) + + # Taking out the manual glyphs so that the indices of the two lists will match + for g in manual: + glyphs.remove(g) + + # Removing + for elem in remove: + index = gamera_glyphs.index(elem) + gamera_glyphs.remove(elem) + glyphs.remove(glyphs[index]) + + # Reassigning values after classification + for i in range(len(gamera_glyphs)): + glyphs[i]['class_name'] = gamera_glyphs[i].get_main_id() + glyphs[i]['confidence'] = gamera_glyphs[i].get_confidence() + + # Adding new glyphs + for elem in add: + new_glyph = GameraGlyph( + class_name = elem.get_main_id(), + rle_image = elem.to_rle(), + ncols = elem.ncols, + nrows = elem.nrows, + ulx = elem.ul.x, + uly = elem.ul.y, + id_state_manual = False, + confidence = elem.get_confidence()).to_dict() + + glyphs.append(new_glyph) + + # Put the manual glyphs back + for g in manual: + glyphs.append(g) + + return cknn + +def run_correction_stage(glyphs, training_database, features_file_path): + """ + Run the automatic correction stage of the Rodan job. + """ + # Train a classifier + cknn = prepare_classifier(training_database, + glyphs, + features_file_path) + # The automatic classifications + for glyph in glyphs: + if not glyph['id_state_manual']: + # It's a glyph to be classified + gamera_glyph = RunLengthImage( + glyph['ulx'], + glyph['uly'], + glyph['ncols'], + glyph['nrows'], + glyph['image'] + ).get_gamera_image() + # Classify it! + + cknn.classify_glyph_automatic(gamera_glyph) + # Save the classification back into memory + result, confidence = cknn.guess_glyph_automatic(gamera_glyph) + glyph['class_name'] = result[0][1] + if confidence: + glyph['confidence'] = confidence[0] + else: + glyph['confidence'] = 0 + return cknn + + + +def serialize_glyphs_to_json(glyphs): + """ + Serialize the glyphs as a JSON dict grouped by short code + """ + output = {} + for glyph in glyphs: + class_name = glyph['class_name'] + if class_name not in output: + output[class_name] = [] + output[class_name].append(glyph) + # Sort the glyphs by confidence + for class_name in output.keys(): + output[class_name] = sorted(output[class_name], + key=lambda g: g["confidence"]) + return json.dumps(output) + + +def serialize_class_names_to_json(settings): + """ + Get JSON representing the list of all class names in the classifier. + """ + glyphs = settings['glyphs'] + training_database = settings['training_glyphs'] + imported_class_names = settings['imported_class_names'] + + name_set = set() + database = glyphs + training_database + # Add the glyph short codes + for image in database: + name_set.add(image['class_name']) + + for name in imported_class_names: + name_set.add(name) + + settings['class_names'] = list(name_set) + + return json.dumps(sorted(list(name_set))) + + +def serialize_data(settings): + """ + Serialize the short codes and glyphs to JSON and store them in settings. + """ + + # Make sure the manual glyphs get put in the same view as training glyphs + manual = [] + for glyph in settings['glyphs']: + if glyph['id_state_manual']: + manual.append(glyph) + + settings['class_names_json'] = serialize_class_names_to_json(settings) + settings['glyphs_json'] = serialize_glyphs_to_json(settings['glyphs']) + settings['training_json'] = serialize_glyphs_to_json(settings['training_glyphs'] + manual) + + +def filter_parts(settings): + """ + Remove grouped components and glyphs that have been deleted or split. + """ + parts = [] + temp = copy.copy(settings['glyphs']) + for glyph in settings['glyphs']: + name = glyph['class_name'] + if name.startswith("_split") or name.startswith("_group") or name.startswith("_delete"): + parts.append(glyph) + temp.remove(glyph) + settings['glyphs'] = temp + # Remove from the training glyphs as well + temp2 = copy.copy(settings['training_glyphs']) + for glyph in settings['training_glyphs']: + name = glyph['class_name'] + if name.startswith("_split") or name.startswith("_group") or name.startswith("_delete"): + temp2.remove(glyph) + settings['training_glyphs'] = temp2 + return parts + + +def add_grouped_glyphs(settings): + """ + Add new glyphs that have been grouped to the glyph dictionary. + """ + grouped_glyphs = settings['@grouped_glyphs'] + + for glyph in grouped_glyphs: + new_glyph = GameraGlyph( + gid = glyph["id"], + class_name = glyph['class_name'], + rle_image = glyph['rle_image'], + ncols = glyph['ncols'], + nrows = glyph['nrows'], + ulx = glyph['ulx'], + uly = glyph['uly'], + id_state_manual = glyph['id_state_manual'], + confidence = glyph['confidence'] + ).to_dict() + + settings['glyphs'].append(new_glyph) + + settings['@grouped_glyphs'] = [] + +def update_changed_glyphs(settings): + """ + Update the glyph objects that have been changed since the last round of classification + """ + # Build a hash of the changed glyphs by their id + changed_glyph_hash = {g['id']: g for g in settings['@changed_glyphs']} + changed_training_hash = {g['id']: g for g in settings['@changed_training_glyphs']} + deleted_glyph_hash = {g['id']: g for g in settings['@deleted_glyphs']} + deleted_training_hash = {g['id']: g for g in settings['@deleted_training_glyphs']} + + changed_glyph_hash.update(deleted_glyph_hash) + changed_training_hash.update(deleted_training_hash) + + # Loop through all glyphs. Update if changed. + for glyph in settings['glyphs']: + if not changed_glyph_hash: + # No more changed glyphs, so break + break + else: + # There are still glyphs to update + key = glyph['id'] + # Grab the changed glyph + if key in changed_glyph_hash: + changed_glyph = changed_glyph_hash[key] + # Update the Glyph proper + glyph['class_name'] = changed_glyph['class_name'] + glyph['id_state_manual'] = changed_glyph['id_state_manual'] + glyph['confidence'] = changed_glyph['confidence'] + # Pop the changed glyph from the hash + changed_glyph_hash.pop(key, None) + + # We do the same for the changed training glyphs + for glyph in settings['training_glyphs']: + + if not changed_training_hash: + # No more changed glyphs, so break + break + else: + # There are still glyphs to update + key = glyph['id'] + # Grab the changed glyph + if key in changed_training_hash: + changed_glyph = changed_training_hash[key] + # Update the Glyph proper + glyph['class_name'] = changed_glyph['class_name'] + glyph['id_state_manual'] = changed_glyph['id_state_manual'] + glyph['confidence'] = changed_glyph['confidence'] + # Pop the changed glyph from the hash + changed_training_hash.pop(key, None) + + # Clear out the @changed_glyphs from the settings... + settings['@changed_glyphs'] = [] + settings['@changed_training_glyphs'] = [] + settings['@deleted_glyphs'] = [] + settings['@deleted_training_glyphs'] = [] + +def remove_deleted_glyphs(settings, inputs): + """ + Filter out training glyphs that have been deleted or have the class UNCLASSIFIED. + """ + copy_training= settings['training_glyphs'] + filter_training = [g for g in copy_training if not g['class_name'] == "UNCLASSIFIED"] + valid_training = [g for g in filter_training if not g['class_name'].startswith("_delete")] + settings['training_glyphs'] = valid_training + + copy_list = settings['glyphs'] + valid_glyphs = [g for g in copy_list if not g['class_name'].startswith("_delete")] + settings['glyphs'] = valid_glyphs + +def remove_deleted_classes(settings): + """ + Filter out the class names that have been deleted. + """ + valid_classes = settings['imported_class_names'] + deleted_classes = settings['@deleted_classes'] + for deleted_name in deleted_classes: + valid_classes = [c for c in valid_classes if not c == deleted_name] + valid_classes = [c for c in valid_classes if not c.startswith(deleted_name + ".")] + settings['imported_class_names'] = valid_classes + settings['@deleted_classes'] = [] + +def update_renamed_classes(settings): + """ + Update the class names if they have been renamed. + """ + classes = settings['imported_class_names'] + renamed_classes = settings['@renamed_classes'] + updated_classes = [] + added_classes = [] + for c in classes: + for r in renamed_classes: + if c == r or c.startswith(r + "."): + added_classes.append(c) + updated_classes.append(c.replace(r, renamed_classes[r], 1)) + for c in classes: + if not c in added_classes: + updated_classes.append(c) + + settings['imported_class_names'] = updated_classes + updated_classes = [] + settings['@renamed_classes'] = [] diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interfaces/interactive_classifier.html b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interfaces/interactive_classifier.html new file mode 100644 index 000000000..e1a2f688d --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/interfaces/interactive_classifier.html @@ -0,0 +1,30 @@ + + + + Interactive Classifier + + + + + + + +
                  +
                  +
                  +{% if training_glyphs %} +
                  +{% endif %} +
                  + +
                  +
                  +
                  + + + + + + diff --git a/rodan/test/views/test_runjob.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/__init__.py similarity index 100% rename from rodan/test/views/test_runjob.py rename to rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/__init__.py diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_glyph.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_glyph.py new file mode 100644 index 000000000..4fd07849f --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_glyph.py @@ -0,0 +1,66 @@ +import uuid +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage + + +class GameraGlyph(object): + def __init__(self, class_name, rle_image, ncols, nrows, ulx, uly, + id_state_manual, confidence, gid=0): + if gid == 0: + self._id = uuid.uuid4().hex + else: + self._id = gid + self._class_name = class_name + self._image = rle_image + self._ncols = ncols + self._nrows = nrows + self._ulx = ulx + self._uly = uly + self._id_state_manual = id_state_manual + self._confidence = confidence + self._is_training = False #default + # Generate multiple internal image representations + self._run_length_image = RunLengthImage(ulx=self._ulx, + uly=self._uly, + width=self._ncols, + height=self._nrows, + run_length_data=self._image) + self._image_b64 = self._run_length_image.get_base64_image() + self._gamera_image = self._run_length_image.get_gamera_image() + if self.is_manual_id(): + self._gamera_image.classify_manual(self._class_name) + + def is_manual_id(self): + return self._id_state_manual is True + + def get_gamera_image(self): + return self._gamera_image + + def classify_manual(self, class_name): + self._class_name = str(class_name) + self._confidence = 1.0 + self.get_gamera_image().classify_manual(self._class_name) + self._id_state_manual = True + + def is_id(self, id_name): + return self._id == id_name + + def classify_automatic(self, class_name, confidence): + self._class_name = str(class_name) + self._confidence = confidence + self._id_state_manual = False + + def to_dict(self): + return { + "id": self._id, + "class_name": self._class_name, + "image": self._image, + "image_b64": self._image_b64, + "ncols": self._ncols, + "nrows": self._nrows, + "ulx": self._ulx, + "uly": self._uly, + "id_state_manual": self.is_manual_id(), + "confidence": self._confidence, + "is_training": self._is_training + } diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_xml.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_xml.py new file mode 100644 index 000000000..81ddf1239 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/gamera_xml.py @@ -0,0 +1,74 @@ +import uuid + +from gamera.gameracore import MANUAL +from gamera.gamera_xml import glyphs_from_xml +from rodan.jobs.interactive_classifier.intermediary.run_length_image import \ + RunLengthImage + + +def construct_glyph_dict(name, image_run_length, image_b64, width, + height, ulx, uly, id_state_manual, confidence, is_training): + """ + Construct a dictionary representing an in-memory Gamera glyph. + """ + return { + "id": uuid.uuid4().hex, + "class_name": name, + "image": image_run_length, + "image_b64": image_b64, + "ncols": width, + "nrows": height, + "ulx": ulx, + "uly": uly, + "id_state_manual": id_state_manual, + "confidence": confidence, + "is_training": is_training + } + + +def gamera_image_to_glyph(image): + """ + Given a Gamera Image object, construct our internal glyph + representation. + """ + name = image.get_main_id() + confidence = image.get_confidence() + # Get top left + ulx = image.ul.x + uly = image.ul.y + # Dimensions + width = image.ncols + height = image.nrows + image_rle = image.to_rle() + image_b64 = RunLengthImage(ulx, uly, width, height, + image_rle).get_base64_image() + id_state_manual = image.classification_state == MANUAL + + + return construct_glyph_dict( + name, + image_rle, + image_b64, + width, + height, + ulx, + uly, + id_state_manual, + confidence, + False + ) + + +class GameraXML: + gamera_images = None + symbols = None + glyphs = None + + def __init__(self, gamera_file_path): + self.gamera_images = glyphs_from_xml(gamera_file_path) + # Construct the glyph objects + self.glyphs = [gamera_image_to_glyph(image) for image in + self.gamera_images] + + def get_glyphs(self): + return self.glyphs diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/run_length_image.py b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/run_length_image.py new file mode 100644 index 000000000..0984429c8 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/intermediary/run_length_image.py @@ -0,0 +1,108 @@ +import base64 +import cStringIO +from PIL import ImageDraw +from PIL import Image as PILImage +from gamera.core import Image as GameraImage +from gamera.enums import ONEBIT, DENSE + + +class BinaryPixelEnum: + WHITE = 0 + BLACK = 1 + + +class RunLengthImage: + ulx = None + uly = None + width = None + height = None + run_length_data = None + pixel_matrix = None + + def __init__(self, ulx, uly, width, height, run_length_data): + self.ulx = ulx + self.uly = uly + self.width = width + self.height = height + # Turn run-length data into list of ints + self.run_length_data = map(lambda d: int(d), run_length_data.split()) + # Build an empty pixel matrix + self.pixel_matrix = [[BinaryPixelEnum.WHITE for x in range(self.height)] + for y in range(self.width)] + # Construct the pixel matrix + self.build_pixel_matrix() + + def build_pixel_matrix(self): + """ + Turn the run-length data into a pixel matrix + """ + current_pixel = 0 + is_black = False + # Iterate through the run length data + for length in self.run_length_data: + for n in range(length): + # 0 = white, 1 = black + # colour = 'white' + # if is_black: + # colour = 'black' + # Paint the pixel to the image + if is_black: + x, y = self.get_location_of_runlength(current_pixel) + self.pixel_matrix[x][y] = BinaryPixelEnum.BLACK + # Increase the current pixel + current_pixel += 1 + # Switch from black to white or white to black + is_black = not is_black + + def get_location_of_runlength(self, pixel_number): + """ + Find the x,y location of the nth pixel of a run-length encoding. + + :param pixel_number: nth pixel, starting at 0 and ending at + width * height - 1 + :return: (x,y) tuple + """ + y = pixel_number / self.width + x = pixel_number % self.width + return x, y + + def get_pil_image(self): + """ + Create a PIL image using the cached pixel matrix. + """ + image = PILImage.new("RGBA", (self.width, self.height), + (255, 255, 255, 0)) + draw = ImageDraw.Draw(image) + for x in range(self.width): + for y in range(self.height): + if self.pixel_matrix[x][y] == BinaryPixelEnum.BLACK: + draw.point((x, y), fill="black") + del draw + return image + + def get_base64_image(self): + pil_image = self.get_pil_image() + string_buffer = cStringIO.StringIO() + pil_image.save(string_buffer, format="PNG") + return base64.b64encode(string_buffer.getvalue()) + + def get_gamera_image(self): + # Image has to be encoded Dense and not RLE. If RLE, will seg fault + image = GameraImage((self.ulx, self.uly), + (self.ulx + self.width-1, self.uly + self.height-1), + ONEBIT, + DENSE) + # Build the image by pixels + for x in range(self.width): + for y in range(self.height): + if self.pixel_matrix[x][y] == BinaryPixelEnum.BLACK: + image.set((x, y), 1) + else: + image.set((x, y), 0) + return image + + def __unicode__(self): + return u"run_length_image[{0}, {1}, {2}, {3}]".format(self.ulx, + self.uly, + self.width, + self.height) diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/resource_types.yaml b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/resource_types.yaml new file mode 100755 index 000000000..589c50b75 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/resource_types.yaml @@ -0,0 +1,18 @@ +- mimetype: text/plain + description: Plain text + extension: txt +- mimetype: image/onebit+png + description: One-bit (black and white) PNG image + extension: png +- mimetype: image/greyscale+png + description: Greyscale PNG image + extension: png +- mimetype: image/grey16+png + description: Greyscale 16 PNG image + extension: png +- mimetype: image/rgb+png + description: RGB PNG image + extension: png +- mimetype: application/gamera+xml + description: Gamera XML file + extension: xml \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css new file mode 100644 index 000000000..a64d966ff --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css @@ -0,0 +1,11 @@ +@import url("//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700");/*! + * Bootswatch v3.1.1+1 + * Homepage: http://bootswatch.com + * Copyright 2012-2014 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*//*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.table td,.table th{background-color:#fff !important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.42857143;color:#222222;background-color:#ffffff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#c2342e;text-decoration:none}a:hover,a:focus{color:#84231f;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:0}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #dddddd}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999999}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:39px}h2,.h2{font-size:32px}h3,.h3{font-size:26px}h4,.h4{font-size:19px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:22.5px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999999}.text-primary{color:#c2342e}a.text-primary:hover{color:#992924}.text-success{color:#43ac6a}a.text-success:hover{color:#358753}.text-info{color:#5bc0de}a.text-info:hover{color:#31b0d5}.text-warning{color:#e99002}a.text-warning:hover{color:#b67102}.text-danger{color:#f04124}a.text-danger:hover{color:#d32a0e}.bg-primary{color:#fff;background-color:#c2342e}a.bg-primary:hover{background-color:#992924}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid #dddddd}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #dddddd}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#6f6f6f}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #dddddd;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:21px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:0}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:0;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:0}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0%}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0%}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0%}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0%}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0%}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0%}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0%}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0%}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:21px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #dddddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #dddddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #dddddd}.table .table{background-color:#ffffff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #dddddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:15px;line-height:1.42857143;color:#6f6f6f}.form-control{display:block;width:100%;height:35px;padding:6px 12px;font-size:15px;line-height:1.42857143;color:#6f6f6f;background-color:#ffffff;background-image:none;border:1px solid #cccccc;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999999;opacity:1}.form-control:-ms-input-placeholder{color:#999999}.form-control::-webkit-input-placeholder{color:#999999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eeeeee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}input[type="date"]{line-height:35px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:21px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:48px;padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}select.input-lg{height:48px;line-height:48px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:43.75px}.has-feedback .form-control-feedback{position:absolute;top:26px;right:0;display:block;width:35px;height:35px;line-height:35px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#43ac6a}.has-success .form-control{border-color:#43ac6a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#358753;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #85d0a1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #85d0a1}.has-success .input-group-addon{color:#43ac6a;border-color:#43ac6a;background-color:#dff0d8}.has-success .form-control-feedback{color:#43ac6a}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#e99002}.has-warning .form-control{border-color:#e99002;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#b67102;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #febc53;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #febc53}.has-warning .input-group-addon{color:#e99002;border-color:#e99002;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#e99002}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#f04124}.has-error .form-control{border-color:#f04124;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#d32a0e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f79483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f79483}.has-error .input-group-addon{color:#f04124;border-color:#f04124;background-color:#f2dede}.has-error .form-control-feedback{color:#f04124}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#626262}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:28px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:15px;line-height:1.42857143;border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333333;background-color:#e7e7e7;border-color:#dadada}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333333;background-color:#d3d3d3;border-color:#bbbbbb}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e7e7e7;border-color:#dadada}.btn-default .badge{color:#e7e7e7;background-color:#333333}.btn-primary{color:#ffffff;background-color:#c2342e;border-color:#ad2e29}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#ffffff;background-color:#a12b26;border-color:#7c211d}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#c2342e;border-color:#ad2e29}.btn-primary .badge{color:#c2342e;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#43ac6a;border-color:#3c9a5f}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#ffffff;background-color:#388f58;border-color:#2b6e44}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#43ac6a;border-color:#3c9a5f}.btn-success .badge{color:#43ac6a;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#ffffff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#e99002;border-color:#d08002}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#ffffff;background-color:#c17702;border-color:#935b01}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#e99002;border-color:#d08002}.btn-warning .badge{color:#e99002;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#f04124;border-color:#ea2f10}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#ffffff;background-color:#dc2c0f;border-color:#b1240c}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#f04124;border-color:#ea2f10}.btn-danger .badge{color:#f04124;background-color:#ffffff}.btn-link{color:#c2342e;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#84231f;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:0}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:15px;background-color:#ffffff;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:rgba(0,0,0,0.2)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#555555;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#eeeeee}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#c2342e}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:none}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:48px;padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:48px;line-height:48px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:15px;font-weight:normal;line-height:1;color:#6f6f6f;text-align:center;background-color:#eeeeee;border:1px solid #cccccc;border-radius:0}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:0}.input-group-addon.input-lg{padding:10px 16px;font-size:19px;border-radius:0}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee}.nav>li.disabled>a{color:#999999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eeeeee;border-color:#c2342e}.nav .nav-divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #dddddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:0 0 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#6f6f6f;background-color:#ffffff;border:1px solid #dddddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #dddddd;border-radius:0 0 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#ffffff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#c2342e}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #dddddd;border-radius:0 0 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#ffffff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:45px;margin-bottom:21px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:0}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:12px 15px;font-size:19px;line-height:21px;height:45px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:5.5px;margin-bottom:5.5px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:0}.navbar-toggle:focus{outline:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:6px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:21px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:12px;padding-bottom:12px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:5px;margin-bottom:5px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:5px;margin-bottom:5px}.navbar-btn.btn-sm{margin-top:7.5px;margin-bottom:7.5px}.navbar-btn.btn-xs{margin-top:11.5px;margin-bottom:11.5px}.navbar-text{margin-top:12px;margin-bottom:12px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#333333;border-color:#222222}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-text{color:#ffffff}.navbar-default .navbar-nav>li>a{color:#ffffff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:transparent}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:transparent}.navbar-default .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#222222}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#272727;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-link{color:#ffffff}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-inverse{background-color:#c2342e;border-color:#992924}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-text{color:#ffffff}.navbar-inverse .navbar-nav>li>a{color:#ffffff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:transparent}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:transparent}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#a52c27}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#992924;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444444;background-color:transparent}}.navbar-inverse .navbar-link{color:#ffffff}.navbar-inverse .navbar-link:hover{color:#ffffff}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#f5f5f5;border-radius:0}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#999999}.breadcrumb>.active{color:#333333}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#c2342e;background-color:transparent;border:1px solid transparent;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#84231f;background-color:#eeeeee;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#ffffff;background-color:#c2342e;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999999;background-color:#ffffff;border-color:transparent;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:19px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pager{padding-left:0;margin:21px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:transparent;border:1px solid transparent;border-radius:3px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eeeeee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:transparent;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#c2342e}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#992924}.label-success{background-color:#43ac6a}.label-success[href]:hover,.label-success[href]:focus{background-color:#358753}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#e99002}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#b67102}.label-danger{background-color:#f04124}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d32a0e}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#777777;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#e7e7e7;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#c2342e;background-color:#ffffff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#fafafa}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.container .jumbotron{border-radius:0}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:67.5px}}.thumbnail{display:block;padding:4px;margin-bottom:21px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#c2342e}.thumbnail .caption{padding:9px;color:#222222}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:0}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#43ac6a;border-color:#3c9a5f;color:#ffffff}.alert-success hr{border-top-color:#358753}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#5bc0de;border-color:#3db5d8;color:#ffffff}.alert-info hr{border-top-color:#2aabd2}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#e99002;border-color:#d08002;color:#ffffff}.alert-warning hr{border-top-color:#b67102}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#f04124;border-color:#ea2f10;color:#ffffff}.alert-danger hr{border-top-color:#d32a0e}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:21px;margin-bottom:21px;background-color:#f5f5f5;border-radius:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:21px;color:#ffffff;text-align:center;background-color:#c2342e;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#43ac6a}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#e99002}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#f04124}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#ffffff;border:1px solid #dddddd}.list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555555}a.list-group-item .list-group-item-heading{color:#333333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#c2342e;border-color:#c2342e}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#f2cbca}.list-group-item-success{color:#43ac6a;background-color:#dff0d8}a.list-group-item-success{color:#43ac6a}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#43ac6a;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.list-group-item-info{color:#5bc0de;background-color:#d9edf7}a.list-group-item-info{color:#5bc0de}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#5bc0de;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.list-group-item-warning{color:#e99002;background-color:#fcf8e3}a.list-group-item-warning{color:#e99002}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#e99002;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#e99002;border-color:#e99002}.list-group-item-danger{color:#f04124;background-color:#f2dede}a.list-group-item-danger{color:#f04124}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#f04124;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#f04124;border-color:#f04124}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;background-color:#ffffff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:17px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #dddddd;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #dddddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.panel-group .panel{margin-bottom:0;border-radius:0;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #dddddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #dddddd}.panel-default{border-color:#dddddd}.panel-default>.panel-heading{color:#333333;background-color:#f5f5f5;border-color:#dddddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#dddddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#dddddd}.panel-primary{border-color:#c2342e}.panel-primary>.panel-heading{color:#ffffff;background-color:#c2342e;border-color:#c2342e}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#c2342e}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#c2342e}.panel-success{border-color:#3c9a5f}.panel-success>.panel-heading{color:#ffffff;background-color:#43ac6a;border-color:#3c9a5f}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#3c9a5f}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3c9a5f}.panel-info{border-color:#3db5d8}.panel-info>.panel-heading{color:#ffffff;background-color:#5bc0de;border-color:#3db5d8}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#3db5d8}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3db5d8}.panel-warning{border-color:#d08002}.panel-warning>.panel-heading{color:#ffffff;background-color:#e99002;border-color:#d08002}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#d08002}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d08002}.panel-danger{border-color:#ea2f10}.panel-danger>.panel-heading{color:#ffffff;background-color:#f04124;border-color:#ea2f10}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ea2f10}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ea2f10}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #e8e8e8;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:0}.well-sm{padding:9px;border-radius:0}.close{float:right;font-size:22.5px;font-weight:bold;line-height:1;color:#ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#ffffff;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#ffffff;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#333333;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333333}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#333333}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#333333}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#333333;background-clip:padding-box;border:1px solid #333333;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:15px;font-weight:normal;line-height:18px;background-color:#333333;border-bottom:1px solid #262626;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#000000;border-top-color:rgba(0,0,0,0.05);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#333333}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#000000;border-right-color:rgba(0,0,0,0.05)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#333333}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#000000;border-bottom-color:rgba(0,0,0,0.05);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#333333}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#000000;border-left-color:rgba(0,0,0,0.05)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#333333;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.5) 0), color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.0001) 0), color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:none;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}@media print{.hidden-print{display:none !important}}table a:hover,table a:focus{color:#84231f;background:#eeeeee;text-decoration:none}.navbar{border:none;font-size:13px;font-weight:300}.navbar .navbar-toggle:hover .icon-bar{background-color:#b3b3b3}.navbar-collapse{border-top-color:rgba(0,0,0,0.2);-webkit-box-shadow:none;box-shadow:none}.navbar .btn{padding-top:6px;padding-bottom:6px}.navbar .dropdown-menu{border:none}.navbar .dropdown-menu>li>a,.navbar .dropdown-menu>li>a:focus{background-color:transparent;font-size:13px;font-weight:300}.navbar .dropdown-header{color:rgba(255,255,255,0.5)}.navbar-default .dropdown-menu{background-color:#333333}.navbar-default .dropdown-menu>li>a,.navbar-default .dropdown-menu>li>a:focus{color:#ffffff}.navbar-default .dropdown-menu>li>a:hover,.navbar-default .dropdown-menu>.active>a,.navbar-default .dropdown-menu>.active>a:hover{background-color:#272727}.navbar-inverse .dropdown-menu{background-color:#c2342e}.navbar-inverse .dropdown-menu>li>a,.navbar-inverse .dropdown-menu>li>a:focus{color:#ffffff}.navbar-inverse .dropdown-menu>li>a:hover,.navbar-inverse .dropdown-menu>.active>a,.navbar-inverse .dropdown-menu>.active>a:hover{background-color:#992924}.btn-lg{padding:16px 32px}.btn-sm{padding:8px 16px}.btn-xs{padding:4px 8px}.btn-group .btn~.dropdown-toggle{padding-left:16px;padding-right:16px}.btn-group .dropdown-menu{border-top-width:0}.btn-group.dropup .dropdown-menu{border-top-width:1px;border-bottom-width:0;margin-bottom:0}.btn-group .dropdown-toggle.btn-default~.dropdown-menu{background-color:#e7e7e7;border-color:#dadada}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a{color:#333333}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a:hover{background-color:#d3d3d3}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu{background-color:#c2342e;border-color:#ad2e29}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a:hover{background-color:#a12b26}.btn-group .dropdown-toggle.btn-success~.dropdown-menu{background-color:#43ac6a;border-color:#3c9a5f}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a:hover{background-color:#388f58}.btn-group .dropdown-toggle.btn-info~.dropdown-menu{background-color:#5bc0de;border-color:#46b8da}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a:hover{background-color:#39b3d7}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu{background-color:#e99002;border-color:#d08002}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a:hover{background-color:#c17702}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu{background-color:#f04124;border-color:#ea2f10}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a:hover{background-color:#dc2c0f}.lead{color:#6f6f6f}cite{font-style:italic}blockquote{border-left-width:1px;color:#6f6f6f}blockquote.pull-right{border-right-width:1px}blockquote small{font-size:12px;font-weight:300}input,.form-control{padding:7px}label,.control-label,.help-block,.checkbox,.radio{font-size:12px;font-weight:normal}.input-group-addon,.input-group-btn .btn{padding:8px 14px;font-size:12px}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:transparent}.nav-tabs>li>a{background-color:#e7e7e7;color:#222222}.nav-tabs>li>a:hover{color:#c2342e}.nav-tabs .caret{border-top-color:#222222;border-bottom-color:#222222}.nav-pills{font-weight:300}.breadcrumb{border:1px solid #dddddd;border-radius:3px;font-size:10px;font-weight:300;text-transform:uppercase}.pagination{font-size:12px;font-weight:300;color:#999999}.pagination>li>a,.pagination>li>span{margin-left:4px;color:#999999}.pagination>.active>a,.pagination>.active>span{color:#fff}.pagination>li>a,.pagination>li:first-child>a,.pagination>li:last-child>a,.pagination>li>span,.pagination>li:first-child>span,.pagination>li:last-child>span{border-radius:3px}.pagination-lg>li>a{padding-left:22px;padding-right:22px}.pagination-sm>li>a{padding:0 5px}.pager{font-size:12px;font-weight:300;color:#999999}.list-group{font-size:12px;font-weight:300}.close{opacity:0.4}.close:hover,.close:focus{opacity:1}.alert{font-weight:300}.alert a,.alert .alert-link{font-weight:normal;color:#fff;text-decoration:underline}.alert .close{color:#fff;text-decoration:none}.alert .close:hover,.alert .close:focus{color:#fff}.label{padding-left:1em;padding-right:1em;border-radius:0;font-weight:300}.label-default{background-color:#e7e7e7;color:#333333}.badge{font-weight:300}.progress{height:22px;padding:2px;background-color:#f6f6f6;border:1px solid #ccc;-webkit-box-shadow:none;box-shadow:none}.dropdown-menu{padding:0;margin-top:0;font-size:12px}.dropdown-menu>li>a{padding:12px 15px}.dropdown-header{padding-left:15px;padding-right:15px;font-size:9px;text-transform:uppercase}.popover{color:#fff;font-size:12px;font-weight:300}.panel-heading,.panel-footer{border-top-right-radius:0;border-top-left-radius:0}.panel-heading:hover,.panel-footer:hover{background:#fcfcfc}.panel-title>a:hover{color:#c2342e;text-decoration:none} +.hidden{display:none}.grab{cursor:url("../img/openhand.cur"),pointer}.grabbing{cursor:url("../img/closedhand.cur"),move !important}.loading{background:url("../img/loading.gif") no-repeat center}.full-width{width:100% !important;max-width:100% !important}.full-height{height:100% !important;max-height:100% !important}.prevent-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.button{cursor:pointer;height:32px;width:32px;background-color:#f1f1f1;background-repeat:no-repeat;background-position:center;border:1px solid #99bbe8}@media screen and (min-device-width:769px){.button:hover{background-color:#fdfdfd}}.diva-title{text-align:center;font-weight:bold;font-size:2em}.diva-tools{margin-top:15px}.diva-tools .diva-tools-left{float:left}.diva-tools .diva-tools-left .diva-slider-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left .diva-zoom-buttons-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left .diva-zoom-out-button{display:none;float:left;background-image:url("../img/zoomout.png")}.diva-tools .diva-tools-left .diva-zoom-in-button{display:none;float:left;background-image:url("../img/zoomin.png");margin-left:-1px}.diva-tools .diva-tools-left .diva-grid-out-button{display:none;float:left;background-image:url("../img/zoomout.png")}.diva-tools .diva-tools-left .diva-grid-in-button{display:none;float:left;background-image:url("../img/zoomin.png");margin-left:-1px}.diva-tools .diva-tools-left .diva-buttons-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left.in-fullscreen{float:left;clear:none}.diva-tools .diva-tools-right{float:right;height:42px}.diva-tools .diva-tools-right .diva-grid-icon{float:right;background-image:url("../img/grid.png")}.diva-tools .diva-tools-right .diva-grid-icon.diva-in-grid{background-image:url("../img/document.png")}.diva-tools .diva-tools-right .diva-link-icon{float:right;background-image:url("../img/link.png")}.diva-tools .diva-tools-right .diva-page-nav{float:left;text-align:right;padding-right:4px;white-space:nowrap;line-height:32px}.diva-tools .diva-tools-right .diva-page-nav .diva-page-label{float:left;padding-top:1px;padding-right:.5em;line-height:32px}.diva-tools .diva-tools-right .diva-page-nav .diva-goto-form{float:right}.diva-tools .diva-tools-right .diva-page-nav .diva-goto-form .diva-input{width:30px;outline:none;margin:0;padding-top:0}.diva-tools.diva-fullscreen-tools{position:fixed;top:0;right:30px;z-index:101;width:230px;height:73px;padding:15px;border:1px solid #ddd;background:#fff;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}.diva-tools.diva-fullscreen-tools .diva-buttons-label{margin-top:5px;padding:0;clear:both}.diva-tools.diva-fullscreen-tools .diva-page-nav{float:none;line-height:1em}.diva-tools.diva-fullscreen-tools .diva-page-nav .diva-goto-form{margin-top:9px}.diva-tools.diva-fullscreen-tools .diva-page-nav .diva-page-label{float:none;clear:both;line-height:1em}.diva-outer{clear:both;background:#f1f1f1;border:1px solid #99bbe8;position:relative;min-height:100px;min-width:200px;height:700px;overflow:auto}.diva-outer .diva-inner{position:relative;overflow:hidden;margin:0 auto}.diva-outer .diva-inner .diva-page{-webkit-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);background:url("../img/loading.gif") no-repeat center;position:absolute}.diva-outer .diva-inner .diva-document-page{-webkit-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);background:url("../img/loading.gif") no-repeat center;position:absolute;left:0;right:0}.diva-outer .diva-inner .diva-document-page .diva-page-tools{position:absolute;top:-25px;left:0;height:25px;z-index:3}.diva-outer .diva-inner .diva-document-page .diva-page-tools div{display:inline-block;height:25px;width:25px;cursor:pointer}.diva-outer .diva-inner .diva-page-vertical{margin:0 auto;display:inline-block}.diva-outer .diva-inner .diva-page-horizontal{vertical-align:middle;display:inline-block;top:50%;transform:translate(0, -50%);-webkit-transform:translate(0, -50%);-moz-transform:translate(0, -50%);-ms-transform:translate(0, -50%)}.diva-outer .diva-inner .diva-row{position:absolute;width:100%}.diva-outer .diva-inner.diva-grab{cursor:url("../img/openhand.cur"),pointer}.diva-outer .diva-inner.diva-grabbing{cursor:url("../img/closedhand.cur"),move !important}.diva-outer.diva-fullscreen{width:100% !important;max-width:100% !important;height:100% !important;max-height:100% !important;z-index:100;position:fixed !important;top:0;left:0;margin:0;border:0}.diva-fullscreen-icon{background-image:url("../img/fullscreen.png");border-left:0;float:right}.diva-link-popup{font-size:10pt;background:#fff;border:1px solid #ddd;position:absolute;padding:.6em;z-index:101;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}.diva-link-popup input{width:15em}.diva-link-popup input:focus{outline:none}.diva-link-popup.in-fullscreen{top:150px;right:30px}.diva-hide-scrollbar{overflow:hidden !important}.diva-relative-position{position:relative}.zoom-slider{position:relative;top:.6em;display:none;float:left}@media (max-width:480px){.zoom-slider{width:100px}}.grid-slider{position:relative;top:.6em;display:none;float:left}@media (max-width:480px){.grid-slider{width:100px}}.diva-throbber{display:none;position:absolute;width:50px;height:50px;background:url("../img/loading.gif") no-repeat center;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);top:50%;left:50%;margin-left:-25px;margin-top:-25px}.diva-error{position:absolute;width:400px;height:200px;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);top:50%;left:50%;margin-left:-220px;margin-top:-120px;z-index:120;padding:0 1em}.diva-canvas-icon{background:url('../img/plugins/canvas.png') no-repeat;background-position:left center}.diva-canvas-icon:hover{background-position:-25px center}.diva-canvas-icon.new{background-position:-50px center}.diva-canvas-icon.new:hover{background-position:-75px center}#diva-canvas-backdrop{z-index:105;position:fixed;top:0;left:0;bottom:0;right:0;display:none;background:rgba(50,50,50,0.9)}#diva-canvas-tools{color:#333;position:fixed;top:10px;left:10px;width:230px;z-index:108;background:#fff;padding-bottom:10px;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}#diva-canvas-tools .action-buttons{clear:both;margin-bottom:5px;text-align:right}#diva-canvas-tools .action-buttons a{color:#333;text-decoration:none;background:#f1f1f1;padding:5px;border:1px solid #99bbe8}#diva-canvas-tools .action-buttons a:last-child{border-left:0}#diva-canvas-tools .action-buttons a:hover{background:#fdfdfd}#diva-canvas-toolbar{height:16px;padding:10px;padding-bottom:0}#diva-canvas-toolbar div{height:18px;width:18px;background-repeat:no-repeat;cursor:pointer;z-index:109;display:inline-block;margin-right:5px;background-image:url("../img/actions.png")}#diva-canvas-toolbar span{vertical-align:top;float:right}#diva-canvas-toolwindow{position:relative;margin:10px}#diva-canvas-close:hover{background-position:-20px 0}#diva-canvas-minimise{background-position:-40px 0}#diva-canvas-minimise:hover{background-position:-60px 0}#diva-canvas-buttons div{cursor:pointer;background-image:url("../img/plugins/canvas-buttons.png");background-repeat:no-repeat;width:20px;height:20px;padding:5px;display:inline-block}#diva-canvas-buttons div.clicked{background-color:#ddd}#diva-canvas-buttons .contrast{background-position:5px 5px}#diva-canvas-buttons .contrast:hover,#diva-canvas-buttons .contrast.clicked{background-position:5px -25px}#diva-canvas-buttons .brightness{background-position:-25px 5px}#diva-canvas-buttons .brightness:hover,#diva-canvas-buttons .brightness.clicked{background-position:-25px -25px}#diva-canvas-buttons .rotation{background-position:-55px 5px}#diva-canvas-buttons .rotation:hover,#diva-canvas-buttons .rotation.clicked{background-position:-55px -25px}#diva-canvas-buttons .zoom{background-position:-85px 5px}#diva-canvas-buttons .zoom:hover,#diva-canvas-buttons .zoom.clicked{background-position:-85px -25px}#diva-canvas-buttons .red{background-position:-115px 5px}#diva-canvas-buttons .red:hover,#diva-canvas-buttons .red.clicked{background-position:-115px -25px}#diva-canvas-buttons .green{background-position:-145px 5px}#diva-canvas-buttons .green:hover,#diva-canvas-buttons .green.clicked{background-position:-145px -25px}#diva-canvas-buttons .blue{background-position:-175px 5px}#diva-canvas-buttons .blue:hover,#diva-canvas-buttons .blue.clicked{background-position:-175px -25px}#diva-canvas-pane{background:#ddd;padding-bottom:10px}#diva-canvas-pane p{margin-left:10px;padding-top:10px}#diva-canvas-pane p .link{cursor:pointer}#diva-canvas-pane p .link:hover{text-decoration:underline}#diva-canvas-mode{text-transform:capitalize}#diva-canvas-slider{width:188px;margin:0 auto;display:block}#diva-canvas-slider .handle{margin-left:-6px}#diva-canvas-minimap{height:210px;width:210px;cursor:crosshair;margin-bottom:10px;background:#000}#diva-canvas{position:absolute;left:0;right:0;margin:0 auto;z-index:107;cursor:url("../img/openhand.cur"),pointer}#diva-map-viewbox{border:2px solid #99bbe8;position:absolute;top:10px;left:10px;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none}.overflow-hidden{overflow:hidden !important}#diva-canvas-wrapper{z-index:106;position:absolute;top:0;left:0;bottom:0;right:0;overflow:scroll}.canvas-throbber{z-index:110;position:fixed}.diva-download-icon{background:url('../img/plugins/download.png') no-repeat;background-position:left center}.diva-download-icon:hover{background-position:-25px center} +.sidenav{width:250px;-ms-transform:translate(-250px, 0);transform:translate(-250px, 0);transition:transform 300ms ease-in-out;display:none;position:absolute;top:0;bottom:0;height:100%;overflow:auto;box-shadow:0 3px 9px rgba(0,0,0,0.5);z-index:1050;background:#fff}.sidenav.in{-ms-transform:translate(0, 0);transform:translate(0, 0)}.sidenav.in,.sidenav.sliding{display:block}.sidenav-animating{overflow:hidden}.sidenav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.sidenav-backdrop.fade{filter:alpha(opacity=0);opacity:0}.sidenav-backdrop.in{filter:alpha(opacity=50);opacity:.5}pre.preformatted-text{border:inherit;background:none;padding:0;white-space:pre-wrap;word-break:normal;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}.no-js-message .container,.no-js-message .logos{padding-top:25px}.no-js-message .logos{max-width:60%}#manuscript-info-target{float:right}#manuscript-info-target .btn-sm{padding:5px 10px}.manuscript-info-sidenav-container .sidenav{width:350px;right:0;-ms-transform:translate(350px, 0);transform:translate(350px, 0)}.manuscript-info-sidenav-container .sidenav.in{-ms-transform:translate(0, 0);transform:translate(0, 0)}.manuscript-info{padding:0 15px}.manuscript-info dl{margin-bottom:0}#manuscript-nav-container{margin-top:-1px;margin-left:-1px}.cantus-container{width:100%;padding:0 30px 0 30px;overflow:hidden}.result-list>thead>tr>th{white-space:nowrap;overflow:hidden}.result-list>thead>tr>th a{color:inherit}.result-list>tbody>tr>td{border-top:0}.full-result-record .content-enter,.full-result-record .content-exit{overflow:hidden;min-height:0}.full-result-record .content-enter{transition:max-height 600ms cubic-bezier(0.77, 0, 0.175, 1),padding 200ms}.full-result-record .content-exit{transition:max-height 600ms cubic-bezier(0.77, 0, 0.175, 1),padding 200ms 400ms}.full-result-record .content-enter,.full-result-record .content-exit.content-exit-active{max-height:0}.full-result-record .content-enter.content-enter-active,.full-result-record .content-exit{max-height:900px}.full-result-record .content-enter:not(.content-enter-active),.full-result-record .content-exit.content-exit-active{padding-top:0;padding-bottom:0}.full-result-record-content.well{padding-bottom:0}.result-table-wrapper{overflow:auto;min-height:200px}html.supports-no-flexbox .result-table-wrapper{max-height:500px}.caret.caret-reversed{content:"";border-top:0;border-bottom:4px solid}html.supports-flexbox .propagate-height{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-positive:1;flex-grow:1}html.supports-flexbox .tab-content>.propagate-height.tab-pane{display:none}html.supports-flexbox .tab-content>.propagate-height.tab-pane.active{display:-ms-flexbox;display:flex}body{overflow:hidden}body.propagate-height{height:100vh}html.supports-flexbox .manuscript-columns.propagate-height{-ms-flex-direction:row;flex-direction:row}html.supports-no-flexbox .manuscript-columns>*{float:left}.manuscript-columns>*{width:50%}@media (min-width: 1200px){.manuscript-columns>:first-child{width:60%}.manuscript-columns>:last-child{width:40%}}#manuscript-data-container{position:relative}html.supports-no-flexbox #manuscript-data-container{height:650px}#manuscript-data-container .resizer{position:absolute;cursor:col-resize;height:100%;width:10px;background-color:transparent;z-index:1000}#manuscript-data-container .resizer .prong{position:relative;top:45%;float:left;margin-left:3px;height:25px;width:2px;box-shadow:0 1px 3px rgba(0,0,0,0.05);background-color:#bbb}#manuscript-data-container .resizer .prong+.prong{margin-left:1px}.dragging-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.dragging-overlay.col-resize-cursor{cursor:col-resize}.diva-page-nav{padding-right:15px}.diva-tools{margin-top:0;padding:20px 15px;min-height:70px;border-right:1px solid #ddd;border-bottom:1px solid #ddd}.diva-tools .button{border-color:#DADADA;background-color:#E7E7E7;height:30px}.diva-tools .button:hover{border-color:#BBB;background-color:#D3D3D3}.diva-tools .diva-buttons-label,.diva-tools .diva-page-label{padding:5px 10px !important;line-height:1.5 !important}.diva-tools .diva-tools-left .diva-buttons-label{clear:initial}.diva-tools.diva-fullscreen-tools .diva-tools-left .diva-buttons-label{clear:both}.diva-tools.diva-fullscreen-tools{width:auto;min-width:260px;height:120px;padding:10px}.diva-tools.diva-fullscreen-tools .diva-buttons-label,.diva-tools.diva-fullscreen-tools .diva-page-label,.diva-tools.diva-fullscreen-tools .diva-page-nav{padding-left:0 !important;padding-right:0 !important}.diva-tools.diva-fullscreen-tools #manuscript-info-target{display:none}#toolbar-row .diva-page-nav{line-height:1.5}#toolbar-row .diva-page-nav .diva-input{width:100%;padding-top:5px;line-height:1.5}#toolbar-row .diva-page-nav .input-group{width:90px}.diva-outer{border:none;border-right:1px solid #ddd}html.supports-flexbox .diva-outer{height:100%}.diva-outer.diva-fullscreen{z-index:1050}.diva-popup,.diva-tools.diva-fullscreen-tools{z-index:1051}#diva-canvas-backdrop{z-index:1055}#diva-canvas-wrapper{z-index:1056}#diva-canvas{z-index:1057}#diva-canvas-tools{z-index:1058}#diva-canvas-toolbar div{z-index:1059}.canvas-throbber{z-index:1060}.search-input{padding-left:15px}html.supports-flexbox .search-input-group{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}html.supports-flexbox .search-input{-ms-flex-positive:1;flex-grow:1}html.supports-no-flexbox .search-input-group>*{float:left}html.supports-no-flexbox .search-input{min-width:100px;max-width:300px}#menu-sidenav .sidenav a{padding-left:40px}#menu-sidenav .nav li>a{color:#333}.sidenav-brand{display:block;margin-bottom:22px;color:#333}.sidenav-brand:hover,.sidenav-brand:active,.sidenav-brand.active{text-decoration:none;color:#333;background-color:#eee}.navbar-default .navbar-brand,.sidenav-brand{height:50px;padding:15px 40px 15px 15px;font-size:20px;line-height:20px}.navbar-default .navbar-brand a,.navbar-default .navbar-brand a:hover,.navbar-default .navbar-brand a:focus,.sidenav-brand a,.sidenav-brand a:hover,.sidenav-brand a:focus{color:inherit;text-decoration:none}.drop-menu{font-size:22px}.navbar-menu .dropdown-content{display:none;position:absolute;background-color:#333;min-width:150px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1}.navbar-menu .dropdown-content a{float:none;color:white;font-size:14px;padding:12px 16px;text-decoration:none;display:block;text-align:left}.navbar-menu .dropdown-content a:hover{background-color:#555}.navbar-menu:hover .dropdown-content{top:51px;display:block}@media only screen and (max-width: 768px){.navbar-collapse{display:none}.navbar-menu{position:absolute;margin:auto;display:inline}.navbar-header{position:fixed;left:51px;display:inline}.navbar-menu .dropdown-content{min-width:150px}.navbar-fixed-top{height:51px}.counter{display:none}}.secondary-brand-component::before{content:"›";padding-right:15px;padding-left:15px}@media (max-width: 767px){.primary-brand-component{display:none}.no-subhead .primary-brand-component,html.no-js .primary-brand-component{display:block}.secondary-brand-component{display:block;max-width:70vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.secondary-brand-component::before{display:none}}.navbar-default .navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-toggle{display:block;float:left;margin-right:0;margin-left:15px;padding-top:11px;padding-bottom:11px}@media (min-width: 768px){.navbar-toggle{margin-right:15px;margin-left:0}}html.no-js .navbar-toggle{display:none}html.js .navbar-nav{display:none}@media (min-width: 992px){html.js .navbar-nav{display:block}html.js .navbar-toggle{display:none}}@media (max-width: 767px){html.no-js .navbar-collapse{display:block}}.neume-images img{background:#ccc}.neume-gallery-entry{transition:border-color 0.2s;float:left;max-width:100px;min-width:90px;margin:5px;border:1px solid #ddd;padding:5px;color:#222}.neume-gallery-entry:hover,.neume-gallery-entry:focus{text-decoration:none;border-color:#4b9fff;color:#222}.neume-gallery-entry .exemplar{height:75px;margin:4px}.neume-gallery-entry .exemplar img{display:block;margin:auto;max-height:75px;max-width:75px}.neume-gallery-entry .caption{text-align:center;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word}.bg-success{background:#61c185}.bg-warning{background:#e7e185}.close{color:#000000}.close :hover{color:#c2342e}.glyph-image-container{float:left}.glyph-image-outline{padding:5px;border:1px solid #aaaaaa}.glyph-image{width:100%;min-height:50px}#content{padding-top:70px}#upper{width:75%;height:30px;top:50px;right:0;background-color:#cbcbcb;position:absolute;text-align:center}.column{width:20%;display:inline-block;text-align:center;padding-top:7px;font-size:12px}#left{float:left;width:25%;height:100%;overflow-y:scroll;background-color:#efefef;position:absolute;top:50px;left:0;padding-top:50px}.edit-button{width:35%;height:100%;background-color:#cbcbcb;margin-left:10px;margin-right:10px;border:none}.edit-button:hover{background-color:#ababab}#left1{float:left;width:25%;height:50%;overflow-y:scroll;background-color:#efefef;position:absolute;left:0;top:0;padding-top:45px;resize:both}#left2{float:left;width:25%;height:50%;overflow-y:scroll;background-color:#efefef;position:absolute;border-top:1px solid #444444;bottom:0;left:0}#right{float:left;overflow-y:scroll;height:100%;width:75%;position:absolute;top:0;right:0;padding-top:50px;border-left:1px solid #444444}#collapse-pane{display:inline-block;height:4%;width:75%;position:absolute;top:81px;left:25%}.coll-btn{float:left;background-color:white;height:95%;width:17%;border-top:1px solid #444444;border-left:1px solid #444444}.coll-btn:hover{background-color:#cbcbcb}.glyph-zoom{float:right;z-index:1;height:32px;width:32px;font-size:1.1em;text-align:center;line-height:30px;position:relative;display:inline-block;top:13px;right:10px}.glyph-zoom:hover{background-color:#efefef}.image-zoom{float:right;z-index:1;height:32px;width:32px;font-size:1.1em;text-align:center;line-height:30px;position:fixed;display:inline-block}.image-zoom:hover{background-color:#efefef}#right0{float:left;overflow-y:scroll;height:28%;width:75%;position:absolute;top:125px;right:0;resize:vertical;border-left:1px solid #474747}#right1{float:left;overflow-y:scroll;height:31%;width:75%;position:absolute;top:350px;right:0;border-top:1px solid #444444;border-left:1px solid #444444;resize:vertical}#right2{float:left;overflow-x:scroll;overflow-y:scroll;height:31%;width:75%;position:absolute;bottom:0;right:0;border-top:1px solid #444444;border-left:1px solid #444444}.preview-background{position:absolute;top:0;left:0}.preview-highlight{background:#ff0000;opacity:0.5;position:absolute} + +/*# sourceMappingURL=classifier.min.css.map */ diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css.map b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css.map new file mode 100644 index 000000000..82334ca43 --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/css/classifier.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.min.css","diva.min.css","styles.css","_sidenav.scss","styles.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;ACAA,SCkBA,YAlB4B,mCAAA,AAKT,+BAAA,uCAiBH,aAEH,kBAEC,MACP,SACG,YAEE,cACE,qCAGY,aACb,eAGG,CAAA,YApBR,8BAJW,AAIX,yBAJW,CAAA,6BA0BR,aACM,CAAA,mBAKjB,eACc,CAAA,kBAMd,eACc,MACP,QACE,SACC,OACF,aACK,qBACS,CAAA,uBAEL,wBACL,SACR,CAAO,qBAEM,yBACL,UACD,CAAE,sBCjBV,eACS,gBACI,UAEL,qBAEM,kBACD,oBAGC,kBACF,oBACE,aACN,CAAA,gDAG+B,gBACzB,CAAA,sBAGF,aACA,CAAA,wBAGf,WACW,CAAA,gCAIP,gBACa,CAAA,4CAIkB,YACD,QD9ErB,kCAAA,AACM,6BAAA,CAAA,+CC4EwB,8BDvExB,ACuEwB,yBDvExB,CAAA,iBC2EnB,cACa,CAAA,oBAET,eACI,CAAa,0BAIrB,gBAEgB,gBACC,CAAA,kBAGjB,WACW,sBACE,eACC,CAAA,yBAIK,mBACE,eACH,CAAA,2BAFG,aAMF,CAAA,yBAIA,YAEX,CAAU,qEAMd,gBACc,YACV,CAAU,mCAGd,yEAC0E,CAAA,kCAG1E,+EACgF,CAAA,yFAInE,YACT,CAAU,0FAId,gBACgB,CAAA,oHAIH,cACE,gBACX,CAAc,iCAIK,gBACvB,CAAc,sBAGlB,cACc,gBACE,CAAA,+CAvHqB,gBA6HjB,CAAA,sBAKd,WACO,aACC,uBACK,CAAA,wCArIe,oBAAA,AA4IjB,aAAA,0BAAA,AACO,sBAAA,oBAAA,AAChB,WAAA,CAAS,8DA9I+C,YAoJ3C,CAAA,qEAER,oBAAA,AACY,YAAA,CAAA,KAMzB,eACc,CAAA,sBAGV,YACQ,CAAA,2DAKH,uBAAA,AACmB,kBAAA,CAAA,+CAxK4B,UA8KrC,CAAA,sBATA,SAgBJ,CAAA,2BAGC,iCACN,SACS,CAAA,gCAGT,SACS,CAAA,CAAA,2BAKnB,iBAEc,CAAA,oDArMuB,YA0MrB,CAAA,oCAGZ,kBACc,kBACF,YACA,WACD,6BACW,YA/NR,CAAA,2CAoOV,kBACc,QACL,WACE,gBACM,YAEL,UACD,sCAEe,qBACJ,CAAA,kDAEhB,eACe,CAAA,kBAM7B,eACc,MAEP,QACE,SACC,OACF,YAzPkB,CAAA,oCA6PrB,iBACW,CAAA,eAIhB,kBACmB,CAAA,YAGnB,aACc,kBACD,gBACG,4BAhRD,4BAAA,CAAA,oBAoRX,qBACkB,yBACI,WACV,CAAA,0BAEP,kBACiB,wBACI,CAAA,6DAIL,4BACR,0BACI,CAAA,iDAKA,aACN,CAAA,uEAE8B,UAC9B,CAAA,kCAIJ,WACA,gBACI,aACH,YACC,CAAA,0JAE8B,0BACrB,0BACC,CAAA,0DAInB,YACa,CAAA,4BAIJ,eAGI,CAAA,wCAEb,WACW,gBACM,eACA,CAAA,yCAGjB,UACW,CAAA,YAIf,YACY,2BAhVG,CAAA,kCAgBmB,WAoUlB,CAAA,4BAKL,YAjVI,CAAA,8CAqVS,YACX,CAAA,sBAGb,YAtVqB,CAAA,qBA0VrB,YACa,CAAA,aAGb,YACa,CAAA,mBAGb,YACa,CAAA,yBAGQ,YACR,CAAA,iBAGb,YACa,CAAA,cAGb,iBACkB,CAAA,0CAId,oBAAA,AACa,aAAA,uBAAA,AACO,kBAAA,CAAA,oCAGpB,oBAAA,AACI,WAAA,CAAS,+CAKM,UACR,CAAA,uCAGX,gBACe,eACA,CAAA,yBAKP,iBACU,CAAA,wBAGX,UACI,CAAA,eAIf,cACa,mBACM,UACR,CAAA,iEAEa,qBACC,WACV,qBACW,CAAA,6CAQK,YACnB,4BACC,eACE,gBACE,CAAA,2KAGA,cACF,oBACU,CAAA,WAIzB,cACe,CAAA,+BAGF,aACA,kBACC,sBACQ,gBACP,4CACkB,SAC7B,CAAO,iCANmB,WASf,YACA,eACI,kBACF,qBACQ,cACR,eACG,CAAA,uCAEf,qBACqB,CAAA,qCAIP,SACV,aACI,CAAA,0CAGe,iBACxB,YACa,CAAA,aAEb,kBACc,YACF,cACC,CAAA,eAEb,eACc,UACJ,cACG,CAAA,+BAEA,eACE,CAAA,kBAEf,WACY,CAAA,SAEZ,YACa,CAAA,CAAA,mCAKS,YACb,mBACM,iBACH,CAAE,0BAIN,yBACR,YACW,CAAE,yEADb,aAKiB,CAAA,2BAIjB,cACa,eAGE,gBACD,uBACK,kBACF,CAAA,mCAGZ,YACU,CAAE,CAAA,iCAKS,iBACb,mBACC,CAAE,eAKpB,cACa,WACF,eAGP,iBACa,iBAEA,mBACC,CAAE,0BAEJ,eAXhB,kBAYsB,aACd,CAAA,CAAA,0BAbR,YAkBe,CAAE,oBAMb,YACW,CAAE,0BAGD,oBACR,aACa,CAAA,uBAGb,YACW,CAAE,CAAA,0BAOT,4BACG,aACE,CAAA,CAAA,kBAIJ,eACC,CAAE,qBAGhB,6BACgB,WACL,gBACI,eACA,WACL,sBAnlBK,YAqlBJ,UACF,CAzmBK,sDA2mBA,qBACW,qBAhmBP,UAkmBL,CA9mBC,+BAinBV,YACY,UACR,CAAM,mCAFD,cAKQ,YACD,gBACI,cACH,CAAE,8BAInB,kBACgB,gBACF,uBACK,oBACJ,CAAA,YAMnB,kBACgB,CAAA,YAGhB,kBACgB,CAAA,OAGhB,aACW,CAAA,cAEP,aA5oBY,CAAA,uBAipBhB,UACS,CAAE,qBAGX,YACW,wBACC,CAAA,aAGZ,WACW,eACG,CAAE,SAGhB,gBACe,CAAE,OAGjB,UACS,YACG,SACH,QACL,yBACkB,kBACR,iBACE,CAAA,QAGhB,UACS,qBACI,kBACG,gBACD,cACF,CAAE,MAGf,WACW,UACF,YACG,kBACI,yBACM,kBACR,SACL,OACL,gBACW,CAAE,aAGjB,UACS,YACG,yBACU,iBACL,kBACC,WACR,CAAE,mBACP,wBACqB,CAAA,OAI1B,WACW,UACF,WACC,kBACM,yBACM,kBACR,OACV,MACA,iBACa,WACP,CAAE,OAGZ,WACW,UACF,WACC,kBACM,yBACM,kBACR,6BACE,SACZ,MACA,CAAA,OAGJ,WACW,kBACK,YACJ,UACH,kBACK,MACV,QACA,iBACa,6BACA,CAAA,eAGjB,qBACa,UACT,UACK,kBACK,SACL,QACL,CAAI,UAGR,WACW,uBACW,WACZ,UACD,6BACO,6BACC,CAAA,gBACZ,wBACqB,CAAA,YAI1B,YACW,UACP,YACQ,WACD,gBACI,kBACC,iBACC,kBACH,qBACD,SACJ,UACA,CAAE,kBACN,wBACqB,CAAA,YAI1B,YACW,UACP,YACQ,WACD,gBACI,kBACC,iBACC,eACH,oBACD,CAAA,kBACR,wBACqB,CAAA,QAI1B,WACW,kBACK,WACN,UACD,kBACK,UACL,QACL,gBACQ,6BACK,CAAA,QAGjB,WACW,kBACK,WACN,UACD,kBACK,UACL,QACL,6BACY,8BACC,eACL,CAAA,QAGZ,WACW,kBACK,kBACA,WACN,UACD,kBACK,SACV,QACA,6BACY,6BACC,CAAA,oBAGjB,kBACc,MACV,MACA,CAAA,mBAGJ,mBACgB,YACL,iBACG,CAAA","file":"classifier.min.css","sourcesContent":["@import url(\"//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700\");/*!\n * Bootswatch v3.1.1+1\n * Homepage: http://bootswatch.com\n * Copyright 2012-2014 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*//*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=\"checkbox\"],input[type=\"radio\"]{box-sizing:border-box;padding:0}input[type=\"number\"]::-webkit-inner-spin-button,input[type=\"number\"]::-webkit-outer-spin-button{height:auto}input[type=\"search\"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=\"search\"]::-webkit-search-cancel-button,input[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"javascript:\"]:after,a[href^=\"#\"]:after{content:\"\"}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.table td,.table th{background-color:#fff !important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.42857143;color:#222222;background-color:#ffffff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#c2342e;text-decoration:none}a:hover,a:focus{color:#84231f;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:0}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #dddddd}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:\"Open Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-weight:300;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999999}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:39px}h2,.h2{font-size:32px}h3,.h3{font-size:26px}h4,.h4{font-size:19px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:200;line-height:1.4}@media (min-width:768px){.lead{font-size:22.5px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999999}.text-primary{color:#c2342e}a.text-primary:hover{color:#992924}.text-success{color:#43ac6a}a.text-success:hover{color:#358753}.text-info{color:#5bc0de}a.text-info:hover{color:#31b0d5}.text-warning{color:#e99002}a.text-warning:hover{color:#b67102}.text-danger{color:#f04124}a.text-danger:hover{color:#d32a0e}.bg-primary{color:#fff;background-color:#c2342e}a.bg-primary:hover{background-color:#992924}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid #dddddd}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #dddddd}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#6f6f6f}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\\2014 \\00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #dddddd;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\\00A0 \\2014'}blockquote:before,blockquote:after{content:\"\"}address{margin-bottom:21px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,\"Courier New\",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:0}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:0;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333333;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:0}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0%}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:0%}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:0%}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:0%}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:0%}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:0%}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:0%}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:0%}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:21px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #dddddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #dddddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #dddddd}.table .table{background-color:#ffffff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=\"col-\"]{position:static;float:none;display:table-column}table td[class*=\"col-\"],table th[class*=\"col-\"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #dddddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type=\"search\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=\"radio\"],input[type=\"checkbox\"]{margin:4px 0 0;margin-top:1px \\9;line-height:normal}input[type=\"file\"]{display:block}input[type=\"range\"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=\"file\"]:focus,input[type=\"radio\"]:focus,input[type=\"checkbox\"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:15px;line-height:1.42857143;color:#6f6f6f}.form-control{display:block;width:100%;height:35px;padding:6px 12px;font-size:15px;line-height:1.42857143;color:#6f6f6f;background-color:#ffffff;background-image:none;border:1px solid #cccccc;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999999;opacity:1}.form-control:-ms-input-placeholder{color:#999999}.form-control::-webkit-input-placeholder{color:#999999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eeeeee;opacity:1}textarea.form-control{height:auto}input[type=\"search\"]{-webkit-appearance:none}input[type=\"date\"]{line-height:35px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:21px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:normal;cursor:pointer}.radio input[type=\"radio\"],.radio-inline input[type=\"radio\"],.checkbox input[type=\"checkbox\"],.checkbox-inline input[type=\"checkbox\"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=\"radio\"][disabled],input[type=\"checkbox\"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=\"radio\"],fieldset[disabled] input[type=\"checkbox\"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:48px;padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}select.input-lg{height:48px;line-height:48px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:43.75px}.has-feedback .form-control-feedback{position:absolute;top:26px;right:0;display:block;width:35px;height:35px;line-height:35px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#43ac6a}.has-success .form-control{border-color:#43ac6a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#358753;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #85d0a1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #85d0a1}.has-success .input-group-addon{color:#43ac6a;border-color:#43ac6a;background-color:#dff0d8}.has-success .form-control-feedback{color:#43ac6a}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#e99002}.has-warning .form-control{border-color:#e99002;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#b67102;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #febc53;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #febc53}.has-warning .input-group-addon{color:#e99002;border-color:#e99002;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#e99002}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#f04124}.has-error .form-control{border-color:#f04124;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#d32a0e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f79483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f79483}.has-error .input-group-addon{color:#f04124;border-color:#f04124;background-color:#f2dede}.has-error .form-control-feedback{color:#f04124}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#626262}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=\"radio\"],.form-inline .checkbox input[type=\"checkbox\"]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:28px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:15px;line-height:1.42857143;border-radius:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333333;background-color:#e7e7e7;border-color:#dadada}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333333;background-color:#d3d3d3;border-color:#bbbbbb}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e7e7e7;border-color:#dadada}.btn-default .badge{color:#e7e7e7;background-color:#333333}.btn-primary{color:#ffffff;background-color:#c2342e;border-color:#ad2e29}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#ffffff;background-color:#a12b26;border-color:#7c211d}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#c2342e;border-color:#ad2e29}.btn-primary .badge{color:#c2342e;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#43ac6a;border-color:#3c9a5f}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#ffffff;background-color:#388f58;border-color:#2b6e44}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#43ac6a;border-color:#3c9a5f}.btn-success .badge{color:#43ac6a;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#ffffff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#e99002;border-color:#d08002}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#ffffff;background-color:#c17702;border-color:#935b01}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#e99002;border-color:#d08002}.btn-warning .badge{color:#e99002;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#f04124;border-color:#ea2f10}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#ffffff;background-color:#dc2c0f;border-color:#b1240c}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#f04124;border-color:#ea2f10}.btn-danger .badge{color:#f04124;background-color:#ffffff}.btn-link{color:#c2342e;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#84231f;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:0}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=\"submit\"].btn-block,input[type=\"reset\"].btn-block,input[type=\"button\"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\2a\"}.glyphicon-plus:before{content:\"\\2b\"}.glyphicon-euro:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:15px;background-color:#ffffff;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);border-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:rgba(0,0,0,0.2)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#555555;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#eeeeee}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#c2342e}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:\"\"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:none}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=\"buttons\"]>.btn>input[type=\"radio\"],[data-toggle=\"buttons\"]>.btn>input[type=\"checkbox\"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=\"col-\"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:48px;padding:10px 16px;font-size:19px;line-height:1.33;border-radius:0}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:48px;line-height:48px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:0}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:15px;font-weight:normal;line-height:1;color:#6f6f6f;text-align:center;background-color:#eeeeee;border:1px solid #cccccc;border-radius:0}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:0}.input-group-addon.input-lg{padding:10px 16px;font-size:19px;border-radius:0}.input-group-addon input[type=\"radio\"],.input-group-addon input[type=\"checkbox\"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee}.nav>li.disabled>a{color:#999999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eeeeee;border-color:#c2342e}.nav .nav-divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #dddddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:0 0 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#6f6f6f;background-color:#ffffff;border:1px solid #dddddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #dddddd;border-radius:0 0 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#ffffff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#c2342e}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #dddddd;border-radius:0 0 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#ffffff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:45px;margin-bottom:21px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:0}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:12px 15px;font-size:19px;line-height:21px;height:45px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:5.5px;margin-bottom:5.5px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:0}.navbar-toggle:focus{outline:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:6px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:21px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:12px;padding-bottom:12px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:5px;margin-bottom:5px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=\"radio\"],.navbar-form .checkbox input[type=\"checkbox\"]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:5px;margin-bottom:5px}.navbar-btn.btn-sm{margin-top:7.5px;margin-bottom:7.5px}.navbar-btn.btn-xs{margin-top:11.5px;margin-bottom:11.5px}.navbar-text{margin-top:12px;margin-bottom:12px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#333333;border-color:#222222}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-text{color:#ffffff}.navbar-default .navbar-nav>li>a{color:#ffffff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:transparent}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:transparent}.navbar-default .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#222222}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#272727;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#272727}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-link{color:#ffffff}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-inverse{background-color:#c2342e;border-color:#992924}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-text{color:#ffffff}.navbar-inverse .navbar-nav>li>a{color:#ffffff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:transparent}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:transparent}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#a52c27}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#992924;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#992924}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444444;background-color:transparent}}.navbar-inverse .navbar-link{color:#ffffff}.navbar-inverse .navbar-link:hover{color:#ffffff}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#f5f5f5;border-radius:0}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:\"/\\00a0\";padding:0 5px;color:#999999}.breadcrumb>.active{color:#333333}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:0}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#c2342e;background-color:transparent;border:1px solid transparent;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#84231f;background-color:#eeeeee;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#ffffff;background-color:#c2342e;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999999;background-color:#ffffff;border-color:transparent;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:19px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:0;border-top-left-radius:0}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:0;border-top-right-radius:0}.pager{padding-left:0;margin:21px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:transparent;border:1px solid transparent;border-radius:3px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eeeeee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;background-color:transparent;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#c2342e}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#992924}.label-success{background-color:#43ac6a}.label-success[href]:hover,.label-success[href]:focus{background-color:#358753}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#e99002}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#b67102}.label-danger{background-color:#f04124}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d32a0e}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#777777;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#e7e7e7;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#c2342e;background-color:#ffffff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#fafafa}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.container .jumbotron{border-radius:0}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:67.5px}}.thumbnail{display:block;padding:4px;margin-bottom:21px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:0;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#c2342e}.thumbnail .caption{padding:9px;color:#222222}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:0}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#43ac6a;border-color:#3c9a5f;color:#ffffff}.alert-success hr{border-top-color:#358753}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#5bc0de;border-color:#3db5d8;color:#ffffff}.alert-info hr{border-top-color:#2aabd2}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#e99002;border-color:#d08002;color:#ffffff}.alert-warning hr{border-top-color:#b67102}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#f04124;border-color:#ea2f10;color:#ffffff}.alert-danger hr{border-top-color:#d32a0e}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:21px;margin-bottom:21px;background-color:#f5f5f5;border-radius:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:21px;color:#ffffff;text-align:center;background-color:#c2342e;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#43ac6a}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#e99002}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#f04124}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#ffffff;border:1px solid #dddddd}.list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555555}a.list-group-item .list-group-item-heading{color:#333333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#c2342e;border-color:#c2342e}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#f2cbca}.list-group-item-success{color:#43ac6a;background-color:#dff0d8}a.list-group-item-success{color:#43ac6a}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#43ac6a;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#43ac6a;border-color:#43ac6a}.list-group-item-info{color:#5bc0de;background-color:#d9edf7}a.list-group-item-info{color:#5bc0de}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#5bc0de;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.list-group-item-warning{color:#e99002;background-color:#fcf8e3}a.list-group-item-warning{color:#e99002}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#e99002;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#e99002;border-color:#e99002}.list-group-item-danger{color:#f04124;background-color:#f2dede}a.list-group-item-danger{color:#f04124}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#f04124;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#f04124;border-color:#f04124}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;background-color:#ffffff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:17px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #dddddd;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #dddddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.panel-group .panel{margin-bottom:0;border-radius:0;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #dddddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #dddddd}.panel-default{border-color:#dddddd}.panel-default>.panel-heading{color:#333333;background-color:#f5f5f5;border-color:#dddddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#dddddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#dddddd}.panel-primary{border-color:#c2342e}.panel-primary>.panel-heading{color:#ffffff;background-color:#c2342e;border-color:#c2342e}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#c2342e}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#c2342e}.panel-success{border-color:#3c9a5f}.panel-success>.panel-heading{color:#ffffff;background-color:#43ac6a;border-color:#3c9a5f}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#3c9a5f}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3c9a5f}.panel-info{border-color:#3db5d8}.panel-info>.panel-heading{color:#ffffff;background-color:#5bc0de;border-color:#3db5d8}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#3db5d8}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3db5d8}.panel-warning{border-color:#d08002}.panel-warning>.panel-heading{color:#ffffff;background-color:#e99002;border-color:#d08002}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#d08002}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d08002}.panel-danger{border-color:#ea2f10}.panel-danger>.panel-heading{color:#ffffff;background-color:#f04124;border-color:#ea2f10}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ea2f10}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ea2f10}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fafafa;border:1px solid #e8e8e8;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:0}.well-sm{padding:9px;border-radius:0}.close{float:right;font-size:22.5px;font-weight:bold;line-height:1;color:#ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#ffffff;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#ffffff;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#333333;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#333333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333333}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#333333}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#333333}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#333333;background-clip:padding-box;border:1px solid #333333;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:15px;font-weight:normal;line-height:18px;background-color:#333333;border-bottom:1px solid #262626;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:\"\"}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#000000;border-top-color:rgba(0,0,0,0.05);bottom:-11px}.popover.top>.arrow:after{content:\" \";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#333333}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#000000;border-right-color:rgba(0,0,0,0.05)}.popover.right>.arrow:after{content:\" \";left:1px;bottom:-10px;border-left-width:0;border-right-color:#333333}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#000000;border-bottom-color:rgba(0,0,0,0.05);top:-11px}.popover.bottom>.arrow:after{content:\" \";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#333333}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#000000;border-left-color:rgba(0,0,0,0.05)}.popover.left>.arrow:after{content:\" \";right:1px;border-right-width:0;border-left-color:#333333;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.5) 0), color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.0001) 0), color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:none;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\\2039'}.carousel-control .icon-next:before{content:'\\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \\9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:\" \";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}@media print{.hidden-print{display:none !important}}table a:hover,table a:focus{color:#84231f;background:#eeeeee;text-decoration:none}.navbar{border:none;font-size:13px;font-weight:300}.navbar .navbar-toggle:hover .icon-bar{background-color:#b3b3b3}.navbar-collapse{border-top-color:rgba(0,0,0,0.2);-webkit-box-shadow:none;box-shadow:none}.navbar .btn{padding-top:6px;padding-bottom:6px}.navbar .dropdown-menu{border:none}.navbar .dropdown-menu>li>a,.navbar .dropdown-menu>li>a:focus{background-color:transparent;font-size:13px;font-weight:300}.navbar .dropdown-header{color:rgba(255,255,255,0.5)}.navbar-default .dropdown-menu{background-color:#333333}.navbar-default .dropdown-menu>li>a,.navbar-default .dropdown-menu>li>a:focus{color:#ffffff}.navbar-default .dropdown-menu>li>a:hover,.navbar-default .dropdown-menu>.active>a,.navbar-default .dropdown-menu>.active>a:hover{background-color:#272727}.navbar-inverse .dropdown-menu{background-color:#c2342e}.navbar-inverse .dropdown-menu>li>a,.navbar-inverse .dropdown-menu>li>a:focus{color:#ffffff}.navbar-inverse .dropdown-menu>li>a:hover,.navbar-inverse .dropdown-menu>.active>a,.navbar-inverse .dropdown-menu>.active>a:hover{background-color:#992924}.btn-lg{padding:16px 32px}.btn-sm{padding:8px 16px}.btn-xs{padding:4px 8px}.btn-group .btn~.dropdown-toggle{padding-left:16px;padding-right:16px}.btn-group .dropdown-menu{border-top-width:0}.btn-group.dropup .dropdown-menu{border-top-width:1px;border-bottom-width:0;margin-bottom:0}.btn-group .dropdown-toggle.btn-default~.dropdown-menu{background-color:#e7e7e7;border-color:#dadada}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a{color:#333333}.btn-group .dropdown-toggle.btn-default~.dropdown-menu>li>a:hover{background-color:#d3d3d3}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu{background-color:#c2342e;border-color:#ad2e29}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-primary~.dropdown-menu>li>a:hover{background-color:#a12b26}.btn-group .dropdown-toggle.btn-success~.dropdown-menu{background-color:#43ac6a;border-color:#3c9a5f}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-success~.dropdown-menu>li>a:hover{background-color:#388f58}.btn-group .dropdown-toggle.btn-info~.dropdown-menu{background-color:#5bc0de;border-color:#46b8da}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-info~.dropdown-menu>li>a:hover{background-color:#39b3d7}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu{background-color:#e99002;border-color:#d08002}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-warning~.dropdown-menu>li>a:hover{background-color:#c17702}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu{background-color:#f04124;border-color:#ea2f10}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a{color:#ffffff}.btn-group .dropdown-toggle.btn-danger~.dropdown-menu>li>a:hover{background-color:#dc2c0f}.lead{color:#6f6f6f}cite{font-style:italic}blockquote{border-left-width:1px;color:#6f6f6f}blockquote.pull-right{border-right-width:1px}blockquote small{font-size:12px;font-weight:300}input,.form-control{padding:7px}label,.control-label,.help-block,.checkbox,.radio{font-size:12px;font-weight:normal}.input-group-addon,.input-group-btn .btn{padding:8px 14px;font-size:12px}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:transparent}.nav-tabs>li>a{background-color:#e7e7e7;color:#222222}.nav-tabs>li>a:hover{color:#c2342e}.nav-tabs .caret{border-top-color:#222222;border-bottom-color:#222222}.nav-pills{font-weight:300}.breadcrumb{border:1px solid #dddddd;border-radius:3px;font-size:10px;font-weight:300;text-transform:uppercase}.pagination{font-size:12px;font-weight:300;color:#999999}.pagination>li>a,.pagination>li>span{margin-left:4px;color:#999999}.pagination>.active>a,.pagination>.active>span{color:#fff}.pagination>li>a,.pagination>li:first-child>a,.pagination>li:last-child>a,.pagination>li>span,.pagination>li:first-child>span,.pagination>li:last-child>span{border-radius:3px}.pagination-lg>li>a{padding-left:22px;padding-right:22px}.pagination-sm>li>a{padding:0 5px}.pager{font-size:12px;font-weight:300;color:#999999}.list-group{font-size:12px;font-weight:300}.close{opacity:0.4}.close:hover,.close:focus{opacity:1}.alert{font-weight:300}.alert a,.alert .alert-link{font-weight:normal;color:#fff;text-decoration:underline}.alert .close{color:#fff;text-decoration:none}.alert .close:hover,.alert .close:focus{color:#fff}.label{padding-left:1em;padding-right:1em;border-radius:0;font-weight:300}.label-default{background-color:#e7e7e7;color:#333333}.badge{font-weight:300}.progress{height:22px;padding:2px;background-color:#f6f6f6;border:1px solid #ccc;-webkit-box-shadow:none;box-shadow:none}.dropdown-menu{padding:0;margin-top:0;font-size:12px}.dropdown-menu>li>a{padding:12px 15px}.dropdown-header{padding-left:15px;padding-right:15px;font-size:9px;text-transform:uppercase}.popover{color:#fff;font-size:12px;font-weight:300}.panel-heading,.panel-footer{border-top-right-radius:0;border-top-left-radius:0}.panel-heading:hover,.panel-footer:hover{background:#fcfcfc}.panel-title>a:hover{color:#c2342e;text-decoration:none}",".hidden{display:none}.grab{cursor:url(\"../img/openhand.cur\"),pointer}.grabbing{cursor:url(\"../img/closedhand.cur\"),move !important}.loading{background:url(\"../img/loading.gif\") no-repeat center}.full-width{width:100% !important;max-width:100% !important}.full-height{height:100% !important;max-height:100% !important}.prevent-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.button{cursor:pointer;height:32px;width:32px;background-color:#f1f1f1;background-repeat:no-repeat;background-position:center;border:1px solid #99bbe8}@media screen and (min-device-width:769px){.button:hover{background-color:#fdfdfd}}.diva-title{text-align:center;font-weight:bold;font-size:2em}.diva-tools{margin-top:15px}.diva-tools .diva-tools-left{float:left}.diva-tools .diva-tools-left .diva-slider-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left .diva-zoom-buttons-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left .diva-zoom-out-button{display:none;float:left;background-image:url(\"../img/zoomout.png\")}.diva-tools .diva-tools-left .diva-zoom-in-button{display:none;float:left;background-image:url(\"../img/zoomin.png\");margin-left:-1px}.diva-tools .diva-tools-left .diva-grid-out-button{display:none;float:left;background-image:url(\"../img/zoomout.png\")}.diva-tools .diva-tools-left .diva-grid-in-button{display:none;float:left;background-image:url(\"../img/zoomin.png\");margin-left:-1px}.diva-tools .diva-tools-left .diva-buttons-label{display:none;padding:8px;float:left;clear:left}.diva-tools .diva-tools-left.in-fullscreen{float:left;clear:none}.diva-tools .diva-tools-right{float:right;height:42px}.diva-tools .diva-tools-right .diva-grid-icon{float:right;background-image:url(\"../img/grid.png\")}.diva-tools .diva-tools-right .diva-grid-icon.diva-in-grid{background-image:url(\"../img/document.png\")}.diva-tools .diva-tools-right .diva-link-icon{float:right;background-image:url(\"../img/link.png\")}.diva-tools .diva-tools-right .diva-page-nav{float:left;text-align:right;padding-right:4px;white-space:nowrap;line-height:32px}.diva-tools .diva-tools-right .diva-page-nav .diva-page-label{float:left;padding-top:1px;padding-right:.5em;line-height:32px}.diva-tools .diva-tools-right .diva-page-nav .diva-goto-form{float:right}.diva-tools .diva-tools-right .diva-page-nav .diva-goto-form .diva-input{width:30px;outline:none;margin:0;padding-top:0}.diva-tools.diva-fullscreen-tools{position:fixed;top:0;right:30px;z-index:101;width:230px;height:73px;padding:15px;border:1px solid #ddd;background:#fff;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}.diva-tools.diva-fullscreen-tools .diva-buttons-label{margin-top:5px;padding:0;clear:both}.diva-tools.diva-fullscreen-tools .diva-page-nav{float:none;line-height:1em}.diva-tools.diva-fullscreen-tools .diva-page-nav .diva-goto-form{margin-top:9px}.diva-tools.diva-fullscreen-tools .diva-page-nav .diva-page-label{float:none;clear:both;line-height:1em}.diva-outer{clear:both;background:#f1f1f1;border:1px solid #99bbe8;position:relative;min-height:100px;min-width:200px;height:700px;overflow:auto}.diva-outer .diva-inner{position:relative;overflow:hidden;margin:0 auto}.diva-outer .diva-inner .diva-page{-webkit-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);background:url(\"../img/loading.gif\") no-repeat center;position:absolute}.diva-outer .diva-inner .diva-document-page{-webkit-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 6px 0 rgba(0,0,0,0.5);background:url(\"../img/loading.gif\") no-repeat center;position:absolute;left:0;right:0}.diva-outer .diva-inner .diva-document-page .diva-page-tools{position:absolute;top:-25px;left:0;height:25px;z-index:3}.diva-outer .diva-inner .diva-document-page .diva-page-tools div{display:inline-block;height:25px;width:25px;cursor:pointer}.diva-outer .diva-inner .diva-page-vertical{margin:0 auto;display:inline-block}.diva-outer .diva-inner .diva-page-horizontal{vertical-align:middle;display:inline-block;top:50%;transform:translate(0, -50%);-webkit-transform:translate(0, -50%);-moz-transform:translate(0, -50%);-ms-transform:translate(0, -50%)}.diva-outer .diva-inner .diva-row{position:absolute;width:100%}.diva-outer .diva-inner.diva-grab{cursor:url(\"../img/openhand.cur\"),pointer}.diva-outer .diva-inner.diva-grabbing{cursor:url(\"../img/closedhand.cur\"),move !important}.diva-outer.diva-fullscreen{width:100% !important;max-width:100% !important;height:100% !important;max-height:100% !important;z-index:100;position:fixed !important;top:0;left:0;margin:0;border:0}.diva-fullscreen-icon{background-image:url(\"../img/fullscreen.png\");border-left:0;float:right}.diva-link-popup{font-size:10pt;background:#fff;border:1px solid #ddd;position:absolute;padding:.6em;z-index:101;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}.diva-link-popup input{width:15em}.diva-link-popup input:focus{outline:none}.diva-link-popup.in-fullscreen{top:150px;right:30px}.diva-hide-scrollbar{overflow:hidden !important}.diva-relative-position{position:relative}.zoom-slider{position:relative;top:.6em;display:none;float:left}@media (max-width:480px){.zoom-slider{width:100px}}.grid-slider{position:relative;top:.6em;display:none;float:left}@media (max-width:480px){.grid-slider{width:100px}}.diva-throbber{display:none;position:absolute;width:50px;height:50px;background:url(\"../img/loading.gif\") no-repeat center;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);top:50%;left:50%;margin-left:-25px;margin-top:-25px}.diva-error{position:absolute;width:400px;height:200px;background-color:#fff;border:1px solid #ddd;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);top:50%;left:50%;margin-left:-220px;margin-top:-120px;z-index:120;padding:0 1em}.diva-canvas-icon{background:url('../img/plugins/canvas.png') no-repeat;background-position:left center}.diva-canvas-icon:hover{background-position:-25px center}.diva-canvas-icon.new{background-position:-50px center}.diva-canvas-icon.new:hover{background-position:-75px center}#diva-canvas-backdrop{z-index:105;position:fixed;top:0;left:0;bottom:0;right:0;display:none;background:rgba(50,50,50,0.9)}#diva-canvas-tools{color:#333;position:fixed;top:10px;left:10px;width:230px;z-index:108;background:#fff;padding-bottom:10px;-webkit-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);-moz-box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5);box-shadow:2px 2px 4px 0 rgba(0,0,0,0.5)}#diva-canvas-tools .action-buttons{clear:both;margin-bottom:5px;text-align:right}#diva-canvas-tools .action-buttons a{color:#333;text-decoration:none;background:#f1f1f1;padding:5px;border:1px solid #99bbe8}#diva-canvas-tools .action-buttons a:last-child{border-left:0}#diva-canvas-tools .action-buttons a:hover{background:#fdfdfd}#diva-canvas-toolbar{height:16px;padding:10px;padding-bottom:0}#diva-canvas-toolbar div{height:18px;width:18px;background-repeat:no-repeat;cursor:pointer;z-index:109;display:inline-block;margin-right:5px;background-image:url(\"../img/actions.png\")}#diva-canvas-toolbar span{vertical-align:top;float:right}#diva-canvas-toolwindow{position:relative;margin:10px}#diva-canvas-close:hover{background-position:-20px 0}#diva-canvas-minimise{background-position:-40px 0}#diva-canvas-minimise:hover{background-position:-60px 0}#diva-canvas-buttons div{cursor:pointer;background-image:url(\"../img/plugins/canvas-buttons.png\");background-repeat:no-repeat;width:20px;height:20px;padding:5px;display:inline-block}#diva-canvas-buttons div.clicked{background-color:#ddd}#diva-canvas-buttons .contrast{background-position:5px 5px}#diva-canvas-buttons .contrast:hover,#diva-canvas-buttons .contrast.clicked{background-position:5px -25px}#diva-canvas-buttons .brightness{background-position:-25px 5px}#diva-canvas-buttons .brightness:hover,#diva-canvas-buttons .brightness.clicked{background-position:-25px -25px}#diva-canvas-buttons .rotation{background-position:-55px 5px}#diva-canvas-buttons .rotation:hover,#diva-canvas-buttons .rotation.clicked{background-position:-55px -25px}#diva-canvas-buttons .zoom{background-position:-85px 5px}#diva-canvas-buttons .zoom:hover,#diva-canvas-buttons .zoom.clicked{background-position:-85px -25px}#diva-canvas-buttons .red{background-position:-115px 5px}#diva-canvas-buttons .red:hover,#diva-canvas-buttons .red.clicked{background-position:-115px -25px}#diva-canvas-buttons .green{background-position:-145px 5px}#diva-canvas-buttons .green:hover,#diva-canvas-buttons .green.clicked{background-position:-145px -25px}#diva-canvas-buttons .blue{background-position:-175px 5px}#diva-canvas-buttons .blue:hover,#diva-canvas-buttons .blue.clicked{background-position:-175px -25px}#diva-canvas-pane{background:#ddd;padding-bottom:10px}#diva-canvas-pane p{margin-left:10px;padding-top:10px}#diva-canvas-pane p .link{cursor:pointer}#diva-canvas-pane p .link:hover{text-decoration:underline}#diva-canvas-mode{text-transform:capitalize}#diva-canvas-slider{width:188px;margin:0 auto;display:block}#diva-canvas-slider .handle{margin-left:-6px}#diva-canvas-minimap{height:210px;width:210px;cursor:crosshair;margin-bottom:10px;background:#000}#diva-canvas{position:absolute;left:0;right:0;margin:0 auto;z-index:107;cursor:url(\"../img/openhand.cur\"),pointer}#diva-map-viewbox{border:2px solid #99bbe8;position:absolute;top:10px;left:10px;cursor:crosshair;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none}.overflow-hidden{overflow:hidden !important}#diva-canvas-wrapper{z-index:106;position:absolute;top:0;left:0;bottom:0;right:0;overflow:scroll}.canvas-throbber{z-index:110;position:fixed}.diva-download-icon{background:url('../img/plugins/download.png') no-repeat;background-position:left center}.diva-download-icon:hover{background-position:-25px center}",".sidenav{width:250px;transform:translate(-250px, 0);transition:transform 300ms ease-in-out;display:none;position:absolute;top:0;bottom:0;height:100%;overflow:auto;box-shadow:0 3px 9px rgba(0,0,0,0.5);z-index:1050;background:#fff}.sidenav.in{transform:translate(0, 0)}.sidenav.in,.sidenav.sliding{display:block}.sidenav-animating{overflow:hidden}.sidenav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.sidenav-backdrop.fade{filter:alpha(opacity=0);opacity:0}.sidenav-backdrop.in{filter:alpha(opacity=50);opacity:.5}pre.preformatted-text{border:inherit;background:none;padding:0;white-space:pre-wrap;word-break:normal;font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}.no-js-message .container,.no-js-message .logos{padding-top:25px}.no-js-message .logos{max-width:60%}#manuscript-info-target{float:right}#manuscript-info-target .btn-sm{padding:5px 10px}.manuscript-info-sidenav-container .sidenav{width:350px;right:0;transform:translate(350px, 0)}.manuscript-info-sidenav-container .sidenav.in{transform:translate(0, 0)}.manuscript-info{padding:0 15px}.manuscript-info dl{margin-bottom:0}#manuscript-nav-container{margin-top:-1px;margin-left:-1px}.cantus-container{width:100%;padding:0 30px 0 30px;overflow:hidden}.result-list>thead>tr>th{white-space:nowrap;overflow:hidden}.result-list>thead>tr>th a{color:inherit}.result-list>tbody>tr>td{border-top:0}.full-result-record .content-enter,.full-result-record .content-exit{overflow:hidden;min-height:0}.full-result-record .content-enter{transition:max-height 600ms cubic-bezier(0.77, 0, 0.175, 1),padding 200ms}.full-result-record .content-exit{transition:max-height 600ms cubic-bezier(0.77, 0, 0.175, 1),padding 200ms 400ms}.full-result-record .content-enter,.full-result-record .content-exit.content-exit-active{max-height:0}.full-result-record .content-enter.content-enter-active,.full-result-record .content-exit{max-height:900px}.full-result-record .content-enter:not(.content-enter-active),.full-result-record .content-exit.content-exit-active{padding-top:0;padding-bottom:0}.full-result-record-content.well{padding-bottom:0}.result-table-wrapper{overflow:auto;min-height:200px}html.supports-no-flexbox .result-table-wrapper{max-height:500px}.caret.caret-reversed{content:\"\";border-top:0;border-bottom:4px solid}html.supports-flexbox .propagate-height{display:flex;flex-direction:column;flex-grow:1}html.supports-flexbox .tab-content>.propagate-height.tab-pane{display:none}html.supports-flexbox .tab-content>.propagate-height.tab-pane.active{display:flex}body{overflow:hidden}body.propagate-height{height:100vh}html.supports-flexbox .manuscript-columns.propagate-height{flex-direction:row}html.supports-no-flexbox .manuscript-columns>*{float:left}.manuscript-columns>*{width:50%}@media (min-width: 1200px){.manuscript-columns>:first-child{width:60%}.manuscript-columns>:last-child{width:40%}}#manuscript-data-container{position:relative}html.supports-no-flexbox #manuscript-data-container{height:650px}#manuscript-data-container .resizer{position:absolute;cursor:col-resize;height:100%;width:10px;background-color:transparent;z-index:1000}#manuscript-data-container .resizer .prong{position:relative;top:45%;float:left;margin-left:3px;height:25px;width:2px;box-shadow:0 1px 3px rgba(0,0,0,0.05);background-color:#bbb}#manuscript-data-container .resizer .prong+.prong{margin-left:1px}.dragging-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.dragging-overlay.col-resize-cursor{cursor:col-resize}.diva-page-nav{padding-right:15px}.diva-tools{margin-top:0;padding:20px 15px;min-height:70px;border-right:1px solid #ddd;border-bottom:1px solid #ddd}.diva-tools .button{border-color:#DADADA;background-color:#E7E7E7;height:30px}.diva-tools .button:hover{border-color:#BBB;background-color:#D3D3D3}.diva-tools .diva-buttons-label,.diva-tools .diva-page-label{padding:5px 10px !important;line-height:1.5 !important}.diva-tools .diva-tools-left .diva-buttons-label{clear:initial}.diva-tools.diva-fullscreen-tools .diva-tools-left .diva-buttons-label{clear:both}.diva-tools.diva-fullscreen-tools{width:auto;min-width:260px;height:120px;padding:10px}.diva-tools.diva-fullscreen-tools .diva-buttons-label,.diva-tools.diva-fullscreen-tools .diva-page-label,.diva-tools.diva-fullscreen-tools .diva-page-nav{padding-left:0 !important;padding-right:0 !important}.diva-tools.diva-fullscreen-tools #manuscript-info-target{display:none}#toolbar-row .diva-page-nav{line-height:1.5}#toolbar-row .diva-page-nav .diva-input{width:100%;padding-top:5px;line-height:1.5}#toolbar-row .diva-page-nav .input-group{width:90px}.diva-outer{border:none;border-right:1px solid #ddd}html.supports-flexbox .diva-outer{height:100%}.diva-outer.diva-fullscreen{z-index:1050}.diva-popup,.diva-tools.diva-fullscreen-tools{z-index:1051}#diva-canvas-backdrop{z-index:1055}#diva-canvas-wrapper{z-index:1056}#diva-canvas{z-index:1057}#diva-canvas-tools{z-index:1058}#diva-canvas-toolbar div{z-index:1059}.canvas-throbber{z-index:1060}.search-input{padding-left:15px}html.supports-flexbox .search-input-group{display:flex;flex-direction:row}html.supports-flexbox .search-input{flex-grow:1}html.supports-no-flexbox .search-input-group>*{float:left}html.supports-no-flexbox .search-input{min-width:100px;max-width:300px}#menu-sidenav .sidenav a{padding-left:40px}#menu-sidenav .nav li>a{color:#333}.sidenav-brand{display:block;margin-bottom:22px;color:#333}.sidenav-brand:hover,.sidenav-brand:active,.sidenav-brand.active{text-decoration:none;color:#333;background-color:#eee}.navbar-default .navbar-brand,.sidenav-brand{height:50px;padding:15px 40px 15px 15px;font-size:20px;line-height:20px}.navbar-default .navbar-brand a,.navbar-default .navbar-brand a:hover,.navbar-default .navbar-brand a:focus,.sidenav-brand a,.sidenav-brand a:hover,.sidenav-brand a:focus{color:inherit;text-decoration:none}.drop-menu{font-size:22px}.navbar-menu .dropdown-content{display:none;position:absolute;background-color:#333;min-width:150px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1}.navbar-menu .dropdown-content a{float:none;color:white;font-size:14px;padding:12px 16px;text-decoration:none;display:block;text-align:left}.navbar-menu .dropdown-content a:hover{background-color:#555}.navbar-menu:hover .dropdown-content{top:51px;display:block}@media only screen and (max-width: 768px){.navbar-collapse{display:none}.navbar-menu{position:absolute;margin:auto;display:inline}.navbar-header{position:fixed;left:51px;display:inline}.navbar-menu .dropdown-content{min-width:150px}.navbar-fixed-top{height:51px}.counter{display:none}}.secondary-brand-component::before{content:\"›\";padding-right:15px;padding-left:15px}@media (max-width: 767px){.primary-brand-component{display:none}.no-subhead .primary-brand-component,html.no-js .primary-brand-component{display:block}.secondary-brand-component{display:block;max-width:70vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.secondary-brand-component::before{display:none}}.navbar-default .navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-toggle{display:block;float:left;margin-right:0;margin-left:15px;padding-top:11px;padding-bottom:11px}@media (min-width: 768px){.navbar-toggle{margin-right:15px;margin-left:0}}html.no-js .navbar-toggle{display:none}html.js .navbar-nav{display:none}@media (min-width: 992px){html.js .navbar-nav{display:block}html.js .navbar-toggle{display:none}}@media (max-width: 767px){html.no-js .navbar-collapse{display:block}}.neume-images img{background:#ccc}.neume-gallery-entry{transition:border-color 0.2s;float:left;max-width:100px;min-width:90px;margin:5px;border:1px solid #ddd;padding:5px;color:#222}.neume-gallery-entry:hover,.neume-gallery-entry:focus{text-decoration:none;border-color:#4b9fff;color:#222}.neume-gallery-entry .exemplar{height:75px;margin:4px}.neume-gallery-entry .exemplar img{display:block;margin:auto;max-height:75px;max-width:75px}.neume-gallery-entry .caption{text-align:center;overflow:hidden;text-overflow:ellipsis;word-wrap:break-word}.bg-success{background:#61c185}.bg-warning{background:#e7e185}.close{color:#000000}.close :hover{color:#c2342e}.glyph-image-container{float:left}.glyph-image-outline{padding:5px;border:1px solid #aaaaaa}.glyph-image{width:100%;min-height:50px}#content{padding-top:70px}#upper{width:75%;height:30px;top:50px;right:0;background-color:#cbcbcb;position:absolute;text-align:center}.column{width:20%;display:inline-block;text-align:center;padding-top:7px;font-size:12px}#left{float:left;width:25%;height:100%;overflow-y:scroll;background-color:#efefef;position:absolute;top:50px;left:0;padding-top:50px}.edit-button{width:35%;height:100%;background-color:#cbcbcb;margin-left:10px;margin-right:10px;border:none}.edit-button:hover{background-color:#ababab}#left1{float:left;width:25%;height:50%;overflow-y:scroll;background-color:#efefef;position:absolute;left:0;top:0;padding-top:45px;resize:both}#left2{float:left;width:25%;height:50%;overflow-y:scroll;background-color:#efefef;position:absolute;border-top:1px solid #444444;bottom:0;left:0}#right{float:left;overflow-y:scroll;height:100%;width:75%;position:absolute;top:0;right:0;padding-top:50px;border-left:1px solid #444444}#collapse-pane{display:inline-block;height:4%;width:75%;position:absolute;top:81px;left:25%}.coll-btn{float:left;background-color:white;height:95%;width:17%;border-top:1px solid #444444;border-left:1px solid #444444}.coll-btn:hover{background-color:#cbcbcb}.glyph-zoom{float:right;z-index:1;height:32px;width:32px;font-size:1.1em;text-align:center;line-height:30px;position:relative;display:inline-block;top:13px;right:10px}.glyph-zoom:hover{background-color:#efefef}.image-zoom{float:right;z-index:1;height:32px;width:32px;font-size:1.1em;text-align:center;line-height:30px;position:fixed;display:inline-block}.image-zoom:hover{background-color:#efefef}#right0{float:left;overflow-y:scroll;height:28%;width:75%;position:absolute;top:125px;right:0;resize:vertical;border-left:1px solid #474747}#right1{float:left;overflow-y:scroll;height:31%;width:75%;position:absolute;top:350px;right:0;border-top:1px solid #444444;border-left:1px solid #444444;resize:vertical}#right2{float:left;overflow-x:scroll;overflow-y:scroll;height:31%;width:75%;position:absolute;bottom:0;right:0;border-top:1px solid #444444;border-left:1px solid #444444}.preview-background{position:absolute;top:0;left:0}.preview-highlight{background:#ff0000;opacity:0.5;position:absolute}\n","@mixin sidenav-size($width: 250px, $position: left) {\n width: $width;\n\n // Hold the sidebar just out of view until it's triggered\n @if ($position == left) {\n transform: translate(-$width, 0);\n }\n @else {\n right: 0;\n transform: translate($width, 0);\n }\n\n // Include this rule here as a hack to ensure specificity\n &.in {\n transform: translate(0, 0);\n }\n}\n\n.sidenav {\n // Default width and side\n @include sidenav-size;\n\n transition: transform 300ms ease-in-out;\n\n display: none;\n\n position: absolute;\n top: 0;\n bottom: 0;\n\n height: 100%;\n overflow: auto;\n\n // Copied from the Bootstrap modal settings\n box-shadow: 0 3px 9px rgba(0,0,0,.5);\n z-index: 1050;\n\n // FIXME: use variable?\n background: #fff;\n\n &.in, &.sliding {\n display: block;\n }\n}\n\n// Hide the body's scroll bar while the sidenav enters and exits\n.sidenav-animating {\n overflow: hidden;\n}\n\n// Exactly the same as .modal-backdrop from Bootstrap\n//\n// TODO: use an @extend to achieve this?\n.sidenav-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.sidenav-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.sidenav-backdrop.in {\n filter: alpha(opacity=50);\n opacity: .5;\n}\n","// Hardcode some Bootstrap style variables here since our Bootstrap stuff\n// isn't pre-processed\n\n// Responsive breakpoints\n$screen-sm-min: 768px;\n$screen-md-min: 992px;\n$screen-lg-min: 1200px;\n$grid-float-breakpoint: $screen-sm-min;\n\n// Colors\n$gray-darker: lighten(#000, 13.5%); // #222\n$gray-dark: lighten(#000, 20%); // #333\n$gray: #6f6f6f; // #555\n$gray-light: lighten(#000, 60%); // #999\n$gray-lighter: lighten(#000, 93.5%); // #eee\n\n$brand-primary: #c2342e;\n$brand-success: #43ac6a;\n$brand-info: #5bc0de;\n$brand-warning: #e9df50;\n$brand-danger: #F04124;\n\n$brand-selection: #4b9fff;\n\n//** Global textual link color.\n$link-color: $brand-selection;\n$link-hover-color: darken($link-color, 15%);\n\n// Color used for a lot of borders in the Bootstrap things\n$border-color: #ddd;\n\n$zindex-navbar: 1000;\n$zindex-dropdown: 1000;\n$zindex-popover: 1010;\n$zindex-tooltip: 1030;\n$zindex-navbar-fixed: 1030;\n$zindex-modal-background: 1040;\n$zindex-modal: 1050;\n\n$zindex-diva-fullscreen: $zindex-modal;\n$zindex-diva-canvas: $zindex-diva-fullscreen + 5;\n\n@import \"sidenav\";\n\n@mixin ua-support($modernizr-feature) {\n @at-root html.supports-#{$modernizr-feature} #{&} {\n @content;\n }\n}\n\n// This is textual information, so we want to make it resemble normal text as much as possible\npre.preformatted-text {\n border: inherit;\n background: none;\n\n padding: 0;\n\n white-space: pre-wrap;\n word-break: normal;\n\n // Inherit font properties to match wherever we drop it\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n}\n\n.no-js-message .container, .no-js-message .logos {\n padding-top: 25px;\n}\n\n.no-js-message .logos {\n max-width: 60%;\n}\n\n#manuscript-info-target {\n float: right;\n\n // FIXME: This should actually be the padding for all .btn-sm elements; the Bootstrap button padding was\n // inconsistently tweaked\n .btn-sm {\n padding: 5px 10px;\n }\n}\n\n.manuscript-info-sidenav-container .sidenav {\n @include sidenav-size($width: 350px, $position: right);\n}\n\n.manuscript-info {\n padding: 0 15px;\n\n dl {\n margin-bottom: 0;\n }\n}\n\n#manuscript-nav-container {\n // Subtract 1px from margins so that the borders are flush with the container's\n margin-top: -1px;\n margin-left: -1px;\n}\n\n.cantus-container {\n width: 100%;\n padding: 0 30px 0 30px;\n overflow: hidden;\n}\n\n.result-list {\n > thead > tr > th {\n white-space: nowrap;\n overflow: hidden;\n\n // Make table headers black in the search result list, even though they're links\n a {\n color: inherit;\n }\n }\n\n > tbody > tr > td {\n // Hide the top border since the acts as a delimiter\n border-top: 0;\n }\n}\n\n.full-result-record {\n .content-enter,\n .content-exit {\n overflow: hidden;\n min-height: 0;\n }\n\n .content-enter {\n transition: max-height 600ms cubic-bezier(0.77, 0, 0.175, 1), padding 200ms;\n }\n\n .content-exit {\n transition: max-height 600ms cubic-bezier(0.77, 0, 0.175, 1), padding 200ms 400ms;\n }\n\n .content-enter,\n .content-exit.content-exit-active {\n max-height: 0;\n }\n\n .content-enter.content-enter-active,\n .content-exit {\n max-height: 900px;\n }\n\n .content-enter:not(.content-enter-active),\n .content-exit.content-exit-active {\n padding-top: 0;\n padding-bottom: 0;\n }\n}\n\n.full-result-record-content.well {\n padding-bottom: 0;\n}\n\n.result-table-wrapper {\n overflow: auto;\n min-height: 200px;\n\n // Quick and dirty compat value for when flexbox isn't supported.\n // This is really not very good (it's hard to make this one-size-\n // fits all), but it probably isn't worth spending too much time on.\n @include ua-support(no-flexbox) {\n max-height: 500px;\n }\n}\n\n// Support reversible (i.e. upwards-pointing) carets without setting classes on ancestors\n.caret.caret-reversed {\n content: \"\";\n border-top: 0;\n border-bottom: 4px solid;\n}\n\n// When applied to ancestors of a nested element, this class uses flexbox to set the height\n// of the element to the remaining height of the viewport.\n.propagate-height {\n @include ua-support(flexbox) {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n }\n\n // Workaround for Bootstrap tabs\n .tab-content > &.tab-pane {\n @include ua-support(flexbox) {\n display: none;\n\n &.active {\n display: flex;\n }\n }\n }\n}\n\nbody {\n overflow: hidden;\n}\n\nbody.propagate-height {\n height: 100vh;\n}\n\n.manuscript-columns {\n @include ua-support(flexbox) {\n &.propagate-height {\n flex-direction: row;\n }\n }\n\n @include ua-support(no-flexbox) {\n > * {\n float: left;\n }\n }\n\n // Distribute width to the columns equally by default,\n // allocating more for the Diva column on large screens\n > * {\n width: 50%;\n }\n\n @media (min-width: $screen-lg-min) {\n > :first-child {\n width: 60%;\n }\n\n > :last-child {\n width: 40%;\n }\n }\n}\n\n#manuscript-data-container {\n // Relative-position the container so that percentage-based dimensions are calculated relative to it\n position: relative;\n\n // Fallback height for when we don't have flexbox\n @include ua-support(no-flexbox) {\n // Magic number to approximate Diva's value\n height: 650px;\n }\n\n .resizer {\n position: absolute;\n cursor: col-resize;\n height: 100%;\n width: 10px;\n background-color: transparent;\n\n // Kind of arbitrarily slot this into the Bootstrap hierarchy\n z-index: $zindex-dropdown;\n\n .prong {\n position: relative;\n top: 45%;\n float: left;\n margin-left: 3px;\n\n height: 25px;\n width: 2px;\n\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n background-color: #bbb;\n\n + .prong {\n margin-left: 1px;\n }\n }\n }\n}\n\n.dragging-overlay {\n position: fixed;\n\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n z-index: $zindex-modal-background;\n\n &.col-resize-cursor {\n cursor: col-resize;\n }\n}\n\n.diva-page-nav {\n padding-right: 15px;\n}\n\n.diva-tools {\n margin-top: 0;\n padding: 20px 15px;\n min-height: 70px;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n\n .button {\n border-color: #DADADA;\n background-color: #E7E7E7;\n height: 30px;\n\n &:hover {\n border-color: #BBB;\n background-color: #D3D3D3;\n }\n }\n\n .diva-buttons-label, .diva-page-label {\n padding: 5px 10px !important;\n line-height: 1.5 !important;\n }\n\n // Stopgap to stop the \"Zoom level\" control from falling below the row\n // FIXME(wabain): Find something more reliable for this after updating if necessary\n .diva-tools-left .diva-buttons-label {\n clear: initial;\n }\n &.diva-fullscreen-tools .diva-tools-left .diva-buttons-label {\n clear: both;\n }\n}\n\n.diva-tools.diva-fullscreen-tools {\n width: auto;\n min-width: 260px;\n height: 120px;\n padding: 10px;\n\n .diva-buttons-label, .diva-page-label, .diva-page-nav {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n\n // Hide the extra button that was stuck into the Diva toolbar\n #manuscript-info-target {\n display: none;\n }\n}\n\n#toolbar-row .diva-page-nav {\n // Restore Bootstrap styling\n // FIXME: edit the Diva CSS so this isn't necessary\n line-height: 1.5;\n\n .diva-input {\n width: 100%;\n padding-top: 5px;\n line-height: 1.5;\n }\n\n .input-group {\n width: 90px;\n }\n}\n\n.diva-outer {\n border: none;\n border-right: 1px solid $border-color;\n\n @include ua-support(flexbox) {\n height: 100%;\n }\n}\n\n// Integrate Diva z-index values with the Bootstrap z-index hierarchy\n.diva-outer.diva-fullscreen {\n z-index: $zindex-diva-fullscreen;\n}\n\n.diva-popup, .diva-tools.diva-fullscreen-tools {\n z-index: $zindex-diva-fullscreen + 1;\n}\n\n#diva-canvas-backdrop {\n z-index: $zindex-diva-canvas;\n}\n\n#diva-canvas-wrapper {\n z-index: $zindex-diva-canvas + 1;\n}\n\n#diva-canvas {\n z-index: $zindex-diva-canvas + 2;\n}\n\n#diva-canvas-tools {\n z-index: $zindex-diva-canvas + 3;\n}\n\n#diva-canvas-toolbar div {\n z-index: $zindex-diva-canvas + 4;\n}\n\n.canvas-throbber {\n z-index: $zindex-diva-canvas + 5;\n}\n\n.search-input {\n padding-left: 15px;\n}\n\n@include ua-support(flexbox) {\n .search-input-group {\n display: flex;\n flex-direction: row;\n }\n\n .search-input {\n flex-grow: 1;\n }\n}\n\n@include ua-support(no-flexbox) {\n .search-input-group > * {\n float: left;\n }\n\n .search-input {\n min-width: 100px;\n max-width: 300px;\n }\n}\n\n#menu-sidenav {\n .sidenav a {\n padding-left: 40px;\n }\n\n .nav li > a {\n color: #333;\n }\n}\n\n.sidenav-brand {\n display: block;\n margin-bottom: 22px;\n color: #333;\n\n &:hover, &:active, &.active {\n text-decoration: none;\n color: #333;\n background-color: #eee;\n }\n}\n\n// Navbar styling\n// Select ancestors of .navbar-default to match the specificity of the Bootstrap styling\n// TODO(wabain): See if this can be done using Bootstrap variables. nav-link-padding?\n\n.navbar-default .navbar-brand, .sidenav-brand {\n height: 50px;\n padding: 15px 40px 15px 15px;\n font-size: 20px;\n line-height: 20px;\n\n // Get anchor elements within a brand to be styled like the brand\n a, a:hover, a:focus {\n color: inherit;\n text-decoration: none;\n }\n}\n\n.drop-menu {\n font-size: 22px;\n}\n\n.navbar-menu .dropdown-content {\n display: none;\n position: absolute;\n background-color: #333;\n min-width: 150px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n\n a {\n float: none;\n color: white;\n font-size: 14px;\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n text-align: left;\n }\n a:hover {\n background-color: #555;\n }\n}\n\n.navbar-menu:hover .dropdown-content {\n top: 51px;\n display: block;\n}\n\n@media only screen and (max-width: $grid-float-breakpoint) {\n .navbar-collapse {\n display: none;\n }\n .navbar-menu {\n position: absolute;\n margin: auto;\n display: inline;\n }\n .navbar-header {\n position: fixed;\n left: 51px;\n display: inline;\n }\n .navbar-menu .dropdown-content {\n min-width: 150px;\n }\n .navbar-fixed-top {\n height: 51px;\n }\n .counter {\n display: none;\n }\n}\n\n// A subhead is an extension of a navbar brand that works like a breadcrumb to title a specific page\n.secondary-brand-component::before {\n content: \"›\";\n padding-right: 15px;\n padding-left: 15px;\n}\n\n// If there's a subhead then hide the primary component on smaller screens\n@media (max-width: $screen-sm-min - 1) {\n .primary-brand-component {\n display: none;\n\n // .no-subhead will only be set if there's JS, so we also check for html.no-js\n .no-subhead &, html.no-js & {\n display: block;\n }\n }\n\n .secondary-brand-component {\n display: block;\n\n // Some quick and dirty overflow protection\n max-width: 70vw;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n // Hide the breadcrumb-style continuation\n &::before {\n display: none;\n }\n }\n}\n\n.navbar-default .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n}\n\n// Alter the toggle so that it is permanently pinned to the left of the brand\n// TODO(wabain): use Bootstrap variables here\n.navbar-toggle {\n display: block;\n float: left;\n\n // Margin equal to $navbar-padding-horizontal\n margin-right: 0;\n margin-left: 15px; //FIXME: use variable\n\n padding-top: 11px;\n padding-bottom: 11px;\n\n @media (min-width: $grid-float-breakpoint) {\n margin-right: 15px;\n margin-left: 0;\n }\n\n // Hide the toggle if JS is disabled, since we won't be able to use it anyway\n html.no-js & {\n display: none;\n }\n}\n\n// When JS is enabled, don't display the nav links on smaller screens\nhtml.js {\n .navbar-nav {\n display: none;\n }\n\n @media (min-width: $screen-md-min) {\n .navbar-nav {\n display: block;\n }\n\n .navbar-toggle {\n display: none;\n }\n }\n}\n\n// Always display the collapse on smaller screens with no JS, rather than having it\n// toggle. Inelegant, but it should work.\n@media (max-width: $grid-float-breakpoint - 1) {\n html.no-js .navbar-collapse {\n display: block;\n }\n}\n\n.neume-images img {\n background: #ccc;\n}\n\n.neume-gallery-entry {\n transition: border-color 0.2s;\n float: left;\n max-width: 100px;\n min-width: 90px;\n margin: 5px;\n border: 1px solid $border-color;\n padding: 5px;\n color: $gray-darker;\n\n &:hover, &:focus {\n text-decoration: none;\n border-color: $link-color;\n color: $gray-darker;\n }\n\n .exemplar {\n height: 75px;\n margin: 4px;\n\n img {\n display: block;\n margin: auto;\n max-height: 75px;\n max-width: 75px;\n }\n }\n\n .caption {\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n word-wrap: break-word;\n }\n}\n\n// Interactive Classifier Custom Classes\n\n.bg-success {\n background: lighten($brand-success, 10%);\n}\n\n.bg-warning {\n background: desaturate(lighten($brand-warning, 10%), 10%);\n}\n\n.close {\n color: #000000;\n\n :hover {\n color: $brand-primary;\n }\n}\n\n.glyph-image-container {\n float: left;\n}\n\n.glyph-image-outline {\n padding: 5px;\n border: 1px solid #aaaaaa;\n}\n\n.glyph-image {\n width: 100%;\n min-height: 50px;\n}\n\n#content {\n padding-top: 70px;\n}\n\n#upper {\n width: 75%;\n height: 30px;\n top: 50px;\n right: 0;\n background-color: #cbcbcb;\n position: absolute;\n text-align: center;\n}\n\n.column {\n width: 20%;\n display: inline-block;\n text-align: center;\n padding-top: 7px;\n font-size: 12px;\n}\n\n#left {\n float: left;\n width: 25%;\n height: 100%;\n overflow-y: scroll;\n background-color: #efefef;\n position: absolute;\n top: 50px;\n left: 0;\n padding-top: 50px;\n}\n\n.edit-button {\n width: 35%;\n height: 100%;\n background-color: #cbcbcb;\n margin-left: 10px;\n margin-right: 10px;\n border: none;\n &:hover{\n background-color: #ababab;\n }\n}\n\n#left1 {\n float: left;\n width: 25%;\n height: 50%;\n overflow-y: scroll;\n background-color: #efefef;\n position: absolute;\n left: 0;\n top: 0;\n padding-top: 45px;\n resize: both;\n}\n\n#left2 {\n float: left;\n width: 25%;\n height: 50%;\n overflow-y: scroll;\n background-color: #efefef;\n position: absolute;\n border-top: 1px solid #444444;\n bottom: 0;\n left: 0;\n}\n\n#right {\n float: left;\n overflow-y: scroll;\n height: 100%;\n width: 75%;\n position: absolute;\n top: 0;\n right: 0;\n padding-top: 50px;\n border-left: 1px solid #444444;\n}\n\n#collapse-pane {\n display: inline-block;\n height: 4%;\n width: 75%;\n position: absolute;\n top: 81px;\n left: 25%;\n}\n\n.coll-btn {\n float: left;\n background-color: white;\n height: 95%;\n width: 17%;\n border-top: 1px solid #444444;\n border-left: 1px solid #444444;\n &:hover{\n background-color: #cbcbcb;\n }\n}\n\n.glyph-zoom {\n float: right;\n z-index: 1;\n height: 32px;\n width: 32px;\n font-size: 1.1em;\n text-align: center;\n line-height: 30px;\n position: relative;\n display: inline-block;\n top: 13px;\n right: 10px;\n &:hover{\n background-color: #efefef;\n }\n}\n\n.image-zoom {\n float: right;\n z-index: 1;\n height: 32px;\n width: 32px;\n font-size: 1.1em;\n text-align: center;\n line-height: 30px;\n position: fixed;\n display: inline-block;\n &:hover{\n background-color: #efefef;\n }\n}\n\n#right0 {\n float: left;\n overflow-y: scroll;\n height: 28%;\n width: 75%;\n position: absolute;\n top: 125px;\n right: 0;\n resize: vertical;\n border-left: 1px solid #474747;\n}\n\n#right1 {\n float: left;\n overflow-y: scroll;\n height: 31%;\n width: 75%;\n position: absolute;\n top: 350px;\n right: 0;\n border-top: 1px solid #444444;\n border-left: 1px solid #444444;\n resize: vertical;\n}\n\n#right2 {\n float: left;\n overflow-x: scroll;\n overflow-y: scroll;\n height: 31%;\n width: 75%;\n position: absolute;\n bottom: 0;\n right: 0;\n border-top: 1px solid #444444;\n border-left: 1px solid #444444;\n}\n\n.preview-background {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.preview-highlight {\n background: #ff0000;\n opacity: 0.5;\n position: absolute;\n}\n"]} \ No newline at end of file diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.ttf b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 000000000..1413fc609 Binary files /dev/null and b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.ttf differ diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.woff b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 000000000..9e612858f Binary files /dev/null and b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/fonts/glyphicons-halflings-regular.woff differ diff --git a/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/js/compiled/classifier-static.min.js b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/js/compiled/classifier-static.min.js new file mode 100644 index 000000000..9351017cf --- /dev/null +++ b/rodan-main/code/rodan/jobs/interactive_classifier/rodan_job/static/js/compiled/classifier-static.min.js @@ -0,0 +1,31797 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "/static/js/app/"; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + + __webpack_require__(3); + + __webpack_require__(2); + + __webpack_require__(4); + + __webpack_require__(8); + + __webpack_require__(11); + + __webpack_require__(1); + + var _App = __webpack_require__(6); + + var _App2 = _interopRequireDefault(_App); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + + _App2.default.on('start', function () {}); + + _App2.default.start(); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(jQuery) {/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + + if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') + } + + +function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') + } + }(jQuery); + + /* ======================================================================== + * Bootstrap: transition.js v3.3.7 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: alert.js v3.3.7 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.7' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector === '#' ? [] : selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: button.js v3.3.7 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.7' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d).prop(d, true) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d).prop(d, false) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault() + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus') + else $btn.find('input:visible,button:visible').first().trigger('focus') + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: carousel.js v3.3.7 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.7' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: collapse.js v3.3.7 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + /* jshint latedef: false */ + + +function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.7' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: modal.js v3.3.7 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.7' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: tooltip.js v3.3.7 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.7' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + } + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var isSvg = window.SVGElement && el instanceof window.SVGElement + // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. + // See https://github.com/twbs/bootstrap/issues/20280 + var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + that.$element = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + + }(jQuery); + + /* ======================================================================== + * Bootstrap: popover.js v3.3.7 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.7' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + + }(jQuery); + + /* ======================================================================== + * Bootstrap: scrollspy.js v3.3.7 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.7' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: tab.js v3.3.7 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.7' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + + }(jQuery); + + /* ======================================================================== + * Bootstrap: affix.js v3.3.7 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + + +function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.7' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + + }(jQuery); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ + ( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + + // Pass this if window is not defined yet + } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + + // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 + // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode + // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common + // enough that all such attempts are guarded in a try block. + "use strict"; + + var arr = []; + + var document = window.document; + + var getProto = Object.getPrototypeOf; + + var slice = arr.slice; + + var concat = arr.concat; + + var push = arr.push; + + var indexOf = arr.indexOf; + + var class2type = {}; + + var toString = class2type.toString; + + var hasOwn = class2type.hasOwnProperty; + + var fnToString = hasOwn.toString; + + var ObjectFunctionString = fnToString.call( Object ); + + var support = {}; + + var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + + var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + + function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + } + /* global Symbol */ + // Defining this global in .eslintrc.json would create a danger of using the global + // unguarded in another place, it seems safer to define global only for this module + + + + var + version = "3.3.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + + jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice + }; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support + } ); + + if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; + } + + // Populate the class2type map + jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + + function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; + } + var Sizzle = + /*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ + (function( window ) { + + var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + + // Optimize for push.apply( _, NodeList ) + try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; + } catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; + } + + function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); + } + + /** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ + function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; + } + + /** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ + function markFunction( fn ) { + fn[ expando ] = true; + return fn; + } + + /** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ + function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } + } + + /** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ + function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } + } + + /** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ + function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; + } + + /** + * Returns a function to use in pseudos for input types + * @param {String} type + */ + function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ + function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; + } + + /** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ + function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; + } + + /** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ + function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); + } + + /** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ + function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; + } + + // Expose support vars for convenience + support = Sizzle.support = {}; + + /** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ + isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + + /** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ + setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; + }; + + Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); + }; + + Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; + }; + + Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); + }; + + Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; + }; + + Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); + }; + + Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); + }; + + /** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ + Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; + }; + + /** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ + getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; + }; + + Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } + }; + + Expr.pseudos["nth"] = Expr.pseudos["eq"]; + + // Add button/input type pseudos + for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); + } + for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); + } + + // Easy API for creating new setFilters + function setFilters() {} + setFilters.prototype = Expr.filters = Expr.pseudos; + Expr.setFilters = new setFilters(); + + tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); + }; + + function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; + } + + function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; + } + + function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; + } + + function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; + } + + function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; + } + + function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); + } + + function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); + } + + function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; + } + + compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; + }; + + /** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ + select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; + }; + + // One-time assignments + + // Sort stability + support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + + // Support: Chrome 14-35+ + // Always assume duplicates if they aren't passed to the comparison function + support.detectDuplicates = !!hasDuplicate; + + // Initialize against the default document + setDocument(); + + // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) + // Detached nodes confoundingly follow *each other* + support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; + }); + + // Support: IE<8 + // Prevent attribute/property "interpolation" + // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx + if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; + }) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); + } + + // Support: IE<9 + // Use defaultValue in place of getAttribute("value") + if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; + }) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); + } + + // Support: IE<9 + // Use getAttributeNode to fetch booleans when getAttribute lies + if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; + }) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); + } + + return Sizzle; + + })( window ); + + + + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + + // Deprecated + jQuery.expr[ ":" ] = jQuery.expr.pseudos; + jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + jQuery.escapeSelector = Sizzle.escape; + + + + + var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; + }; + + + var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; + }; + + + var rneedsContext = jQuery.expr.match.needsContext; + + + + function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + + }; + var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + + // Implement the identical functionality for filter and not + function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); + } + + jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); + }; + + jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } + } ); + + + // Initialize a jQuery object + + + // A central reference to the root jQuery(document) + var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + + // Give the init function the jQuery prototype for later instantiation + init.prototype = jQuery.fn; + + // Initialize central reference + rootjQuery = jQuery( document ); + + + var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + + jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } + } ); + + function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; + } + + jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } + }, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; + } ); + var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + + // Convert String-formatted options into Object-formatted ones + function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; + } + + /* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; + }; + + + function Identity( v ) { + return v; + } + function Thrower( ex ) { + throw ex; + } + + function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } + } + + jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } + } ); + + + // These usually indicate a programmer mistake during development, + // warn about them ASAP rather than swallowing them by default. + var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + + jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } + }; + + + + + jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); + }; + + + + + // The deferred used on DOM ready + var readyList = jQuery.Deferred(); + + jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; + }; + + jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } + } ); + + jQuery.ready.then = readyList.then; + + // The ready event handler and self cleanup method + function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); + } + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE <=9 - 10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + + + + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; + }; + + + // Matches dashed string for camelizing + var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + + // Used by camelCase as callback to replace() + function fcamelCase( all, letter ) { + return letter.toUpperCase(); + } + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 15 + // Microsoft forgot to hump their vendor prefix (#9572) + function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + } + var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); + }; + + + + + function Data() { + this.expando = jQuery.expando + Data.uid++; + } + + Data.uid = 1; + + Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } + }; + var dataPriv = new Data(); + + var dataUser = new Data(); + + + + // Implementation Summary + // + // 1. Enforce API surface and semantic compatibility with 1.9.x branch + // 2. Improve the module's maintainability by reducing the storage + // paths to a single mechanism. + // 3. Use the same single mechanism to support "private" and "user" data. + // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) + // 5. Avoid exposing implementation details on user objects (eg. expando properties) + // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + + var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + + function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; + } + + function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; + } + + jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } + } ); + + jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } + } ); + + + jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } + } ); + + jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } + } ); + var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + + var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + + var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + }; + + + + + function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; + } + + + var defaultDisplayMap = {}; + + function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; + } + + function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; + } + + jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } + } ); + var rcheckableType = ( /^(?:checkbox|radio)$/i ); + + var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + + var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
                  " ], + col: [ 2, "", "
                  " ], + tr: [ 2, "", "
                  " ], + td: [ 3, "", "
                  " ], + + _default: [ 0, "", "" ] + }; + + // Support: IE <=9 only + wrapMap.optgroup = wrapMap.option; + + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + + function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; + } + + + // Mark scripts as having already been evaluated + function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } + } + + + var rhtml = /<|&#?\w+;/; + + function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; + } + + + ( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + } )(); + var documentElement = document.documentElement; + + + + var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } + + // Support: IE <=9 only + // See #13393 for more info + function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } + } + + function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); + } + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } + }; + + jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + }; + + jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; + }; + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding + // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } + }; + + // Includes all common event props including KeyEvent and MouseEvent specific props + jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } + }, jQuery.event.addProp ); + + // Create mouseenter/leave events using mouseover/out and event-time checks + // so that event delegation works in jQuery. + // Do the same for pointerenter/pointerleave and pointerover/pointerout + // + // Support: Safari 7 only + // Safari sends mouseenter too often; see: + // https://bugs.chromium.org/p/chromium/issues/detail?id=470258 + // for the description of the bug (it existed in older Chrome versions as well). + jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; + } ); + + jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } + } ); + + + var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + + // Prefer a tbody over its parent table for containing new rows + function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; + } + + // Replace/restore the type attribute of script elements for safe DOM manipulation + function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; + } + function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; + } + + function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } + } + + // Fix IE bugs, see support tests + function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } + } + + function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; + } + + function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; + } + + jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } + } ); + + jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } + } ); + + jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; + } ); + var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + + var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + + ( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); + } )(); + + + function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; + } + + + function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; + } + + + var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + + // Return a css property mapped to a potentially vendor prefixed property + function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } + } + + // Return a property mapped along what jQuery.cssProps suggests or to + // a vendor prefixed property. + function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; + } + + function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; + } + + function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; + } + + function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; + } + + jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } + } ); + + jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; + } ); + + jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } + ); + + // These hooks are used by animate to expand properties + jQuery.each( { + margin: "", + padding: "", + border: "Width" + }, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } + } ); + + jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } + } ); + + + function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); + } + jQuery.Tween = Tween; + + Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } + }; + + Tween.prototype.init.prototype = Tween.prototype; + + Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } + }; + + // Support: IE <=9 only + // Panic based approach to setting things on disconnected nodes + Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } + }; + + jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" + }; + + jQuery.fx = Tween.prototype.init; + + // Back compat <1.8 extension point + jQuery.fx.step = {}; + + + + + var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + + function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } + } + + // Animations created synchronously will run synchronously + function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); + } + + // Generate parameters to create a standard animation + function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; + } + + function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } + } + + function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } + } + + function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } + } + + function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; + } + + jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } + } ); + + jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; + }; + + jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } + } ); + + jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; + } ); + + // Generate shortcuts for custom animations + jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } + }, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; + } ); + + jQuery.timers = []; + jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; + }; + + jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); + }; + + jQuery.fx.interval = 13; + jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); + }; + + jQuery.fx.stop = function() { + inProgress = null; + }; + + jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 + }; + + + // Based off of the plugin by Clint Helfers, with permission. + // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ + jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); + }; + + + ( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; + } )(); + + + var boolHook, + attrHandle = jQuery.expr.attrHandle; + + jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } + } ); + + jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } + } ); + + // Hooks for boolean attributes + boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } + }; + + jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; + } ); + + + + + var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + + jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } + } ); + + jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } + } ); + + // Support: IE <=11 only + // Accessing the selectedIndex property + // forces the browser to respect setting selected + // on the option + // The getter ensures a default option is selected + // when in an optgroup + // eslint rule "no-unused-expressions" is disabled for this code + // since it considers such accessions noop + if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; + } + + jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" + ], function() { + jQuery.propFix[ this.toLowerCase() ] = this; + } ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + + function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; + } + + function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; + } + + jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } + } ); + + + + + var rreturn = /\r/g; + + jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } + } ); + + jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } + } ); + + // Radios and checkboxes getter/setter + jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } + } ); + + + + + // Return jQuery for attributes-only inclusion + + + support.focusin = "onfocusin" in window; + + + var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + + jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + + } ); + + jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } + } ); + + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); + } + var location = window.location; + + var nonce = Date.now(); + + var rquery = ( /\?/ ); + + + + // Cross-browser xml parsing + jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }; + + + var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + + function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } + } + + // Serialize an array of form elements or a set of + // key/values into a query string + jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); + }; + + jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } + } ); + + + var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + + // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport + function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; + } + + // Base inspection function for prefilters and transports + function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); + } + + // A special extend for ajax options + // that takes "flat" options (not to be deep extended) + // Fixes #9887 + function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; + } + + /* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ + function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } + } + + /* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ + function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; + } + + jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } + } ); + + jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; + } ); + + + jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); + }; + + + jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } + } ); + + + jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); + }; + jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); + }; + + + + + jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} + }; + + var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + + support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); + support.ajax = xhrSupported = !!xhrSupported; + + jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } + } ); + + + + + // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) + jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } + } ); + + // Install script dataType + jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } + } ); + + // Handle cache's special case and crossDomain + jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } + } ); + + // Bind script tag hack transport + jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "